@@ -46,8 +46,6 @@ struct SVGPanel; | |||
static const float RACK_GRID_WIDTH = 15; | |||
static const float RACK_GRID_HEIGHT = 380; | |||
static const Vec RACK_GRID_SIZE = Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT); | |||
static const std::string PRESET_FILTERS = "VCV Rack module preset (.vcvm):vcvm"; | |||
static const std::string PATCH_FILTERS = "VCV Rack patch (.vcv):vcv"; | |||
struct ModuleWidget : OpaqueWidget { | |||
@@ -70,12 +68,6 @@ struct ModuleWidget : OpaqueWidget { | |||
virtual json_t *toJson(); | |||
virtual void fromJson(json_t *rootJ); | |||
void copyClipboard(); | |||
void pasteClipboard(); | |||
void save(std::string filename); | |||
void load(std::string filename); | |||
void loadDialog(); | |||
void saveDialog(); | |||
virtual void create(); | |||
virtual void _delete(); | |||
@@ -162,20 +154,21 @@ struct RackWidget : OpaqueWidget { | |||
void clear(); | |||
/** Clears the rack and loads the template patch */ | |||
void reset(); | |||
void loadDialog(); | |||
void openDialog(); | |||
void saveDialog(); | |||
void saveAsDialog(); | |||
/** If `lastPath` is defined, ask the user to reload it */ | |||
void revert(); | |||
/** Disconnects all wires */ | |||
void disconnect(); | |||
void save(std::string filename); | |||
void load(std::string filename); | |||
void savePatch(std::string filename); | |||
void loadPatch(std::string filename); | |||
#ifdef USE_VST2 | |||
bool loadPatchFromString (const char *_string); | |||
char *savePatchToString (void); | |||
#endif // USE_VST2 | |||
json_t *toJson(); | |||
void fromJson(json_t *rootJ); | |||
/** Creates a module and adds it to the rack */ | |||
ModuleWidget *moduleFromJson(json_t *moduleJ); | |||
void pastePresetClipboard(); | |||
void addModule(ModuleWidget *m); | |||
/** Removes the module and transfers ownership to the caller */ | |||
@@ -15,5 +15,10 @@ std::string assetLocal(std::string filename); | |||
/** Returns the path of a resource in the plugin's folder. Should only read files from this location. */ | |||
std::string assetPlugin(Plugin *plugin, std::string filename); | |||
#ifdef USE_VST2 | |||
std::string assetStaticPlugin(const char *name/*e.g. "Fundamentals"*/, const char *_relPathOrNull = 0); | |||
std::string assetPlugin(const char *name/*e.g. "Fundamentals"*/, const char *_relPathOrNull = 0); | |||
#endif // USE_VST2 | |||
} // namespace rack |
@@ -2,12 +2,16 @@ | |||
#include <jansson.h> | |||
#ifdef __GNUC__ | |||
#pragma GCC diagnostic push | |||
#ifndef __clang__ | |||
#pragma GCC diagnostic ignored "-Wsuggest-override" | |||
#endif | |||
#include <RtAudio.h> | |||
#pragma GCC diagnostic pop | |||
#else | |||
#include <RtAudio.h> | |||
#endif // __GNUC__ | |||
namespace rack { | |||
@@ -53,21 +53,18 @@ struct RealTimeConvolver { | |||
RealTimeConvolver(size_t blockSize) { | |||
this->blockSize = blockSize; | |||
pffft = pffft_new_setup(blockSize*2, PFFFT_REAL); | |||
outputTail = new float[blockSize]; | |||
memset(outputTail, 0, blockSize * sizeof(float)); | |||
tmpBlock = new float[blockSize*2]; | |||
memset(tmpBlock, 0, blockSize*2 * sizeof(float)); | |||
outputTail = new float[blockSize](); | |||
tmpBlock = new float[blockSize*2](); | |||
} | |||
~RealTimeConvolver() { | |||
setKernel(NULL, 0); | |||
clear(); | |||
delete[] outputTail; | |||
delete[] tmpBlock; | |||
pffft_destroy_setup(pffft); | |||
} | |||
void setKernel(const float *kernel, size_t length) { | |||
// Clear existing kernel | |||
void clear() { | |||
if (kernelFfts) { | |||
pffft_aligned_free(kernelFfts); | |||
kernelFfts = NULL; | |||
@@ -78,24 +75,29 @@ struct RealTimeConvolver { | |||
} | |||
kernelBlocks = 0; | |||
inputPos = 0; | |||
} | |||
void setKernel(const float *kernel, size_t length) { | |||
clear(); | |||
if (kernel && length > 0) { | |||
// Round up to the nearest factor of `blockSize` | |||
kernelBlocks = (length - 1) / blockSize + 1; | |||
// Allocate blocks | |||
kernelFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
inputFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
memset(inputFfts, 0, sizeof(float) * blockSize*2 * kernelBlocks); | |||
for (size_t i = 0; i < kernelBlocks; i++) { | |||
// Pad each block with zeros | |||
memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
size_t len = min((int) blockSize, (int) (length - i*blockSize)); | |||
memcpy(tmpBlock, &kernel[i*blockSize], sizeof(float)*len); | |||
// Compute fft | |||
pffft_transform(pffft, tmpBlock, &kernelFfts[blockSize*2 * i], NULL, PFFFT_FORWARD); | |||
} | |||
assert(kernel); | |||
assert(length > 0); | |||
// Round up to the nearest factor of `blockSize` | |||
kernelBlocks = (length - 1) / blockSize + 1; | |||
// Allocate blocks | |||
kernelFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
inputFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
memset(inputFfts, 0, sizeof(float) * blockSize*2 * kernelBlocks); | |||
for (size_t i = 0; i < kernelBlocks; i++) { | |||
// Pad each block with zeros | |||
memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
size_t len = min((int) blockSize, (int) (length - i*blockSize)); | |||
memcpy(tmpBlock, &kernel[i*blockSize], sizeof(float)*len); | |||
// Compute fft | |||
pffft_transform(pffft, tmpBlock, &kernelFfts[blockSize*2 * i], NULL, PFFFT_FORWARD); | |||
} | |||
} | |||
@@ -121,7 +123,7 @@ struct RealTimeConvolver { | |||
// Note: This is the CPU bottleneck loop | |||
for (size_t i = 0; i < kernelBlocks; i++) { | |||
size_t pos = (inputPos - i + kernelBlocks) % kernelBlocks; | |||
pffft_zconvolve_accumulate(pffft, &kernelFfts[blockSize*2 * i], &inputFfts[blockSize*2 * pos], tmpBlock, 1.f); | |||
pffft_zconvolve_accumulate(pffft, &kernelFfts[blockSize*2 * i], &inputFfts[blockSize*2 * pos], tmpBlock, 1.0); | |||
} | |||
// Compute output | |||
pffft_transform(pffft, tmpBlock, tmpBlock, NULL, PFFFT_BACKWARD); | |||
@@ -130,10 +132,9 @@ struct RealTimeConvolver { | |||
tmpBlock[i] += outputTail[i]; | |||
} | |||
// Copy output block to output | |||
float scale = 1.f / (blockSize*2); | |||
for (size_t i = 0; i < blockSize; i++) { | |||
// Scale based on FFT | |||
output[i] = tmpBlock[i] * scale; | |||
output[i] = tmpBlock[i] / blockSize; | |||
} | |||
// Set tail | |||
for (size_t i = 0; i < blockSize; i++) { | |||
@@ -49,6 +49,10 @@ struct Output { | |||
struct Module { | |||
#ifdef USE_VST2 | |||
// assigned when module is added to engine (see engine.cpp:engineAddModule()) | |||
int vst2_unique_param_base_id; | |||
#endif // USE_VST2 | |||
std::vector<Param> params; | |||
std::vector<Input> inputs; | |||
std::vector<Output> outputs; | |||
@@ -118,12 +122,14 @@ void engineStop(); | |||
/** Does not transfer pointer ownership */ | |||
void engineAddModule(Module *module); | |||
void engineRemoveModule(Module *module); | |||
void engineResetModule(Module *module); | |||
void engineRandomizeModule(Module *module); | |||
/** Does not transfer pointer ownership */ | |||
void engineAddWire(Wire *wire); | |||
void engineRemoveWire(Wire *wire); | |||
#ifdef USE_VST2 | |||
void engineSetParam(Module *module, int paramId, float value, bool bVSTAutomate = true); | |||
#else | |||
void engineSetParam(Module *module, int paramId, float value); | |||
#endif | |||
void engineSetParamSmooth(Module *module, int paramId, float value); | |||
void engineSetSampleRate(float sampleRate); | |||
float engineGetSampleRate(); | |||
@@ -131,13 +137,4 @@ float engineGetSampleRate(); | |||
float engineGetSampleTime(); | |||
extern bool gPaused; | |||
/** Plugins should not manipulate other modules or wires unless that is the entire purpose of the module. | |||
Your plugin needs to have a clear purpose for manipulating other modules and wires and must be done with a good UX. | |||
*/ | |||
extern std::vector<Module*> gModules; | |||
extern std::vector<Wire*> gWires; | |||
extern bool gPowerMeter; | |||
} // namespace rack |
@@ -0,0 +1,158 @@ | |||
#pragma once | |||
#include <map> | |||
#include <list> | |||
#include <vector> | |||
#include <string> | |||
#include <mutex> | |||
#include <thread> | |||
#include "util/common.hpp" // VIPMutex | |||
#ifdef USE_VST2 | |||
struct VSTPluginWrapper; | |||
#endif // USE_VST2 | |||
namespace rack { | |||
struct Module; | |||
struct Wire; | |||
struct KeyboardDriver; | |||
struct MidiDriver; | |||
struct Plugin; | |||
#ifdef USE_VST2 | |||
struct VSTMidiInputDevice; | |||
#define VST2_MAX_UNIQUE_PARAM_IDS (9999) | |||
#endif // USE_VST2 | |||
// | |||
// the structure fields reflect the original file locations | |||
// (e.g. 'window' was originally located in 'window.cpp') | |||
// | |||
struct VST2QueuedParam { | |||
int unique_id; | |||
float norm_value; | |||
}; | |||
struct Global { | |||
bool gPaused; | |||
/** Plugins should not manipulate other modules or wires unless that is the entire purpose of the module. | |||
Your plugin needs to have a clear purpose for manipulating other modules and wires and must be done with a good UX. | |||
*/ | |||
std::vector<Module*> gModules; | |||
std::vector<Wire*> gWires; | |||
bool gPowerMeter; | |||
struct { | |||
bool running; | |||
float sampleRate; | |||
float sampleTime; | |||
std::mutex mutex; | |||
std::thread thread; | |||
VIPMutex vipMutex; | |||
// Parameter interpolation | |||
Module *smoothModule; | |||
int smoothParamId; | |||
float smoothValue; | |||
} engine; | |||
struct { | |||
std::string globalDir; | |||
std::string localDir; | |||
} asset; | |||
struct { | |||
KeyboardDriver *driver; | |||
} keyboard; | |||
struct { | |||
std::vector<int> driverIds; | |||
std::map<int, MidiDriver*> drivers; | |||
} midi; | |||
struct { | |||
std::list<Plugin*> gPlugins; | |||
std::string gToken; | |||
bool isDownloading; | |||
float downloadProgress; | |||
std::string downloadName; | |||
std::string loginStatus; | |||
} plugin; | |||
struct { | |||
bool gSkipAutosaveOnLaunch; | |||
} settings; | |||
struct { | |||
FILE *logFile; | |||
std::chrono::high_resolution_clock::time_point startTime; | |||
} logger; | |||
struct { | |||
uint64_t xoroshiro128plus_state[2] = {}; | |||
} random; | |||
// struct { | |||
// } plugins; | |||
#ifdef USE_VST2 | |||
struct { | |||
int last_seen_instance_count; | |||
const char *program_dir; | |||
float *const*inputs; | |||
float **outputs; | |||
unsigned int frame_idx; | |||
unsigned int last_seen_num_frames; | |||
VSTPluginWrapper *wrapper; | |||
VSTMidiInputDevice *midi_device; | |||
int next_unique_param_base_id; | |||
std::vector<VST2QueuedParam> queued_params; | |||
bool b_patch_loading; | |||
} vst2; | |||
#endif // USE_VST2 | |||
void init(void) { | |||
gPaused = false; | |||
gPowerMeter = false; | |||
engine.running = false; | |||
engine.sampleRate = 44100.0f; | |||
engine.smoothModule = NULL; | |||
keyboard.driver = NULL; | |||
plugin.isDownloading = false; | |||
plugin.downloadProgress = 0.0; | |||
settings.gSkipAutosaveOnLaunch = false; | |||
logger.logFile = NULL; | |||
random.xoroshiro128plus_state[0] = 0; | |||
random.xoroshiro128plus_state[1] = 0; | |||
#ifdef USE_VST2 | |||
vst2.midi_device = NULL; | |||
vst2.next_unique_param_base_id = 1; | |||
vst2.b_patch_loading = false; | |||
#endif | |||
} | |||
}; | |||
} // namespace rack |
@@ -0,0 +1,18 @@ | |||
#pragma once | |||
#include "../dep/yac/yac.h" | |||
namespace rack { | |||
struct Global; | |||
struct GlobalUI; | |||
extern YAC_TLS Global *global; | |||
extern YAC_TLS GlobalUI *global_ui; | |||
struct KeyboardDriver; | |||
} // namespace rack |
@@ -0,0 +1,138 @@ | |||
#pragma once | |||
#include <set> | |||
#include <map> | |||
#include "util/math.hpp" // Vec | |||
#include "tags.hpp" // ModelTag enum | |||
#include "widgets.hpp" | |||
struct GLFWwindow; | |||
struct NVGcontext; | |||
namespace rack { | |||
struct Font; | |||
struct Widget; | |||
struct RackWidget; | |||
struct Toolbar; | |||
struct RackScene; | |||
struct Scene; | |||
struct Model; | |||
// | |||
// the structure fields reflect the original file locations | |||
// (e.g. 'window' was originally located in 'window.cpp') | |||
// | |||
struct GlobalUI { | |||
struct { | |||
GLFWwindow *gWindow; | |||
NVGcontext *gVg; | |||
NVGcontext *gFramebufferVg; | |||
std::shared_ptr<Font> gGuiFont; | |||
float gPixelRatio; | |||
float gWindowRatio; | |||
bool gAllowCursorLock; | |||
int gGuiFrame; | |||
Vec gMousePos; | |||
std::string lastWindowTitle; | |||
int windowX; | |||
int windowY; | |||
int windowWidth; | |||
int windowHeight; | |||
std::map<std::string, std::weak_ptr<Font>> font_cache; | |||
std::map<std::string, std::weak_ptr<Image>> image_cache; | |||
std::map<std::string, std::weak_ptr<SVG>> svg_cache; | |||
} window; | |||
struct { | |||
Widget *gHoveredWidget; | |||
Widget *gDraggedWidget; | |||
Widget *gDragHoveredWidget; | |||
Widget *gFocusedWidget; | |||
Widget *gTempWidget; | |||
} widgets; | |||
struct { | |||
Scene *gScene; | |||
} ui; | |||
struct { | |||
std::set<Model*> sFavoriteModels; | |||
std::string sAuthorFilter; | |||
ModelTag sTagFilter; | |||
} module_browser; | |||
struct { | |||
std::string gApplicationName; | |||
std::string gApplicationVersion; | |||
std::string gApiHost; | |||
std::string gLatestVersion; | |||
bool gCheckVersion; | |||
RackWidget *gRackWidget; | |||
Toolbar *gToolbar; | |||
RackScene *gRackScene; | |||
} app; | |||
#ifdef USE_VST2 | |||
struct { | |||
volatile int b_close_window; | |||
volatile int b_hide_window; | |||
} vst2; | |||
#endif // USE_VST2 | |||
void init(void) { | |||
window.gWindow = NULL; | |||
window.gVg = NULL; | |||
window.gFramebufferVg = NULL; | |||
window.gPixelRatio = 1.0; | |||
window.gWindowRatio = 1.0; | |||
#ifdef USE_VST2 | |||
window.gAllowCursorLock = false; | |||
#else | |||
window.gAllowCursorLock = true; | |||
#endif // USE_VST2 | |||
window.windowX = 0; | |||
window.windowY = 0; | |||
window.windowWidth = 0; | |||
window.windowHeight = 0; | |||
widgets.gHoveredWidget = NULL; | |||
widgets.gDraggedWidget = NULL; | |||
widgets.gDragHoveredWidget = NULL; | |||
widgets.gFocusedWidget = NULL; | |||
widgets.gTempWidget = NULL; | |||
ui.gScene = NULL; | |||
module_browser.sTagFilter = ModelTag::NO_TAG; | |||
app.gApplicationName = "VeeSeeVST Rack"; | |||
app.gApplicationVersion = TOSTRING(VERSION); | |||
app.gApiHost = "https://api.vcvrack.com"; | |||
// app.gApiHost = "http://localhost:8081"; | |||
app.gCheckVersion = true; | |||
app.gRackWidget = NULL; | |||
app.gToolbar = NULL; | |||
app.gRackScene = NULL; | |||
#ifdef USE_VST2 | |||
vst2.b_close_window = 0; | |||
vst2.b_hide_window = 0; | |||
#endif // USE_VST2 | |||
} | |||
}; | |||
} // namespace rack |
@@ -125,5 +125,29 @@ extern std::string gToken; | |||
/** Called once to initialize and return the Plugin instance. | |||
You must implement this in your plugin | |||
*/ | |||
extern "C" | |||
void init(rack::Plugin *plugin); | |||
#ifdef _MSC_VER | |||
// (note) turns out that VCV plugins don't work when the VCV engine itself is a DLL | |||
// #define RACK_PLUGIN_EXPORT __declspec(dllexport) | |||
#define RACK_PLUGIN_EXPORT | |||
#else | |||
#define RACK_PLUGIN_EXPORT | |||
#endif | |||
#define RACK_PLUGIN_INIT_ID_INTERNAL p->slug = TOSTRING(SLUG); p->version = TOSTRING(VERSION) | |||
#ifdef USE_VST2 | |||
#define RACK_PLUGIN_DECLARE(pluginname) | |||
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) | |||
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | |||
#else | |||
#define RACK_PLUGIN_DECLARE(pluginname) extern Plugin *plugin | |||
#define RACK_PLUGIN_INIT(pluginname) extern "C" RACK_PLUGIN_EXPORT void init(rack::Plugin *p) | |||
#define RACK_PLUGIN_INIT_ID() plugin = p; RACK_PLUGIN_INIT_ID_INTERNAL | |||
#endif // USE_VST2 | |||
#define RACK_PLUGIN_INIT_WEBSITE(url) p->website = url | |||
#define RACK_PLUGIN_INIT_MANUAL(url) p->manual = url | |||
#define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *create_model_##pluginname##_##modelname##(void) | |||
#define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void) | |||
#define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(create_model_##pluginname##_##modelname##()) |
@@ -88,5 +88,9 @@ DEPRECATED TModuleLightWidget *createLight(Vec pos, Module *module, int firstLig | |||
return light; | |||
} | |||
// Rack instance, stores global states | |||
struct Rack { | |||
}; | |||
} // namespace rack |
@@ -3,12 +3,17 @@ | |||
#include "midi.hpp" | |||
#include <map> | |||
#ifdef __GNUC__ | |||
#pragma GCC diagnostic push | |||
#ifndef __clang__ | |||
#pragma GCC diagnostic ignored "-Wsuggest-override" | |||
#endif | |||
#include "rtmidi/RtMidi.h" | |||
#pragma GCC diagnostic pop | |||
#else | |||
#include "rtmidi/RtMidi.h" | |||
#endif // __GNUC__ | |||
namespace rack { | |||
@@ -52,7 +52,11 @@ Example: | |||
#define ENUMS(name, count) name, name ## _LAST = name + (count) - 1 | |||
/** Deprecation notice for GCC */ | |||
#ifdef _MSC_VER | |||
#define DEPRECATED | |||
#else | |||
#define DEPRECATED __attribute__ ((deprecated)) | |||
#endif | |||
/** References binary files compiled into the program. | |||
@@ -0,0 +1,35 @@ | |||
#pragma once | |||
#include "midi.hpp" | |||
#include <map> | |||
namespace rack { | |||
#define VST_DRIVER (-0x4489) | |||
struct VSTMidiInputDevice : MidiInputDevice { | |||
VSTMidiInputDevice(int driverId, int deviceId); | |||
~VSTMidiInputDevice(); | |||
}; | |||
struct VSTMidiDriver : MidiDriver { | |||
VSTMidiInputDevice *device; | |||
VSTMidiDriver(int driverId); | |||
~VSTMidiDriver(); | |||
std::string getName() override; | |||
std::vector<int> getInputDeviceIds() override; | |||
std::string getInputDeviceName(int deviceId) override; | |||
MidiInputDevice *subscribeInputDevice(int deviceId, MidiInput *midiInput) override; | |||
void unsubscribeInputDevice(int deviceId, MidiInput *midiInput) override; | |||
}; | |||
void vstmidiInit(); | |||
} // namespace rack |
@@ -12,6 +12,8 @@ | |||
#endif | |||
extern const char *g_program_dir; | |||
namespace rack { | |||
@@ -0,0 +1,99 @@ | |||
LIB_OBJ= \ | |||
dep/jpommier-pffft-29e4f76ac53b/fftpack.o \ | |||
dep/jpommier-pffft-29e4f76ac53b/pffft.o \ | |||
dep/nanovg/src/nanovg.o \ | |||
dep/osdialog/osdialog.o \ | |||
dep/osdialog/osdialog_win.o \ | |||
src/app/app.o \ | |||
src/app/AudioWidget.o \ | |||
src/app/CircularShadow.o \ | |||
src/app/Knob.o \ | |||
src/app/LedDisplay.o \ | |||
src/app/LightWidget.o \ | |||
src/app/MidiWidget.o \ | |||
src/app/ModuleBrowser.o \ | |||
src/app/ModuleLightWidget.o \ | |||
src/app/ModuleWidget.o \ | |||
src/app/MomentarySwitch.o \ | |||
src/app/MultiLightWidget.o \ | |||
src/app/Panel.o \ | |||
src/app/ParamWidget.o \ | |||
src/app/PluginManagerWidget.o \ | |||
src/app/Port.o \ | |||
src/app/RackRail.o \ | |||
src/app/RackScene.o \ | |||
src/app/RackScrollWidget.o \ | |||
src/app/RackWidget.o \ | |||
src/app/SpriteKnob.o \ | |||
src/app/SVGButton.o \ | |||
src/app/SVGKnob.o \ | |||
src/app/SVGPanel.o \ | |||
src/app/SVGPort.o \ | |||
src/app/SVGScrew.o \ | |||
src/app/SVGSlider.o \ | |||
src/app/SVGSwitch.o \ | |||
src/app/ToggleSwitch.o \ | |||
src/app/Toolbar.o \ | |||
src/app/WireContainer.o \ | |||
src/app/WireWidget.o \ | |||
src/asset.o \ | |||
src/audio.o \ | |||
src/Core/AudioInterface.o \ | |||
src/Core/Blank.o \ | |||
src/Core/Core.o \ | |||
src/Core/MIDICCToCVInterface.o \ | |||
src/Core/MIDIToCVInterface.o \ | |||
src/Core/MIDITriggerToCVInterface.o \ | |||
src/Core/Notes.o \ | |||
src/Core/QuadMIDIToCVInterface.o \ | |||
src/dsp/minblep.o \ | |||
src/engine.o \ | |||
src/keyboard.o \ | |||
src/midi.o \ | |||
src/plugin.o \ | |||
src/settings.o \ | |||
src/tags.o \ | |||
src/ui/Button.o \ | |||
src/ui/ChoiceButton.o \ | |||
src/ui/IconButton.o \ | |||
src/ui/Label.o \ | |||
src/ui/layouts.o \ | |||
src/ui/List.o \ | |||
src/ui/Menu.o \ | |||
src/ui/MenuItem.o \ | |||
src/ui/MenuLabel.o \ | |||
src/ui/MenuOverlay.o \ | |||
src/ui/MenuSeparator.o \ | |||
src/ui/PasswordField.o \ | |||
src/ui/ProgressBar.o \ | |||
src/ui/RadioButton.o \ | |||
src/ui/Scene.o \ | |||
src/ui/ScrollWidget.o \ | |||
src/ui/Slider.o \ | |||
src/ui/TextField.o \ | |||
src/ui/Tooltip.o \ | |||
src/ui/ui.o \ | |||
src/ui/WindowWidget.o \ | |||
src/util/color.o \ | |||
src/util/logger.o \ | |||
src/util/random.o \ | |||
src/util/request.o \ | |||
src/util/string.o \ | |||
src/util/system.o \ | |||
src/widgets/FramebufferWidget.o \ | |||
src/widgets/QuantityWidget.o \ | |||
src/widgets/SpriteWidget.o \ | |||
src/widgets/SVGWidget.o \ | |||
src/widgets/TransformWidget.o \ | |||
src/widgets/Widget.o \ | |||
src/widgets/widgets.o \ | |||
src/widgets/ZoomWidget.o \ | |||
src/window.o \ | |||
src/vstmidi.o | |||
MAIN_OBJ= \ | |||
src/vst2_main.o \ | |||
src/main.o | |||
# src/bridge.o | |||
# src/rtmidi.o |
@@ -0,0 +1,30 @@ | |||
# | |||
# Makefile for VCV rack lib + Microsoft Visual C++ 2003 / 2005 / 2008 / 2017 ToolKit | |||
# | |||
# | |||
NUM_JOBS=20 | |||
.PHONY: | |||
bin: vst | |||
.PHONY: | |||
lib: | |||
make -f makefile_lib.msvc bin -j $(NUM_JOBS) | |||
.PHONY: | |||
vst: lib | |||
make -f makefile_vst_instr.msvc bin -j $(NUM_JOBS) | |||
rm -f src/vst2_main.o | |||
make -f makefile_vst_effect.msvc bin -j $(NUM_JOBS) | |||
# (note) cannot use both instrument and effect plugin at the same time! | |||
mv veeseevstrack_instr.dll vst2_bin/veeseevstrack_instr.dll__ | |||
mv veeseevstrack_effect.dll vst2_bin/ | |||
@ls -l vst2_bin/veeseevstrack_instr.dll__ | |||
@ls -l vst2_bin/veeseevstrack_effect.dll | |||
clean: | |||
make -f makefile_lib.msvc clean | |||
make -f makefile_vst_instr.msvc clean | |||
make -f makefile_vst_effect.msvc clean | |||
@@ -0,0 +1,21 @@ | |||
# | |||
# Makefile for VCV rack lib + Microsoft Visual C++ 2003 / 2005 / 2008 ToolKit | |||
# | |||
# | |||
include dep/yac/install_msvc.mk | |||
TARGET_BASENAME=Rack | |||
EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_WIN -D_USE_MATH_DEFINES -DRACK_HOST -DUSE_VST2 -Iinclude/ -Idep/include | |||
EXTRALIBS= -LIBPATH:dep/lib/msvc/ jansson.lib | |||
# glew.lib glfw.lib gdi32.lib user32.lib kernel32.lib | |||
PLAF_OBJ= | |||
include make.objects | |||
ALL_OBJ=$(LIB_OBJ) | |||
include dep/yac/staticlib_msvc.mk |
@@ -0,0 +1,9 @@ | |||
PLUGIN_DIR=plugins/community/repos/ | |||
include dep/yac/install_msvc.mk | |||
TARGET_BASENAME=veeseevstrack_effect | |||
EXTRAFLAGS+= -DVST2_EFFECT | |||
include vst2_common.mk |
@@ -0,0 +1,8 @@ | |||
PLUGIN_DIR=plugins/community/repos/ | |||
include dep/yac/install_msvc.mk | |||
TARGET_BASENAME=veeseevstrack_instr | |||
include vst2_common.mk |
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 50.799999 128.4993" | |||
version="1.1" | |||
id="svg48736" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="AudioInterface.svg"> | |||
<defs | |||
id="defs48730" /> | |||
@@ -26,10 +26,10 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="250.93456" | |||
inkscape:cx="166.83936" | |||
inkscape:cy="222.506" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer6" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
@@ -37,8 +37,8 @@ | |||
fit-margin-bottom="0" | |||
inkscape:snap-bbox="true" | |||
inkscape:bbox-nodes="true" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1200" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
@@ -51,7 +51,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -106,26 +106,6 @@ | |||
id="path44512" | |||
d="m 363.97847,3.669412 c 0,-0.551215 -0.44924,-1.000451 -0.99908,-1.000451 h -19.28288 c -0.54984,0 -0.99908,0.449236 -0.99908,1.000451 V 15.84163 c 0,0.54983 0.44924,1.00045 0.99908,1.00045 h 19.28288 c 0.54984,0 0.99908,-0.45062 0.99908,-1.00045 z m 0,0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path44514" | |||
d="m 362.18564,39.60727 c -0.11713,0 -0.22462,-0.0661 -0.27698,-0.17088 l -1.00184,-2.00504 c -0.0758,-0.15297 -0.0152,-0.33762 0.13781,-0.41341 0.15158,-0.0772 0.33762,-0.0152 0.41341,0.1378 l 0.7276,1.45246 0.72623,-1.45246 c 0.0758,-0.15296 0.26045,-0.21497 0.41341,-0.1378 0.15296,0.0758 0.21359,0.26044 0.1378,0.41341 l -1.00183,2.00504 c -0.0524,0.10474 -0.15985,0.17088 -0.27561,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path44516" | |||
d="m 367.69091,39.60727 c -0.11714,0 -0.22325,-0.0661 -0.27561,-0.17088 l -1.00321,-2.00504 c -0.0758,-0.15297 -0.0138,-0.33762 0.13918,-0.41341 0.15158,-0.0772 0.33762,-0.0152 0.41341,0.1378 l 0.72623,1.45246 0.72622,-1.45246 c 0.0758,-0.15296 0.26183,-0.21497 0.41341,-0.1378 0.15297,0.0758 0.21498,0.26044 0.13781,0.41341 l -1.00184,2.00504 c -0.0524,0.10474 -0.15847,0.17088 -0.2756,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path44518" | |||
d="m 365.08779,39.60727 c -0.72347,0 -1.31051,-0.58842 -1.31051,-1.31189 0,-0.72209 0.58704,-1.31052 1.31051,-1.31052 0.28663,0 0.55811,0.091 0.78686,0.26183 0.13505,0.10335 0.16261,0.29628 0.0606,0.43271 -0.10197,0.13642 -0.2949,0.16398 -0.43132,0.0606 -0.12127,-0.0896 -0.26459,-0.13918 -0.41617,-0.13918 -0.3831,0 -0.69453,0.31282 -0.69453,0.69453 0,0.38309 0.31143,0.69453 0.69453,0.69453 0.15158,0 0.2949,-0.0482 0.41617,-0.13918 0.13642,-0.10198 0.32935,-0.0744 0.43132,0.062 0.10198,0.13643 0.0744,0.32935 -0.0606,0.43132 -0.22875,0.17226 -0.50023,0.26321 -0.78686,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path44520" | |||
d="m 365.50809,38.28022 c 0,0.22186 -0.17914,0.40101 -0.40101,0.40101 -0.22048,0 -0.39963,-0.17915 -0.39963,-0.40101 0,-0.22186 0.17915,-0.40101 0.39963,-0.40101 0.22187,0 0.40101,0.17915 0.40101,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 50.799999 128.4993" | |||
version="1.1" | |||
id="svg35238" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="MIDICCToCVInterface.svg"> | |||
<defs | |||
id="defs35232" /> | |||
@@ -26,7 +26,7 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="226.99608" | |||
inkscape:cx="142.90088" | |||
inkscape:cy="249.91512" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
@@ -37,11 +37,11 @@ | |||
fit-margin-bottom="0" | |||
inkscape:snap-bbox="true" | |||
inkscape:bbox-nodes="true" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" /> | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1137" | |||
inkscape:window-x="-8" | |||
inkscape:window-y="-8" | |||
inkscape:window-maximized="1" /> | |||
<metadata | |||
id="metadata35235"> | |||
<rdf:RDF> | |||
@@ -50,7 +50,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -69,26 +69,6 @@ | |||
id="path3833" | |||
d="m -14.665476,84.583683 h -50.8 V 213.08298 h 50.8 z M -14.852891,212.89557 H -65.278063 V 84.769721 h 50.425172 z m 0,0" | |||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path5999" | |||
d="m -42.818798,208.9406 c -0.115753,0 -0.223241,-0.0661 -0.275607,-0.17088 l -1.001833,-2.00504 c -0.07717,-0.15297 -0.01517,-0.33762 0.137802,-0.41341 0.151585,-0.0772 0.337623,-0.0152 0.413413,0.1378 l 0.726225,1.45246 0.727604,-1.45246 c 0.07579,-0.15296 0.260449,-0.21497 0.413414,-0.1378 0.151585,0.0758 0.213596,0.26044 0.137802,0.41341 l -1.001833,2.00504 c -0.05237,0.10474 -0.159854,0.17088 -0.276987,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6001" | |||
d="m -37.312156,208.9406 c -0.117133,0 -0.22462,-0.0661 -0.276987,-0.17088 l -1.001831,-2.00504 c -0.07579,-0.15297 -0.01378,-0.33762 0.1378,-0.41341 0.152966,-0.0772 0.337619,-0.0152 0.413414,0.1378 l 0.727604,1.45246 0.726226,-1.45246 c 0.07579,-0.15296 0.261826,-0.21497 0.413411,-0.1378 0.152961,0.0758 0.214974,0.26044 0.137803,0.41341 l -1.001831,2.00504 c -0.05237,0.10474 -0.159856,0.17088 -0.275609,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6003" | |||
d="m -39.915271,208.9406 c -0.72347,0 -1.311892,-0.58842 -1.311892,-1.31189 0,-0.72209 0.588422,-1.31052 1.311892,-1.31052 0.286632,0 0.558105,0.091 0.78686,0.26183 0.135048,0.10335 0.162609,0.29628 0.06064,0.43271 -0.101978,0.13642 -0.296281,0.16398 -0.431328,0.0606 -0.121267,-0.0896 -0.264583,-0.13918 -0.416168,-0.13918 -0.383095,0 -0.694531,0.31282 -0.694531,0.69453 0,0.38309 0.311436,0.69453 0.694531,0.69453 0.151585,0 0.294901,-0.0482 0.416168,-0.13918 0.135047,-0.10198 0.32935,-0.0744 0.431328,0.062 0.101973,0.13643 0.07441,0.32935 -0.06064,0.43132 -0.228755,0.17226 -0.500228,0.26321 -0.78686,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6005" | |||
d="m -39.494968,207.61355 c 0,0.22186 -0.179144,0.40101 -0.40101,0.40101 -0.221865,0 -0.401009,-0.17915 -0.401009,-0.40101 0,-0.22186 0.179144,-0.40101 0.401009,-0.40101 0.221866,0 0.40101,0.17915 0.40101,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 40.64109 128.4993" | |||
version="1.1" | |||
id="svg33989" | |||
inkscape:version="0.92.2 2405546, 2018-03-11" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="MIDIToCVInterface.svg"> | |||
<defs | |||
id="defs33983" /> | |||
@@ -26,7 +26,7 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="65.955205" | |||
inkscape:cx="-18.139994" | |||
inkscape:cy="239.87477" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
@@ -35,8 +35,8 @@ | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1200" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" /> | |||
@@ -48,7 +48,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -67,26 +67,6 @@ | |||
id="path22734" | |||
d="M 205.33989,31.856005 H 164.6988 V 160.3553 h 40.64109 z M 205.15246,160.16789 H 164.88619 V 32.042042 h 40.26627 z m 0,0" | |||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path22762" | |||
d="m 182.266,156.21292 c -0.11574,0 -0.22324,-0.0661 -0.27559,-0.17088 l -1.00185,-2.00504 c -0.0758,-0.15297 -0.0152,-0.33762 0.13783,-0.41341 0.15155,-0.0772 0.33761,-0.0152 0.41338,0.1378 l 0.72623,1.45246 0.72761,-1.45246 c 0.0758,-0.15296 0.26045,-0.21497 0.41342,-0.1378 0.15159,0.0758 0.2136,0.26044 0.13779,0.41341 l -1.00182,2.00504 c -0.0524,0.10474 -0.15984,0.17088 -0.277,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path22764" | |||
d="m 187.77265,156.21292 c -0.11712,0 -0.22461,-0.0661 -0.27559,-0.17088 l -1.00323,-2.00504 c -0.0758,-0.15297 -0.0138,-0.33762 0.1378,-0.41341 0.15296,-0.0772 0.33764,-0.0152 0.41479,0.1378 l 0.72623,1.45246 0.72623,-1.45246 c 0.0758,-0.15296 0.26183,-0.21497 0.41342,-0.1378 0.15296,0.0758 0.21495,0.26044 0.1378,0.41341 l -1.00182,2.00504 c -0.0524,0.10474 -0.15851,0.17088 -0.27563,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path22766" | |||
d="m 185.16954,156.21292 c -0.72348,0 -1.31191,-0.58842 -1.31191,-1.31189 0,-0.72209 0.58843,-1.31052 1.31191,-1.31052 0.28526,0 0.55809,0.091 0.78549,0.26183 0.13642,0.10335 0.16398,0.29628 0.062,0.43271 -0.10195,0.13642 -0.29488,0.16398 -0.4313,0.0606 -0.12129,-0.0896 -0.26458,-0.13918 -0.41617,-0.13918 -0.38308,0 -0.69455,0.31282 -0.69455,0.69453 0,0.38309 0.31147,0.69453 0.69455,0.69453 0.15159,0 0.29488,-0.0482 0.41617,-0.13918 0.13642,-0.10198 0.32935,-0.0744 0.4313,0.062 0.10199,0.13643 0.0744,0.32935 -0.062,0.43132 -0.2274,0.17226 -0.50023,0.26321 -0.78549,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path22768" | |||
d="m 185.58984,154.88587 c 0,0.22186 -0.17914,0.40101 -0.401,0.40101 -0.22187,0 -0.40101,-0.17915 -0.40101,-0.40101 0,-0.22186 0.17914,-0.40101 0.40101,-0.40101 0.22186,0 0.401,0.17915 0.401,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 50.800003 128.4993" | |||
version="1.1" | |||
id="svg17475" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="MIDITriggerToCVInterface.svg"> | |||
<defs | |||
id="defs17469" /> | |||
@@ -26,7 +26,7 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="219.75398" | |||
inkscape:cx="135.65878" | |||
inkscape:cy="223.67913" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
@@ -36,9 +36,9 @@ | |||
fit-margin-right="0" | |||
fit-margin-bottom="0" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-height="1200" | |||
inkscape:window-x="351" | |||
inkscape:window-y="11" | |||
inkscape:window-maximized="0" /> | |||
<metadata | |||
id="metadata17472"> | |||
@@ -48,7 +48,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -67,26 +67,6 @@ | |||
id="path6954" | |||
d="M 116.11429,40.738445 H 65.314286 V 169.23775 h 50.800004 z m -0.1874,128.311895 H 65.501717 V 40.924483 h 50.425173 z m 0,0" | |||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path10954" | |||
d="m 87.960961,165.09537 c -0.115747,0 -0.223238,-0.0661 -0.27559,-0.17088 l -1.001854,-2.00504 c -0.07578,-0.15297 -0.01517,-0.33762 0.13783,-0.41341 0.151554,-0.0772 0.337609,-0.0152 0.413385,0.1378 l 0.726229,1.45246 0.727604,-1.45246 c 0.07581,-0.15296 0.260456,-0.21497 0.41342,-0.1378 0.151589,0.0758 0.213607,0.26044 0.137795,0.41341 l -1.001818,2.00504 c -0.05239,0.10474 -0.159844,0.17088 -0.277001,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path10956" | |||
d="m 93.467609,165.09537 c -0.117121,0 -0.224613,-0.0661 -0.27559,-0.17088 l -1.003229,-2.00504 c -0.07578,-0.15297 -0.01376,-0.33762 0.137795,-0.41341 0.152964,-0.0772 0.337643,-0.0152 0.414796,0.1378 l 0.726228,1.45246 0.726228,-1.45246 c 0.07578,-0.15296 0.261832,-0.21497 0.413422,-0.1378 0.152964,0.0758 0.214948,0.26044 0.137795,0.41341 l -1.001818,2.00504 c -0.05239,0.10474 -0.158504,0.17088 -0.275627,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path10958" | |||
d="m 90.864498,165.09537 c -0.723477,0 -1.31191,-0.58842 -1.31191,-1.31189 0,-0.72209 0.588433,-1.31052 1.31191,-1.31052 0.285256,0 0.558095,0.091 0.785495,0.26183 0.136419,0.10335 0.16397,0.29628 0.06198,0.43271 -0.101953,0.13642 -0.294887,0.16398 -0.431306,0.0606 -0.121285,-0.0896 -0.264583,-0.13918 -0.416172,-0.13918 -0.383081,0 -0.694549,0.31282 -0.694549,0.69453 0,0.38309 0.311468,0.69453 0.694549,0.69453 0.151589,0 0.294887,-0.0482 0.416172,-0.13918 0.136419,-0.10198 0.329353,-0.0744 0.431306,0.062 0.101987,0.13643 0.07444,0.32935 -0.06198,0.43132 -0.2274,0.17226 -0.500239,0.26321 -0.785495,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path10960" | |||
d="m 91.284798,163.76832 c 0,0.22186 -0.179141,0.40101 -0.401003,0.40101 -0.221862,0 -0.401002,-0.17915 -0.401002,-0.40101 0,-0.22186 0.17914,-0.40101 0.401002,-0.40101 0.221862,0 0.401003,0.17915 0.401003,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 81.279434 128.4993" | |||
version="1.1" | |||
id="svg30767" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="Notes.svg"> | |||
<defs | |||
id="defs30761" /> | |||
@@ -26,7 +26,7 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="163.70046" | |||
inkscape:cx="79.605261" | |||
inkscape:cy="242.83332" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
@@ -35,11 +35,11 @@ | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1137" | |||
inkscape:window-x="-8" | |||
inkscape:window-y="-8" | |||
inkscape:window-maximized="1" | |||
inkscape:snap-bbox="true" | |||
inkscape:bbox-nodes="true" /> | |||
<metadata | |||
@@ -50,7 +50,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -70,26 +70,6 @@ | |||
id="path3837" | |||
d="M 111.83658,52.92097 H 30.557143 v 128.4993 h 81.279437 z m -0.18739,128.31189 H 30.74318 V 53.107008 h 80.90601 z m 0,0" | |||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6935" | |||
d="m 68.44354,177.27789 c -0.117124,0 -0.22324,-0.0661 -0.27559,-0.17088 l -1.001856,-2.00504 c -0.07715,-0.15297 -0.01516,-0.33762 0.137832,-0.41341 0.151554,-0.0772 0.337609,-0.0152 0.413385,0.1378 l 0.726229,1.45246 0.727604,-1.45246 c 0.07581,-0.15296 0.260456,-0.21497 0.413419,-0.1378 0.151588,0.0758 0.213606,0.26044 0.137795,0.41341 l -1.003194,2.00504 c -0.05239,0.10474 -0.158467,0.17088 -0.275624,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6937" | |||
d="m 73.948812,177.27789 c -0.115747,0 -0.223237,-0.0661 -0.275624,-0.17088 l -1.001818,-2.00504 c -0.07578,-0.15297 -0.01516,-0.33762 0.137795,-0.41341 0.151587,-0.0772 0.337642,-0.0152 0.413419,0.1378 l 0.726228,1.45246 0.727604,-1.45246 c 0.07578,-0.15296 0.260456,-0.21497 0.41342,-0.1378 0.152966,0.0758 0.213572,0.26044 0.137795,0.41341 l -1.001818,2.00504 c -0.05239,0.10474 -0.159878,0.17088 -0.277001,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6939" | |||
d="m 71.345701,177.27789 c -0.722101,0 -1.310534,-0.58842 -1.310534,-1.31189 0,-0.72209 0.588433,-1.31052 1.310534,-1.31052 0.286631,0 0.55947,0.091 0.786871,0.26183 0.136419,0.10335 0.16397,0.29628 0.06198,0.43271 -0.101952,0.13642 -0.296262,0.16398 -0.432681,0.0606 -0.119909,-0.0896 -0.264583,-0.13918 -0.416171,-0.13918 -0.381706,0 -0.693174,0.31282 -0.693174,0.69453 0,0.38309 0.311468,0.69453 0.693174,0.69453 0.151588,0 0.296262,-0.0482 0.416171,-0.13918 0.136419,-0.10198 0.330729,-0.0744 0.432681,0.062 0.101989,0.13643 0.07444,0.32935 -0.06198,0.43132 -0.227401,0.17226 -0.50024,0.26321 -0.786871,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path6941" | |||
d="m 71.767376,175.95084 c 0,0.22186 -0.179142,0.40101 -0.401003,0.40101 -0.221861,0 -0.401002,-0.17915 -0.401002,-0.40101 0,-0.22186 0.179141,-0.40101 0.401002,-0.40101 0.221861,0 0.401003,0.17915 0.401003,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -14,7 +14,7 @@ | |||
viewBox="0 0 50.799999 128.4993" | |||
version="1.1" | |||
id="svg11827" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)" | |||
sodipodi:docname="QuadMIDIToCVInterface.svg"> | |||
<defs | |||
id="defs11821" /> | |||
@@ -29,7 +29,7 @@ | |||
inkscape:cx="182.22871" | |||
inkscape:cy="273.03255" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer2" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
@@ -37,11 +37,11 @@ | |||
fit-margin-bottom="0" | |||
inkscape:snap-bbox="true" | |||
inkscape:bbox-nodes="true" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1200" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" /> | |||
inkscape:window-maximized="1" /> | |||
<metadata | |||
id="metadata11824"> | |||
<rdf:RDF> | |||
@@ -50,7 +50,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -74,26 +74,6 @@ | |||
id="path4075" | |||
d="m 121.2713,60.304029 c 0,-0.549839 -0.45062,-0.99908 -1.00046,-0.99908 H 77.78868 c -0.549836,0 -0.999077,0.449241 -0.999077,0.99908 v 12.172209 c 0,0.551215 0.449241,1.000456 0.999077,1.000456 h 42.48216 c 0.54984,0 1.00046,-0.449241 1.00046,-1.000456 z m 0,0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path4079" | |||
d="m 96.27782,128.24269 c -0.117133,0 -0.224621,-0.0661 -0.276987,-0.17088 L 94.999,126.06677 c -0.07579,-0.15297 -0.01379,-0.33762 0.137802,-0.41341 0.152965,-0.0772 0.337619,-0.0152 0.413413,0.1378 l 0.727605,1.45246 0.726224,-1.45246 c 0.07579,-0.15296 0.261828,-0.21497 0.413414,-0.1378 0.15296,0.0758 0.213596,0.26044 0.137802,0.41341 l -1.001833,2.00504 c -0.05237,0.10474 -0.159854,0.17088 -0.275607,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path4081" | |||
d="m 101.78308,128.24269 c -0.11713,0 -0.22324,-0.0661 -0.27561,-0.17088 l -1.00321,-2.00504 c -0.0758,-0.15297 -0.0138,-0.33762 0.13919,-0.41341 0.15158,-0.0772 0.33761,-0.0152 0.4134,0.1378 l 0.72623,1.45246 0.72623,-1.45246 c 0.0758,-0.15296 0.26182,-0.21497 0.41341,-0.1378 0.15296,0.0758 0.21497,0.26044 0.1378,0.41341 l -1.00183,2.00504 c -0.0524,0.10474 -0.15847,0.17088 -0.27561,0.17088" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path4083" | |||
d="m 99.179967,128.24269 c -0.72347,0 -1.310513,-0.58842 -1.310513,-1.31189 0,-0.72209 0.587043,-1.31052 1.310513,-1.31052 0.286632,0 0.558105,0.091 0.78686,0.26183 0.136423,0.10335 0.162613,0.29628 0.06063,0.43271 -0.101989,0.13642 -0.294912,0.16398 -0.431339,0.0606 -0.121267,-0.0896 -0.264583,-0.13918 -0.416168,-0.13918 -0.383095,0 -0.694531,0.31282 -0.694531,0.69453 0,0.38309 0.311436,0.69453 0.694531,0.69453 0.151585,0 0.294901,-0.0482 0.416168,-0.13918 0.136427,-0.10198 0.32935,-0.0744 0.431339,0.062 0.10197,0.13643 0.0758,0.32935 -0.06063,0.43132 -0.228755,0.17226 -0.500228,0.26321 -0.78686,0.26321" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path4085" | |||
d="m 99.60027,126.91564 c 0,0.22186 -0.179147,0.40101 -0.40101,0.40101 -0.220486,0 -0.39963,-0.17915 -0.39963,-0.40101 0,-0.22186 0.179144,-0.40101 0.39963,-0.40101 0.221863,0 0.40101,0.17915 0.40101,0.40101" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||
@@ -1,3 +1,4 @@ | |||
#include "global_pre.hpp" | |||
#include <assert.h> | |||
#include <mutex> | |||
#include <chrono> | |||
@@ -8,6 +9,7 @@ | |||
#include "audio.hpp" | |||
#include "dsp/samplerate.hpp" | |||
#include "dsp/ringbuffer.hpp" | |||
#include "global.hpp" | |||
#define AUDIO_OUTPUTS 8 | |||
@@ -112,12 +114,14 @@ struct AudioInterface : Module { | |||
int lastNumOutputs = -1; | |||
int lastNumInputs = -1; | |||
#ifndef USE_VST2 | |||
SampleRateConverter<AUDIO_INPUTS> inputSrc; | |||
SampleRateConverter<AUDIO_OUTPUTS> outputSrc; | |||
// in rack's sample rate | |||
DoubleRingBuffer<Frame<AUDIO_INPUTS>, 16> inputBuffer; | |||
DoubleRingBuffer<Frame<AUDIO_OUTPUTS>, 16> outputBuffer; | |||
#endif // USE_VST2 | |||
AudioInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||
onSampleRateChange(); | |||
@@ -143,6 +147,7 @@ struct AudioInterface : Module { | |||
void AudioInterface::step() { | |||
#ifndef USE_VST2 | |||
// Update SRC states | |||
int sampleRate = (int) engineGetSampleRate(); | |||
inputSrc.setRates(audioIO.sampleRate, sampleRate); | |||
@@ -229,6 +234,17 @@ void AudioInterface::step() { | |||
audioIO.audioCv.notify_one(); | |||
} | |||
#else | |||
// Outputs: rack engine -> VST out | |||
for(int i = 0; i < AUDIO_INPUTS; i++) { | |||
outputs[AUDIO_OUTPUT + i].value = global->vst2.inputs[i][global->vst2.frame_idx]; | |||
} | |||
for(int i = 0; i < AUDIO_OUTPUTS; i++) { | |||
global->vst2.outputs[i][global->vst2.frame_idx] += inputs[AUDIO_INPUT + i].value; | |||
} | |||
#endif // USE_VST2 | |||
// Turn on light if at least one port is enabled in the nearby pair | |||
for (int i = 0; i < AUDIO_INPUTS / 2; i++) | |||
lights[INPUT_LIGHT + i].value = (audioIO.active && audioIO.numOutputs >= 2*i+1); | |||
@@ -281,4 +297,7 @@ struct AudioInterfaceWidget : ModuleWidget { | |||
}; | |||
Model *modelAudioInterface = Model::create<AudioInterface, AudioInterfaceWidget>("Core", "AudioInterface", "Audio", EXTERNAL_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, AudioInterface) { | |||
Model *modelAudioInterface = Model::create<AudioInterface, AudioInterfaceWidget>("Core", "AudioInterface", "Audio", EXTERNAL_TAG); | |||
return modelAudioInterface; | |||
} |
@@ -1,4 +1,6 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "global_ui.hpp" | |||
using namespace rack; | |||
@@ -17,14 +19,14 @@ struct ModuleResizeHandle : Widget { | |||
} | |||
} | |||
void onDragStart(EventDragStart &e) override { | |||
dragX = gRackWidget->lastMousePos.x; | |||
dragX = global_ui->app.gRackWidget->lastMousePos.x; | |||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | |||
originalBox = m->box; | |||
} | |||
void onDragMove(EventDragMove &e) override { | |||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | |||
float newDragX = gRackWidget->lastMousePos.x; | |||
float newDragX = global_ui->app.gRackWidget->lastMousePos.x; | |||
float deltaX = newDragX - dragX; | |||
Rect newBox = originalBox; | |||
@@ -40,7 +42,7 @@ struct ModuleResizeHandle : Widget { | |||
newBox.size.x = roundf(newBox.size.x / RACK_GRID_WIDTH) * RACK_GRID_WIDTH; | |||
newBox.pos.x = originalBox.pos.x + originalBox.size.x - newBox.size.x; | |||
} | |||
gRackWidget->requestModuleBox(m, newBox); | |||
global_ui->app.gRackWidget->requestModuleBox(m, newBox); | |||
} | |||
void draw(NVGcontext *vg) override { | |||
for (float x = 5.0; x <= 10.0; x += 5.0) { | |||
@@ -120,4 +122,8 @@ struct BlankWidget : ModuleWidget { | |||
}; | |||
Model *modelBlank = Model::create<Module, BlankWidget>("Core", "Blank", "Blank", BLANK_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, Blank) { | |||
Model *modelBlank = Model::create<Module, BlankWidget>("Core", "Blank", "Blank", BLANK_TAG); | |||
return modelBlank; | |||
} | |||
@@ -1,15 +1,25 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "global.hpp" | |||
RACK_PLUGIN_MODEL_DECLARE(Core, AudioInterface); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, MIDIToCVInterface); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, QuadMIDIToCVInterface); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, MIDICCToCVInterface); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, MIDITriggerToCVInterface); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, Blank); | |||
RACK_PLUGIN_MODEL_DECLARE(Core, Notes); | |||
void init(rack::Plugin *p) { | |||
p->slug = "Core"; | |||
p->version = TOSTRING(VERSION); | |||
#undef SLUG | |||
#define SLUG Core | |||
RACK_PLUGIN_INIT(Core) { | |||
RACK_PLUGIN_INIT_ID_INTERNAL; | |||
p->addModel(modelAudioInterface); | |||
p->addModel(modelMIDIToCVInterface); | |||
p->addModel(modelQuadMIDIToCVInterface); | |||
p->addModel(modelMIDICCToCVInterface); | |||
p->addModel(modelMIDITriggerToCVInterface); | |||
p->addModel(modelBlank); | |||
p->addModel(modelNotes); | |||
RACK_PLUGIN_MODEL_ADD(Core, AudioInterface); | |||
RACK_PLUGIN_MODEL_ADD(Core, MIDIToCVInterface); | |||
RACK_PLUGIN_MODEL_ADD(Core, QuadMIDIToCVInterface); | |||
RACK_PLUGIN_MODEL_ADD(Core, MIDICCToCVInterface); | |||
RACK_PLUGIN_MODEL_ADD(Core, MIDITriggerToCVInterface); | |||
RACK_PLUGIN_MODEL_ADD(Core, Blank); | |||
RACK_PLUGIN_MODEL_ADD(Core, Notes); | |||
} |
@@ -3,16 +3,7 @@ | |||
using namespace rack; | |||
extern Model *modelAudioInterface; | |||
extern Model *modelMIDIToCVInterface; | |||
extern Model *modelQuadMIDIToCVInterface; | |||
extern Model *modelMIDICCToCVInterface; | |||
extern Model *modelMIDITriggerToCVInterface; | |||
extern Model *modelBlank; | |||
extern Model *modelNotes; | |||
RACK_PLUGIN_INIT(Core); | |||
struct GridChoice : LedDisplayChoice { | |||
virtual void setId(int id) {} | |||
@@ -61,4 +52,4 @@ struct Grid16MidiWidget : MidiWidget { | |||
} | |||
} | |||
virtual GridChoice *createGridChoice() {return NULL;} | |||
}; | |||
}; |
@@ -1,7 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "midi.hpp" | |||
#include "dsp/filter.hpp" | |||
#include "window.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
struct MIDICCToCVInterface : Module { | |||
@@ -129,8 +132,8 @@ struct MidiCcChoice : GridChoice { | |||
else { | |||
text = stringf("%d", module->learnedCcs[id]); | |||
color.a = 1.0; | |||
if (gFocusedWidget == this) | |||
gFocusedWidget = NULL; | |||
if (global_ui->widgets.gFocusedWidget == this) | |||
global_ui->widgets.gFocusedWidget = NULL; | |||
} | |||
} | |||
@@ -158,11 +161,11 @@ struct MidiCcChoice : GridChoice { | |||
} | |||
void onKey(EventKey &e) override { | |||
if (gFocusedWidget == this) { | |||
if (global_ui->widgets.gFocusedWidget == this) { | |||
if (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER) { | |||
EventDefocus eDefocus; | |||
onDefocus(eDefocus); | |||
gFocusedWidget = NULL; | |||
global_ui->widgets.gFocusedWidget = NULL; | |||
e.consumed = true; | |||
} | |||
} | |||
@@ -215,5 +218,7 @@ struct MIDICCToCVInterfaceWidget : ModuleWidget { | |||
} | |||
}; | |||
Model *modelMIDICCToCVInterface = Model::create<MIDICCToCVInterface, MIDICCToCVInterfaceWidget>("Core", "MIDICCToCVInterface", "MIDI-CC", MIDI_TAG, EXTERNAL_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, MIDICCToCVInterface) { | |||
Model *modelMIDICCToCVInterface = Model::create<MIDICCToCVInterface, MIDICCToCVInterfaceWidget>("Core", "MIDICCToCVInterface", "MIDI-CC", MIDI_TAG, EXTERNAL_TAG); | |||
return modelMIDICCToCVInterface; | |||
} |
@@ -1,9 +1,11 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "midi.hpp" | |||
#include "dsp/digital.hpp" | |||
#include "dsp/filter.hpp" | |||
#include <algorithm> | |||
#include "global.hpp" | |||
struct MIDIToCVInterface : Module { | |||
@@ -326,4 +328,7 @@ struct MIDIToCVInterfaceWidget : ModuleWidget { | |||
}; | |||
Model *modelMIDIToCVInterface = Model::create<MIDIToCVInterface, MIDIToCVInterfaceWidget>("Core", "MIDIToCVInterface", "MIDI-1", MIDI_TAG, EXTERNAL_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, MIDIToCVInterface) { | |||
Model *modelMIDIToCVInterface = Model::create<MIDIToCVInterface, MIDIToCVInterfaceWidget>("Core", "MIDIToCVInterface", "MIDI-1", MIDI_TAG, EXTERNAL_TAG); | |||
return modelMIDIToCVInterface; | |||
} |
@@ -1,5 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "midi.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
struct MIDITriggerToCVInterface : Module { | |||
@@ -171,8 +174,8 @@ struct MidiTrigChoice : GridChoice { | |||
text = stringf("%s%d", noteNames[semi], oct); | |||
color.a = 1.0; | |||
if (gFocusedWidget == this) | |||
gFocusedWidget = NULL; | |||
if (global_ui->widgets.gFocusedWidget == this) | |||
global_ui->widgets.gFocusedWidget = NULL; | |||
} | |||
} | |||
@@ -249,4 +252,7 @@ struct MIDITriggerToCVInterfaceWidget : ModuleWidget { | |||
}; | |||
Model *modelMIDITriggerToCVInterface = Model::create<MIDITriggerToCVInterface, MIDITriggerToCVInterfaceWidget>("Core", "MIDITriggerToCVInterface", "MIDI-Trig", MIDI_TAG, EXTERNAL_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, MIDITriggerToCVInterface) { | |||
Model *modelMIDITriggerToCVInterface = Model::create<MIDITriggerToCVInterface, MIDITriggerToCVInterfaceWidget>("Core", "MIDITriggerToCVInterface", "MIDI-Trig", MIDI_TAG, EXTERNAL_TAG); | |||
return modelMIDITriggerToCVInterface; | |||
} |
@@ -1,4 +1,6 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "global.hpp" | |||
using namespace rack; | |||
@@ -41,4 +43,7 @@ struct NotesWidget : ModuleWidget { | |||
}; | |||
Model *modelNotes = Model::create<Module, NotesWidget>("Core", "Notes", "Notes", BLANK_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, Notes) { | |||
Model *modelNotes = Model::create<Module, NotesWidget>("Core", "Notes", "Notes", BLANK_TAG); | |||
return modelNotes; | |||
} |
@@ -1,6 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "Core.hpp" | |||
#include "midi.hpp" | |||
#include "dsp/digital.hpp" | |||
#include "global.hpp" | |||
#include <algorithm> | |||
@@ -366,5 +368,7 @@ struct QuadMIDIToCVInterfaceWidget : ModuleWidget { | |||
}; | |||
Model *modelQuadMIDIToCVInterface = Model::create<QuadMIDIToCVInterface, QuadMIDIToCVInterfaceWidget>("Core", "QuadMIDIToCVInterface", "MIDI-4", MIDI_TAG, EXTERNAL_TAG, QUAD_TAG); | |||
RACK_PLUGIN_MODEL_INIT(Core, QuadMIDIToCVInterface) { | |||
Model *modelQuadMIDIToCVInterface = Model::create<QuadMIDIToCVInterface, QuadMIDIToCVInterfaceWidget>("Core", "QuadMIDIToCVInterface", "MIDI-4", MIDI_TAG, EXTERNAL_TAG, QUAD_TAG); | |||
return modelQuadMIDIToCVInterface; | |||
} |
@@ -1,5 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "audio.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -16,7 +19,7 @@ struct AudioDriverItem : MenuItem { | |||
struct AudioDriverChoice : LedDisplayChoice { | |||
AudioWidget *audioWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||
for (int driver : audioWidget->audioIO->getDrivers()) { | |||
AudioDriverItem *item = new AudioDriverItem(); | |||
@@ -48,7 +51,7 @@ struct AudioDeviceChoice : LedDisplayChoice { | |||
int maxTotalChannels = 128; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio device")); | |||
int deviceCount = audioWidget->audioIO->getDeviceCount(); | |||
{ | |||
@@ -73,6 +76,10 @@ struct AudioDeviceChoice : LedDisplayChoice { | |||
} | |||
} | |||
void step() override { | |||
#ifdef USE_VST2 | |||
text = "VST Audio I/O"; | |||
color.a = 1.f; | |||
#else | |||
text = audioWidget->audioIO->getDeviceDetail(audioWidget->audioIO->device, audioWidget->audioIO->offset); | |||
if (text.empty()) { | |||
text = "(No device)"; | |||
@@ -81,6 +88,7 @@ struct AudioDeviceChoice : LedDisplayChoice { | |||
else { | |||
color.a = 1.f; | |||
} | |||
#endif // USE_VST2 | |||
} | |||
}; | |||
@@ -96,7 +104,7 @@ struct AudioSampleRateItem : MenuItem { | |||
struct AudioSampleRateChoice : LedDisplayChoice { | |||
AudioWidget *audioWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Sample rate")); | |||
std::vector<int> sampleRates = audioWidget->audioIO->getSampleRates(); | |||
if (sampleRates.empty()) { | |||
@@ -112,7 +120,11 @@ struct AudioSampleRateChoice : LedDisplayChoice { | |||
} | |||
} | |||
void step() override { | |||
#ifdef USE_VST2 | |||
text = stringf("%g kHz", global->engine.sampleRate / 1000.f); | |||
#else | |||
text = stringf("%g kHz", audioWidget->audioIO->sampleRate / 1000.f); | |||
#endif | |||
} | |||
}; | |||
@@ -128,7 +140,7 @@ struct AudioBlockSizeItem : MenuItem { | |||
struct AudioBlockSizeChoice : LedDisplayChoice { | |||
AudioWidget *audioWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Block size")); | |||
std::vector<int> blockSizes = audioWidget->audioIO->getBlockSizes(); | |||
if (blockSizes.empty()) { | |||
@@ -145,7 +157,11 @@ struct AudioBlockSizeChoice : LedDisplayChoice { | |||
} | |||
} | |||
void step() override { | |||
#ifdef USE_VST2 | |||
text = stringf("%u", global->vst2.last_seen_num_frames); | |||
#else | |||
text = stringf("%d", audioWidget->audioIO->blockSize); | |||
#endif // USE_VST2 | |||
} | |||
}; | |||
@@ -12,7 +12,8 @@ static const float KNOB_SENSITIVITY = 0.0015f; | |||
Knob::Knob() { | |||
smooth = true; | |||
// smooth = true; | |||
smooth = false; // xxx | |||
} | |||
void Knob::onDragStart(EventDragStart &e) { | |||
@@ -1,6 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "asset.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -85,12 +87,12 @@ void LedDisplayTextField::draw(NVGcontext *vg) { | |||
NVGcolor highlightColor = color; | |||
highlightColor.a = 0.5; | |||
int begin = min(cursor, selection); | |||
int end = (this == gFocusedWidget) ? max(cursor, selection) : -1; | |||
int end = (this == global_ui->widgets.gFocusedWidget) ? max(cursor, selection) : -1; | |||
bndIconLabelCaret(vg, textOffset.x, textOffset.y, | |||
box.size.x - 2*textOffset.x, box.size.y - 2*textOffset.y, | |||
-1, color, 12, text.c_str(), highlightColor, begin, end); | |||
bndSetFont(gGuiFont->handle); | |||
bndSetFont(global_ui->window.gGuiFont->handle); | |||
} | |||
nvgResetScissor(vg); | |||
@@ -98,10 +100,10 @@ void LedDisplayTextField::draw(NVGcontext *vg) { | |||
int LedDisplayTextField::getTextPosition(Vec mousePos) { | |||
bndSetFont(font->handle); | |||
int textPos = bndIconLabelTextPosition(gVg, textOffset.x, textOffset.y, | |||
int textPos = bndIconLabelTextPosition(global_ui->window.gVg, textOffset.x, textOffset.y, | |||
box.size.x - 2*textOffset.x, box.size.y - 2*textOffset.y, | |||
-1, 12, text.c_str(), mousePos.x, mousePos.y); | |||
bndSetFont(gGuiFont->handle); | |||
bndSetFont(global_ui->window.gGuiFont->handle); | |||
return textPos; | |||
} | |||
@@ -1,5 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "midi.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -16,7 +19,7 @@ struct MidiDriverItem : MenuItem { | |||
struct MidiDriverChoice : LedDisplayChoice { | |||
MidiWidget *midiWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "MIDI driver")); | |||
for (int driverId : midiWidget->midiIO->getDriverIds()) { | |||
MidiDriverItem *item = new MidiDriverItem(); | |||
@@ -50,7 +53,7 @@ struct MidiDeviceItem : MenuItem { | |||
struct MidiDeviceChoice : LedDisplayChoice { | |||
MidiWidget *midiWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "MIDI device")); | |||
{ | |||
MidiDeviceItem *item = new MidiDeviceItem(); | |||
@@ -92,7 +95,7 @@ struct MidiChannelItem : MenuItem { | |||
struct MidiChannelChoice : LedDisplayChoice { | |||
MidiWidget *midiWidget; | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "MIDI channel")); | |||
for (int channel = -1; channel < 16; channel++) { | |||
MidiChannelItem *item = new MidiChannelItem(); | |||
@@ -1,8 +1,11 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "plugin.hpp" | |||
#include "window.hpp" | |||
#include <set> | |||
#include <algorithm> | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
static const float itemMargin = 2.0; | |||
@@ -11,12 +14,6 @@ static const float itemMargin = 2.0; | |||
namespace rack { | |||
static std::set<Model*> sFavoriteModels; | |||
static std::string sAuthorFilter; | |||
static ModelTag sTagFilter = NO_TAG; | |||
bool isMatch(std::string s, std::string search) { | |||
s = stringLowercase(s); | |||
search = stringLowercase(search); | |||
@@ -92,7 +89,7 @@ struct BrowserListItem : OpaqueWidget { | |||
onAction(eAction); | |||
if (eAction.consumed) { | |||
// deletes `this` | |||
gScene->setOverlay(NULL); | |||
global_ui->ui.gScene->setOverlay(NULL); | |||
} | |||
} | |||
}; | |||
@@ -113,8 +110,8 @@ struct ModelItem : BrowserListItem { | |||
addChild(favoriteButton); | |||
// Set favorite button initial state | |||
auto it = sFavoriteModels.find(model); | |||
if (it != sFavoriteModels.end()) | |||
auto it = global_ui->module_browser.sFavoriteModels.find(model); | |||
if (it != global_ui->module_browser.sFavoriteModels.end()) | |||
favoriteButton->setValue(1); | |||
favoriteButton->model = model; | |||
@@ -139,10 +136,10 @@ struct ModelItem : BrowserListItem { | |||
ModuleWidget *moduleWidget = model->createModuleWidget(); | |||
if (!moduleWidget) | |||
return; | |||
gRackWidget->addModule(moduleWidget); | |||
global_ui->app.gRackWidget->addModule(moduleWidget); | |||
// Move module nearest to the mouse position | |||
moduleWidget->box.pos = gRackWidget->lastMousePos.minus(moduleWidget->box.size.div(2)); | |||
gRackWidget->requestModuleBoxNearest(moduleWidget, moduleWidget->box); | |||
moduleWidget->box.pos = global_ui->app.gRackWidget->lastMousePos.minus(moduleWidget->box.size.div(2)); | |||
global_ui->app.gRackWidget->requestModuleBoxNearest(moduleWidget, moduleWidget->box); | |||
} | |||
}; | |||
@@ -284,8 +281,8 @@ struct ModuleBrowser : OpaqueWidget { | |||
ModuleBrowser() { | |||
box.size.x = 450; | |||
sAuthorFilter = ""; | |||
sTagFilter = NO_TAG; | |||
global_ui->module_browser.sAuthorFilter = ""; | |||
global_ui->module_browser.sTagFilter = NO_TAG; | |||
// Search | |||
searchField = new SearchModuleField(); | |||
@@ -304,7 +301,7 @@ struct ModuleBrowser : OpaqueWidget { | |||
addChild(moduleScroll); | |||
// Collect authors | |||
for (Plugin *plugin : gPlugins) { | |||
for (Plugin *plugin : global->plugin.gPlugins) { | |||
for (Model *model : plugin->models) { | |||
// Insert author | |||
if (!model->author.empty()) | |||
@@ -331,10 +328,10 @@ struct ModuleBrowser : OpaqueWidget { | |||
} | |||
bool isModelFiltered(Model *model) { | |||
if (!sAuthorFilter.empty() && model->author != sAuthorFilter) | |||
if (!global_ui->module_browser.sAuthorFilter.empty() && model->author != global_ui->module_browser.sAuthorFilter) | |||
return false; | |||
if (sTagFilter != NO_TAG) { | |||
auto it = std::find(model->tags.begin(), model->tags.end(), sTagFilter); | |||
if (global_ui->module_browser.sTagFilter != NO_TAG) { | |||
auto it = std::find(model->tags.begin(), model->tags.end(), global_ui->module_browser.sTagFilter); | |||
if (it == model->tags.end()) | |||
return false; | |||
} | |||
@@ -345,16 +342,16 @@ struct ModuleBrowser : OpaqueWidget { | |||
std::string search = searchField->text; | |||
moduleList->clearChildren(); | |||
moduleList->selected = 0; | |||
bool filterPage = !(sAuthorFilter.empty() && sTagFilter == NO_TAG); | |||
bool filterPage = !(global_ui->module_browser.sAuthorFilter.empty() && global_ui->module_browser.sTagFilter == NO_TAG); | |||
if (!filterPage) { | |||
// Favorites | |||
if (!sFavoriteModels.empty()) { | |||
if (!global_ui->module_browser.sFavoriteModels.empty()) { | |||
SeparatorItem *item = new SeparatorItem(); | |||
item->setText("Favorites"); | |||
moduleList->addChild(item); | |||
} | |||
for (Model *model : sFavoriteModels) { | |||
for (Model *model : global_ui->module_browser.sFavoriteModels) { | |||
if (isModelFiltered(model) && isModelMatch(model, search)) { | |||
ModelItem *item = new ModelItem(); | |||
item->setModel(model); | |||
@@ -402,14 +399,14 @@ struct ModuleBrowser : OpaqueWidget { | |||
} | |||
else if (filterPage) { | |||
SeparatorItem *item = new SeparatorItem(); | |||
if (!sAuthorFilter.empty()) | |||
item->setText(sAuthorFilter); | |||
else if (sTagFilter != NO_TAG) | |||
item->setText("Tag: " + gTagNames[sTagFilter]); | |||
if (!global_ui->module_browser.sAuthorFilter.empty()) | |||
item->setText(global_ui->module_browser.sAuthorFilter); | |||
else if (global_ui->module_browser.sTagFilter != NO_TAG) | |||
item->setText("Tag: " + gTagNames[global_ui->module_browser.sTagFilter]); | |||
moduleList->addChild(item); | |||
} | |||
// Modules | |||
for (Plugin *plugin : gPlugins) { | |||
for (Plugin *plugin : global->plugin.gPlugins) { | |||
for (Model *model : plugin->models) { | |||
if (isModelFiltered(model) && isModelMatch(model, search)) { | |||
ModelItem *item = new ModelItem(); | |||
@@ -428,7 +425,7 @@ struct ModuleBrowser : OpaqueWidget { | |||
moduleScroll->box.size.y = min(box.size.y - moduleScroll->box.pos.y, moduleList->box.size.y); | |||
box.size.y = min(box.size.y, moduleScroll->box.getBottomRight().y); | |||
gFocusedWidget = searchField; | |||
global_ui->widgets.gFocusedWidget = searchField; | |||
Widget::step(); | |||
} | |||
}; | |||
@@ -438,7 +435,7 @@ struct ModuleBrowser : OpaqueWidget { | |||
void AuthorItem::onAction(EventAction &e) { | |||
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); | |||
sAuthorFilter = author; | |||
global_ui->module_browser.sAuthorFilter = author; | |||
moduleBrowser->clearSearch(); | |||
moduleBrowser->refreshSearch(); | |||
e.consumed = false; | |||
@@ -446,7 +443,7 @@ void AuthorItem::onAction(EventAction &e) { | |||
void TagItem::onAction(EventAction &e) { | |||
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); | |||
sTagFilter = tag; | |||
global_ui->module_browser.sTagFilter = tag; | |||
moduleBrowser->clearSearch(); | |||
moduleBrowser->refreshSearch(); | |||
e.consumed = false; | |||
@@ -454,8 +451,8 @@ void TagItem::onAction(EventAction &e) { | |||
void ClearFilterItem::onAction(EventAction &e) { | |||
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); | |||
sAuthorFilter = ""; | |||
sTagFilter = NO_TAG; | |||
global_ui->module_browser.sAuthorFilter = ""; | |||
global_ui->module_browser.sTagFilter = NO_TAG; | |||
moduleBrowser->refreshSearch(); | |||
e.consumed = false; | |||
} | |||
@@ -464,12 +461,12 @@ void FavoriteRadioButton::onAction(EventAction &e) { | |||
if (!model) | |||
return; | |||
if (value) { | |||
sFavoriteModels.insert(model); | |||
global_ui->module_browser.sFavoriteModels.insert(model); | |||
} | |||
else { | |||
auto it = sFavoriteModels.find(model); | |||
if (it != sFavoriteModels.end()) | |||
sFavoriteModels.erase(it); | |||
auto it = global_ui->module_browser.sFavoriteModels.find(model); | |||
if (it != global_ui->module_browser.sFavoriteModels.end()) | |||
global_ui->module_browser.sFavoriteModels.erase(it); | |||
} | |||
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); | |||
@@ -491,7 +488,7 @@ void SearchModuleField::onTextChange() { | |||
void SearchModuleField::onKey(EventKey &e) { | |||
switch (e.key) { | |||
case GLFW_KEY_ESCAPE: { | |||
gScene->setOverlay(NULL); | |||
global_ui->ui.gScene->setOverlay(NULL); | |||
e.consumed = true; | |||
return; | |||
} break; | |||
@@ -538,14 +535,14 @@ void appModuleBrowserCreate() { | |||
ModuleBrowser *moduleBrowser = new ModuleBrowser(); | |||
overlay->addChild(moduleBrowser); | |||
gScene->setOverlay(overlay); | |||
global_ui->ui.gScene->setOverlay(overlay); | |||
} | |||
json_t *appModuleBrowserToJson() { | |||
json_t *rootJ = json_object(); | |||
json_t *favoritesJ = json_array(); | |||
for (Model *model : sFavoriteModels) { | |||
for (Model *model : global_ui->module_browser.sFavoriteModels) { | |||
json_t *modelJ = json_object(); | |||
json_object_set_new(modelJ, "plugin", json_string(model->plugin->slug.c_str())); | |||
json_object_set_new(modelJ, "model", json_string(model->slug.c_str())); | |||
@@ -571,7 +568,7 @@ void appModuleBrowserFromJson(json_t *rootJ) { | |||
Model *model = pluginGetModel(pluginSlug, modelSlug); | |||
if (!model) | |||
continue; | |||
sFavoriteModels.insert(model); | |||
global_ui->module_browser.sFavoriteModels.insert(model); | |||
} | |||
} | |||
} | |||
@@ -1,9 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "engine.hpp" | |||
#include "plugin.hpp" | |||
#include "window.hpp" | |||
#include "asset.hpp" | |||
#include "osdialog.h" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -68,8 +69,18 @@ json_t *ModuleWidget::toJson() { | |||
// version (of plugin) | |||
if (!model->plugin->version.empty()) | |||
json_object_set_new(rootJ, "version", json_string(model->plugin->version.c_str())); | |||
#ifdef USE_VST2 | |||
json_t *vst2_unique_param_base_idJ = json_integer(module->vst2_unique_param_base_id); | |||
json_object_set_new(rootJ, "vst2_unique_param_base_id", vst2_unique_param_base_idJ); | |||
#endif // USE_VST2 | |||
// model | |||
json_object_set_new(rootJ, "model", json_string(model->slug.c_str())); | |||
// pos | |||
Vec pos = box.pos.div(RACK_GRID_SIZE).round(); | |||
json_t *posJ = json_pack("[i, i]", (int) pos.x, (int) pos.y); | |||
json_object_set_new(rootJ, "pos", posJ); | |||
// params | |||
json_t *paramsJ = json_array(); | |||
for (ParamWidget *paramWidget : params) { | |||
@@ -89,42 +100,36 @@ json_t *ModuleWidget::toJson() { | |||
} | |||
void ModuleWidget::fromJson(json_t *rootJ) { | |||
// Check if plugin and model are incorrect | |||
json_t *pluginJ = json_object_get(rootJ, "plugin"); | |||
std::string pluginSlug; | |||
if (pluginJ) { | |||
pluginSlug = json_string_value(pluginJ); | |||
if (pluginSlug != model->plugin->slug) { | |||
warn("Plugin %s does not match ModuleWidget's plugin %s.", pluginSlug.c_str(), model->plugin->slug.c_str()); | |||
return; | |||
} | |||
} | |||
json_t *modelJ = json_object_get(rootJ, "model"); | |||
std::string modelSlug; | |||
if (modelJ) { | |||
modelSlug = json_string_value(modelJ); | |||
if (modelSlug != model->slug) { | |||
warn("Model %s does not match ModuleWidget's model %s.", modelSlug.c_str(), model->slug.c_str()); | |||
return; | |||
} | |||
} | |||
// Check plugin version | |||
json_t *versionJ = json_object_get(rootJ, "version"); | |||
if (versionJ) { | |||
std::string version = json_string_value(versionJ); | |||
if (version != model->plugin->version) { | |||
info("Patch created with %s version %s, using version %s.", pluginSlug.c_str(), version.c_str(), model->plugin->version.c_str()); | |||
} | |||
} | |||
// legacy | |||
int legacy = 0; | |||
json_t *legacyJ = json_object_get(rootJ, "legacy"); | |||
if (legacyJ) | |||
legacy = json_integer_value(legacyJ); | |||
#ifdef USE_VST2 | |||
if(NULL != module) { | |||
json_t *vst2_unique_param_base_idJ = json_object_get(rootJ, "vst2_unique_param_base_id"); | |||
if (vst2_unique_param_base_idJ) { | |||
module->vst2_unique_param_base_id = json_integer_value(vst2_unique_param_base_idJ); | |||
if((module->vst2_unique_param_base_id + module->params.size()) > global->vst2.next_unique_param_base_id) { | |||
global->vst2.next_unique_param_base_id = (module->vst2_unique_param_base_id + module->params.size()); | |||
} | |||
} | |||
} | |||
#endif // USE_VST2 | |||
// pos | |||
json_t *posJ = json_object_get(rootJ, "pos"); | |||
double x, y; | |||
json_unpack(posJ, "[F, F]", &x, &y); | |||
Vec pos = Vec(x, y); | |||
if (legacy && legacy <= 1) { | |||
box.pos = pos; | |||
} | |||
else { | |||
box.pos = pos.mult(RACK_GRID_SIZE); | |||
} | |||
// params | |||
json_t *paramsJ = json_object_get(rootJ, "params"); | |||
size_t i; | |||
@@ -162,108 +167,12 @@ void ModuleWidget::fromJson(json_t *rootJ) { | |||
} | |||
} | |||
void ModuleWidget::copyClipboard() { | |||
json_t *moduleJ = toJson(); | |||
char *moduleJson = json_dumps(moduleJ, JSON_INDENT(2) | JSON_REAL_PRECISION(9)); | |||
glfwSetClipboardString(gWindow, moduleJson); | |||
free(moduleJson); | |||
json_decref(moduleJ); | |||
} | |||
void ModuleWidget::pasteClipboard() { | |||
const char *moduleJson = glfwGetClipboardString(gWindow); | |||
if (!moduleJson) { | |||
warn("Could not get text from clipboard."); | |||
return; | |||
} | |||
json_error_t error; | |||
json_t *moduleJ = json_loads(moduleJson, 0, &error); | |||
if (moduleJ) { | |||
fromJson(moduleJ); | |||
json_decref(moduleJ); | |||
} | |||
else { | |||
warn("JSON parsing error at %s %d:%d %s", error.source, error.line, error.column, error.text); | |||
} | |||
} | |||
void ModuleWidget::load(std::string filename) { | |||
info("Loading preset %s", filename.c_str()); | |||
FILE *file = fopen(filename.c_str(), "r"); | |||
if (!file) { | |||
// Exit silently | |||
return; | |||
} | |||
json_error_t error; | |||
json_t *moduleJ = json_loadf(file, 0, &error); | |||
if (moduleJ) { | |||
fromJson(moduleJ); | |||
json_decref(moduleJ); | |||
} | |||
else { | |||
std::string message = stringf("JSON parsing error at %s %d:%d %s", error.source, error.line, error.column, error.text); | |||
osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str()); | |||
} | |||
fclose(file); | |||
} | |||
void ModuleWidget::save(std::string filename) { | |||
info("Saving preset %s", filename.c_str()); | |||
json_t *moduleJ = toJson(); | |||
if (!moduleJ) | |||
return; | |||
FILE *file = fopen(filename.c_str(), "w"); | |||
if (file) { | |||
json_dumpf(moduleJ, file, JSON_INDENT(2) | JSON_REAL_PRECISION(9)); | |||
fclose(file); | |||
} | |||
json_decref(moduleJ); | |||
} | |||
void ModuleWidget::loadDialog() { | |||
std::string dir = assetLocal("presets"); | |||
systemCreateDirectory(dir); | |||
osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | |||
char *path = osdialog_file(OSDIALOG_OPEN, dir.c_str(), NULL, filters); | |||
if (path) { | |||
load(path); | |||
free(path); | |||
} | |||
osdialog_filters_free(filters); | |||
} | |||
void ModuleWidget::saveDialog() { | |||
std::string dir = assetLocal("presets"); | |||
systemCreateDirectory(dir); | |||
osdialog_filters *filters = osdialog_filters_parse(PRESET_FILTERS.c_str()); | |||
char *path = osdialog_file(OSDIALOG_SAVE, dir.c_str(), "Untitled.vcvm", filters); | |||
if (path) { | |||
std::string pathStr = path; | |||
free(path); | |||
std::string extension = stringExtension(pathStr); | |||
if (extension.empty()) { | |||
pathStr += ".vcvm"; | |||
} | |||
save(pathStr); | |||
} | |||
osdialog_filters_free(filters); | |||
} | |||
void ModuleWidget::disconnect() { | |||
for (Port *input : inputs) { | |||
gRackWidget->wireContainer->removeAllWires(input); | |||
global_ui->app.gRackWidget->wireContainer->removeAllWires(input); | |||
} | |||
for (Port *output : outputs) { | |||
gRackWidget->wireContainer->removeAllWires(output); | |||
global_ui->app.gRackWidget->wireContainer->removeAllWires(output); | |||
} | |||
} | |||
@@ -278,7 +187,7 @@ void ModuleWidget::reset() { | |||
param->reset(); | |||
} | |||
if (module) { | |||
engineResetModule(module); | |||
module->onReset(); | |||
} | |||
} | |||
@@ -287,7 +196,7 @@ void ModuleWidget::randomize() { | |||
param->randomize(); | |||
} | |||
if (module) { | |||
engineRandomizeModule(module); | |||
module->onRandomize(); | |||
} | |||
} | |||
@@ -296,7 +205,7 @@ void ModuleWidget::draw(NVGcontext *vg) { | |||
Widget::draw(vg); | |||
// CPU meter | |||
if (module && gPowerMeter) { | |||
if (module && global->gPowerMeter) { | |||
nvgBeginPath(vg); | |||
nvgRect(vg, | |||
0, box.size.y - 20, | |||
@@ -305,7 +214,7 @@ void ModuleWidget::draw(NVGcontext *vg) { | |||
nvgFill(vg); | |||
std::string cpuText = stringf("%.0f mS", module->cpuTime * 1000.f); | |||
nvgFontFaceId(vg, gGuiFont->handle); | |||
nvgFontFaceId(vg, global_ui->window.gGuiFont->handle); | |||
nvgFontSize(vg, 12); | |||
nvgFillColor(vg, nvgRGBf(1, 1, 1)); | |||
nvgText(vg, 10.0, box.size.y - 6.0, cpuText.c_str(), NULL); | |||
@@ -350,11 +259,11 @@ void ModuleWidget::onMouseMove(EventMouseMove &e) { | |||
OpaqueWidget::onMouseMove(e); | |||
// Don't delete the ModuleWidget if a TextField is focused | |||
if (!gFocusedWidget) { | |||
if (!global_ui->widgets.gFocusedWidget) { | |||
// Instead of checking key-down events, delete the module even if key-repeat hasn't fired yet and the cursor is hovering over the widget. | |||
if (glfwGetKey(gWindow, GLFW_KEY_DELETE) == GLFW_PRESS || glfwGetKey(gWindow, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_DELETE) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { | |||
if (!windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->deleteModule(this); | |||
global_ui->app.gRackWidget->deleteModule(this); | |||
this->finalizeEvents(); | |||
delete this; | |||
e.consumed = true; | |||
@@ -380,23 +289,9 @@ void ModuleWidget::onHoverKey(EventHoverKey &e) { | |||
return; | |||
} | |||
} break; | |||
case GLFW_KEY_C: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
copyClipboard(); | |||
e.consumed = true; | |||
return; | |||
} | |||
} break; | |||
case GLFW_KEY_V: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
pasteClipboard(); | |||
e.consumed = true; | |||
return; | |||
} | |||
} break; | |||
case GLFW_KEY_D: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->cloneModule(this); | |||
global_ui->app.gRackWidget->cloneModule(this); | |||
e.consumed = true; | |||
return; | |||
} | |||
@@ -414,140 +309,90 @@ void ModuleWidget::onHoverKey(EventHoverKey &e) { | |||
} | |||
void ModuleWidget::onDragStart(EventDragStart &e) { | |||
dragPos = gRackWidget->lastMousePos.minus(box.pos); | |||
dragPos = global_ui->app.gRackWidget->lastMousePos.minus(box.pos); | |||
} | |||
void ModuleWidget::onDragEnd(EventDragEnd &e) { | |||
} | |||
void ModuleWidget::onDragMove(EventDragMove &e) { | |||
if (!gRackWidget->lockModules) { | |||
if (!global_ui->app.gRackWidget->lockModules) { | |||
Rect newBox = box; | |||
newBox.pos = gRackWidget->lastMousePos.minus(dragPos); | |||
gRackWidget->requestModuleBoxNearest(this, newBox); | |||
newBox.pos = global_ui->app.gRackWidget->lastMousePos.minus(dragPos); | |||
global_ui->app.gRackWidget->requestModuleBoxNearest(this, newBox); | |||
} | |||
} | |||
struct ModuleDisconnectItem : MenuItem { | |||
struct DisconnectMenuItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->disconnect(); | |||
} | |||
}; | |||
struct ModuleResetItem : MenuItem { | |||
struct ResetMenuItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->reset(); | |||
} | |||
}; | |||
struct ModuleRandomizeItem : MenuItem { | |||
struct RandomizeMenuItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->randomize(); | |||
} | |||
}; | |||
struct ModuleCopyItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->copyClipboard(); | |||
} | |||
}; | |||
struct ModulePasteItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->pasteClipboard(); | |||
} | |||
}; | |||
struct ModuleSaveItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->saveDialog(); | |||
} | |||
}; | |||
struct ModuleLoadItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
moduleWidget->loadDialog(); | |||
} | |||
}; | |||
struct ModuleCloneItem : MenuItem { | |||
struct CloneMenuItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
gRackWidget->cloneModule(moduleWidget); | |||
global_ui->app.gRackWidget->cloneModule(moduleWidget); | |||
} | |||
}; | |||
struct ModuleDeleteItem : MenuItem { | |||
struct DeleteMenuItem : MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(EventAction &e) override { | |||
gRackWidget->deleteModule(moduleWidget); | |||
global_ui->app.gRackWidget->deleteModule(moduleWidget); | |||
moduleWidget->finalizeEvents(); | |||
delete moduleWidget; | |||
} | |||
}; | |||
Menu *ModuleWidget::createContextMenu() { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
MenuLabel *menuLabel = new MenuLabel(); | |||
menuLabel->text = model->author + " " + model->name + " " + model->plugin->version; | |||
menu->addChild(menuLabel); | |||
ModuleResetItem *resetItem = new ModuleResetItem(); | |||
ResetMenuItem *resetItem = new ResetMenuItem(); | |||
resetItem->text = "Initialize"; | |||
resetItem->rightText = WINDOW_MOD_KEY_NAME "+I"; | |||
resetItem->moduleWidget = this; | |||
menu->addChild(resetItem); | |||
ModuleRandomizeItem *randomizeItem = new ModuleRandomizeItem(); | |||
RandomizeMenuItem *randomizeItem = new RandomizeMenuItem(); | |||
randomizeItem->text = "Randomize"; | |||
randomizeItem->rightText = WINDOW_MOD_KEY_NAME "+R"; | |||
randomizeItem->moduleWidget = this; | |||
menu->addChild(randomizeItem); | |||
ModuleDisconnectItem *disconnectItem = new ModuleDisconnectItem(); | |||
DisconnectMenuItem *disconnectItem = new DisconnectMenuItem(); | |||
disconnectItem->text = "Disconnect cables"; | |||
disconnectItem->rightText = WINDOW_MOD_KEY_NAME "+U"; | |||
disconnectItem->moduleWidget = this; | |||
menu->addChild(disconnectItem); | |||
ModuleCloneItem *cloneItem = new ModuleCloneItem(); | |||
CloneMenuItem *cloneItem = new CloneMenuItem(); | |||
cloneItem->text = "Duplicate"; | |||
cloneItem->rightText = WINDOW_MOD_KEY_NAME "+D"; | |||
cloneItem->moduleWidget = this; | |||
menu->addChild(cloneItem); | |||
ModuleCopyItem *copyItem = new ModuleCopyItem(); | |||
copyItem->text = "Copy preset"; | |||
copyItem->rightText = WINDOW_MOD_KEY_NAME "+C"; | |||
copyItem->moduleWidget = this; | |||
menu->addChild(copyItem); | |||
ModulePasteItem *pasteItem = new ModulePasteItem(); | |||
pasteItem->text = "Paste preset"; | |||
pasteItem->rightText = WINDOW_MOD_KEY_NAME "+V"; | |||
pasteItem->moduleWidget = this; | |||
menu->addChild(pasteItem); | |||
ModuleLoadItem *loadItem = new ModuleLoadItem(); | |||
loadItem->text = "Load preset"; | |||
loadItem->moduleWidget = this; | |||
menu->addChild(loadItem); | |||
ModuleSaveItem *saveItem = new ModuleSaveItem(); | |||
saveItem->text = "Save preset"; | |||
saveItem->moduleWidget = this; | |||
menu->addChild(saveItem); | |||
ModuleDeleteItem *deleteItem = new ModuleDeleteItem(); | |||
DeleteMenuItem *deleteItem = new DeleteMenuItem(); | |||
deleteItem->text = "Delete"; | |||
deleteItem->rightText = "Backspace/Delete"; | |||
deleteItem->moduleWidget = this; | |||
@@ -559,4 +404,4 @@ Menu *ModuleWidget::createContextMenu() { | |||
} | |||
} // namespace rack | |||
} // namespace rack |
@@ -47,6 +47,8 @@ void ParamWidget::onChange(EventChange &e) { | |||
if (!module) | |||
return; | |||
// printf("xxx ParamWidget::onChange: paramId=%d value=%f\n", paramId, value); | |||
if (smooth) | |||
engineSetParamSmooth(module, paramId, value); | |||
else | |||
@@ -54,6 +54,7 @@ struct SyncButton : Button { | |||
bool completed = false; | |||
void step() override { | |||
#ifndef USE_VST2 | |||
// Check for plugin update on first step() | |||
if (!checked) { | |||
std::thread t([this]() { | |||
@@ -63,6 +64,7 @@ struct SyncButton : Button { | |||
t.detach(); | |||
checked = true; | |||
} | |||
#endif // USE_VST2 | |||
// Display message if we've completed updates | |||
if (completed) { | |||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "All plugins have been updated. Close Rack and re-launch it to load new updates.")) { | |||
@@ -85,11 +87,13 @@ struct SyncButton : Button { | |||
} | |||
void onAction(EventAction &e) override { | |||
available = false; | |||
#ifndef USE_VST2 | |||
std::thread t([this]() { | |||
if (pluginSync(false)) | |||
completed = true; | |||
}); | |||
t.detach(); | |||
#endif // USE_VST2 | |||
} | |||
}; | |||
@@ -1,8 +1,9 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "engine.hpp" | |||
#include "componentlibrary.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -24,7 +25,7 @@ Port::Port() { | |||
Port::~Port() { | |||
// plugLight is not a child and is thus owned by the Port, so we need to delete it here | |||
delete plugLight; | |||
gRackWidget->wireContainer->removeAllWires(this); | |||
global_ui->app.gRackWidget->wireContainer->removeAllWires(this); | |||
} | |||
void Port::step() { | |||
@@ -41,7 +42,7 @@ void Port::step() { | |||
} | |||
void Port::draw(NVGcontext *vg) { | |||
WireWidget *activeWire = gRackWidget->wireContainer->activeWire; | |||
WireWidget *activeWire = global_ui->app.gRackWidget->wireContainer->activeWire; | |||
if (activeWire) { | |||
// Dim the Port if the active wire cannot plug into this Port | |||
if (type == INPUT ? activeWire->inputPort : activeWire->outputPort) | |||
@@ -51,7 +52,7 @@ void Port::draw(NVGcontext *vg) { | |||
void Port::onMouseDown(EventMouseDown &e) { | |||
if (e.button == 1) { | |||
gRackWidget->wireContainer->removeTopWire(this); | |||
global_ui->app.gRackWidget->wireContainer->removeTopWire(this); | |||
// HACK | |||
// Update hovered*Port of active wire if applicable | |||
@@ -64,7 +65,7 @@ void Port::onMouseDown(EventMouseDown &e) { | |||
void Port::onDragStart(EventDragStart &e) { | |||
// Try to grab wire on top of stack | |||
WireWidget *wire = gRackWidget->wireContainer->getTopWire(this); | |||
WireWidget *wire = global_ui->app.gRackWidget->wireContainer->getTopWire(this); | |||
if (type == OUTPUT && windowIsModPressed()) { | |||
wire = NULL; | |||
} | |||
@@ -85,13 +86,13 @@ void Port::onDragStart(EventDragStart &e) { | |||
else | |||
wire->outputPort = this; | |||
} | |||
gRackWidget->wireContainer->setActiveWire(wire); | |||
global_ui->app.gRackWidget->wireContainer->setActiveWire(wire); | |||
} | |||
void Port::onDragEnd(EventDragEnd &e) { | |||
// FIXME | |||
// If the source Port is deleted, this will be called, removing the cable | |||
gRackWidget->wireContainer->commitActiveWire(); | |||
global_ui->app.gRackWidget->wireContainer->commitActiveWire(); | |||
} | |||
void Port::onDragDrop(EventDragDrop &e) { | |||
@@ -100,12 +101,12 @@ void Port::onDragDrop(EventDragDrop &e) { | |||
void Port::onDragEnter(EventDragEnter &e) { | |||
// Reject ports if this is an input port and something is already plugged into it | |||
if (type == INPUT) { | |||
WireWidget *topWire = gRackWidget->wireContainer->getTopWire(this); | |||
WireWidget *topWire = global_ui->app.gRackWidget->wireContainer->getTopWire(this); | |||
if (topWire) | |||
return; | |||
} | |||
WireWidget *activeWire = gRackWidget->wireContainer->activeWire; | |||
WireWidget *activeWire = global_ui->app.gRackWidget->wireContainer->activeWire; | |||
if (activeWire) { | |||
if (type == INPUT) | |||
activeWire->hoveredInputPort = this; | |||
@@ -115,7 +116,7 @@ void Port::onDragEnter(EventDragEnter &e) { | |||
} | |||
void Port::onDragLeave(EventDragEnter &e) { | |||
WireWidget *activeWire = gRackWidget->wireContainer->activeWire; | |||
WireWidget *activeWire = global_ui->app.gRackWidget->wireContainer->activeWire; | |||
if (activeWire) { | |||
if (type == INPUT) | |||
activeWire->hoveredInputPort = NULL; | |||
@@ -1,9 +1,11 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "util/request.hpp" | |||
#include "osdialog.h" | |||
#include <string.h> | |||
#include <thread> | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -14,43 +16,43 @@ RackScene::RackScene() { | |||
{ | |||
zoomWidget = new ZoomWidget(); | |||
{ | |||
assert(!gRackWidget); | |||
gRackWidget = new RackWidget(); | |||
zoomWidget->addChild(gRackWidget); | |||
assert(!global_ui->app.gRackWidget); | |||
global_ui->app.gRackWidget = new RackWidget(); | |||
zoomWidget->addChild(global_ui->app.gRackWidget); | |||
} | |||
scrollWidget->container->addChild(zoomWidget); | |||
} | |||
addChild(scrollWidget); | |||
gToolbar = new Toolbar(); | |||
addChild(gToolbar); | |||
scrollWidget->box.pos.y = gToolbar->box.size.y; | |||
global_ui->app.gToolbar = new Toolbar(); | |||
addChild(global_ui->app.gToolbar); | |||
scrollWidget->box.pos.y = global_ui->app.gToolbar->box.size.y; | |||
} | |||
void RackScene::step() { | |||
// Resize owned descendants | |||
gToolbar->box.size.x = box.size.x; | |||
global_ui->app.gToolbar->box.size.x = box.size.x; | |||
scrollWidget->box.size = box.size.minus(scrollWidget->box.pos); | |||
// Resize to be a bit larger than the ScrollWidget viewport | |||
gRackWidget->box.size = scrollWidget->box.size | |||
global_ui->app.gRackWidget->box.size = scrollWidget->box.size | |||
.minus(scrollWidget->container->box.pos) | |||
.plus(Vec(500, 500)) | |||
.div(zoomWidget->zoom); | |||
Scene::step(); | |||
zoomWidget->box.size = gRackWidget->box.size.mult(zoomWidget->zoom); | |||
zoomWidget->box.size = global_ui->app.gRackWidget->box.size.mult(zoomWidget->zoom); | |||
// Version popup message | |||
if (!gLatestVersion.empty()) { | |||
std::string versionMessage = stringf("Rack %s is available.\n\nYou have Rack %s.\n\nClose Rack and download new version on the website?", gLatestVersion.c_str(), gApplicationVersion.c_str()); | |||
if (!global_ui->app.gLatestVersion.empty()) { | |||
std::string versionMessage = stringf("Rack %s is available.\n\nYou have Rack %s.\n\nClose Rack and download new version on the website?", global_ui->app.gLatestVersion.c_str(), global_ui->app.gApplicationVersion.c_str()); | |||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, versionMessage.c_str())) { | |||
std::thread t(systemOpenBrowser, "https://vcvrack.com/"); | |||
t.detach(); | |||
windowClose(); | |||
} | |||
gLatestVersion = ""; | |||
global_ui->app.gLatestVersion = ""; | |||
} | |||
} | |||
@@ -65,7 +67,7 @@ void RackScene::onHoverKey(EventHoverKey &e) { | |||
switch (e.key) { | |||
case GLFW_KEY_N: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->reset(); | |||
global_ui->app.gRackWidget->reset(); | |||
e.consumed = true; | |||
} | |||
} break; | |||
@@ -77,27 +79,21 @@ void RackScene::onHoverKey(EventHoverKey &e) { | |||
} break; | |||
case GLFW_KEY_O: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->loadDialog(); | |||
global_ui->app.gRackWidget->openDialog(); | |||
e.consumed = true; | |||
} | |||
if (windowIsModPressed() && windowIsShiftPressed()) { | |||
gRackWidget->revert(); | |||
global_ui->app.gRackWidget->revert(); | |||
e.consumed = true; | |||
} | |||
} break; | |||
case GLFW_KEY_S: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->saveDialog(); | |||
global_ui->app.gRackWidget->saveDialog(); | |||
e.consumed = true; | |||
} | |||
if (windowIsModPressed() && windowIsShiftPressed()) { | |||
gRackWidget->saveAsDialog(); | |||
e.consumed = true; | |||
} | |||
} break; | |||
case GLFW_KEY_V: { | |||
if (windowIsModPressed() && !windowIsShiftPressed()) { | |||
gRackWidget->pastePresetClipboard(); | |||
global_ui->app.gRackWidget->saveAsDialog(); | |||
e.consumed = true; | |||
} | |||
} break; | |||
@@ -115,9 +111,9 @@ void RackScene::onHoverKey(EventHoverKey &e) { | |||
void RackScene::onPathDrop(EventPathDrop &e) { | |||
if (e.paths.size() >= 1) { | |||
const std::string &firstPath = e.paths.front(); | |||
const std::string& firstPath = e.paths.front(); | |||
if (stringExtension(firstPath) == "vcv") { | |||
gRackWidget->load(firstPath); | |||
global_ui->app.gRackWidget->loadPatch(firstPath); | |||
e.consumed = true; | |||
} | |||
} | |||
@@ -1,15 +1,17 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
void RackScrollWidget::step() { | |||
Vec pos = gMousePos; | |||
Vec pos = global_ui->window.gMousePos; | |||
Rect viewport = getViewport(box.zeroPos()); | |||
// Scroll rack if dragging cable near the edge of the screen | |||
if (gRackWidget->wireContainer->activeWire) { | |||
if (global_ui->app.gRackWidget->wireContainer->activeWire) { | |||
float margin = 20.0; | |||
float speed = 15.0; | |||
if (pos.x <= viewport.pos.x + margin) | |||
@@ -1,3 +1,4 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "engine.hpp" | |||
#include "plugin.hpp" | |||
@@ -7,11 +8,16 @@ | |||
#include <map> | |||
#include <algorithm> | |||
#include "osdialog.h" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
static const char *FILTERS = "VeeSeeVST Rack patch (.vcv):vcv"; | |||
struct ModuleContainer : Widget { | |||
void draw(NVGcontext *vg) override { | |||
// Draw shadows behind each ModuleWidget first, so the shadow doesn't overlap the front. | |||
@@ -56,19 +62,22 @@ void RackWidget::clear() { | |||
wireContainer->clearChildren(); | |||
moduleContainer->clearChildren(); | |||
gRackScene->scrollWidget->offset = Vec(0, 0); | |||
global_ui->app.gRackScene->scrollWidget->offset = Vec(0, 0); | |||
#ifdef USE_VST2 | |||
global->vst2.next_unique_param_base_id = 1; | |||
#endif // USE_VST2 | |||
} | |||
void RackWidget::reset() { | |||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "Clear patch and start over?")) { | |||
clear(); | |||
// Fails silently if file does not exist | |||
load(assetLocal("template.vcv")); | |||
loadPatch(assetLocal("template.vcv")); | |||
lastPath = ""; | |||
} | |||
} | |||
void RackWidget::loadDialog() { | |||
void RackWidget::openDialog() { | |||
std::string dir; | |||
if (lastPath.empty()) { | |||
dir = assetLocal("patches"); | |||
@@ -77,10 +86,10 @@ void RackWidget::loadDialog() { | |||
else { | |||
dir = stringDirectory(lastPath); | |||
} | |||
osdialog_filters *filters = osdialog_filters_parse(PATCH_FILTERS.c_str()); | |||
osdialog_filters *filters = osdialog_filters_parse(FILTERS); | |||
char *path = osdialog_file(OSDIALOG_OPEN, dir.c_str(), NULL, filters); | |||
if (path) { | |||
load(path); | |||
loadPatch(path); | |||
lastPath = path; | |||
free(path); | |||
} | |||
@@ -89,7 +98,7 @@ void RackWidget::loadDialog() { | |||
void RackWidget::saveDialog() { | |||
if (!lastPath.empty()) { | |||
save(lastPath); | |||
savePatch(lastPath); | |||
} | |||
else { | |||
saveAsDialog(); | |||
@@ -107,7 +116,7 @@ void RackWidget::saveAsDialog() { | |||
dir = stringDirectory(lastPath); | |||
filename = stringFilename(lastPath); | |||
} | |||
osdialog_filters *filters = osdialog_filters_parse(PATCH_FILTERS.c_str()); | |||
osdialog_filters *filters = osdialog_filters_parse(FILTERS); | |||
char *path = osdialog_file(OSDIALOG_SAVE, dir.c_str(), filename.c_str(), filters); | |||
if (path) { | |||
@@ -118,19 +127,19 @@ void RackWidget::saveAsDialog() { | |||
pathStr += ".vcv"; | |||
} | |||
save(pathStr); | |||
savePatch(pathStr); | |||
lastPath = pathStr; | |||
} | |||
osdialog_filters_free(filters); | |||
} | |||
void RackWidget::save(std::string filename) { | |||
info("Saving patch %s", filename.c_str()); | |||
void RackWidget::savePatch(std::string path) { | |||
info("Saving patch %s", path.c_str()); | |||
json_t *rootJ = toJson(); | |||
if (!rootJ) | |||
return; | |||
FILE *file = fopen(filename.c_str(), "w"); | |||
FILE *file = fopen(path.c_str(), "w"); | |||
if (file) { | |||
json_dumpf(rootJ, file, JSON_INDENT(2) | JSON_REAL_PRECISION(9)); | |||
fclose(file); | |||
@@ -139,9 +148,25 @@ void RackWidget::save(std::string filename) { | |||
json_decref(rootJ); | |||
} | |||
void RackWidget::load(std::string filename) { | |||
info("Loading patch %s", filename.c_str()); | |||
FILE *file = fopen(filename.c_str(), "r"); | |||
#ifdef USE_VST2 | |||
char *RackWidget::savePatchToString(void) { | |||
// (note) caller must free() returned string | |||
info("Saving patch to string"); | |||
char *r = NULL; | |||
json_t *rootJ = toJson(); | |||
if (!rootJ) | |||
return NULL; | |||
r = json_dumps(rootJ, JSON_INDENT(2) | JSON_REAL_PRECISION(9)); | |||
json_decref(rootJ); | |||
return r; | |||
} | |||
#endif // USE_VST2 | |||
void RackWidget::loadPatch(std::string path) { | |||
info("Loading patch %s", path.c_str()); | |||
FILE *file = fopen(path.c_str(), "r"); | |||
if (!file) { | |||
// Exit silently | |||
return; | |||
@@ -155,18 +180,50 @@ void RackWidget::load(std::string filename) { | |||
json_decref(rootJ); | |||
} | |||
else { | |||
std::string message = stringf("JSON parsing error at %s %d:%d %s", error.source, error.line, error.column, error.text); | |||
std::string message = stringf("JSON parsing error at %s %d:%d %s\n", error.source, error.line, error.column, error.text); | |||
osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str()); | |||
} | |||
fclose(file); | |||
} | |||
#ifdef USE_VST2 | |||
bool RackWidget::loadPatchFromString(const char *_string) { | |||
info("Loading patch from string"); | |||
if (NULL == _string) { | |||
// Exit silently | |||
return false; | |||
} | |||
json_error_t error; | |||
json_t *rootJ = json_loads(_string, 0/*flags*/, &error); | |||
if (rootJ) { | |||
clear(); | |||
#ifdef USE_VST2 | |||
global->vst2.b_patch_loading = true; | |||
#endif | |||
fromJson(rootJ); | |||
#ifdef USE_VST2 | |||
global->vst2.b_patch_loading = false; | |||
#endif // USE_VST2 | |||
json_decref(rootJ); | |||
return true; | |||
} | |||
else { | |||
std::string message = stringf("JSON parsing error at %s %d:%d %s\n", error.source, error.line, error.column, error.text); | |||
osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str()); | |||
} | |||
return false; | |||
} | |||
#endif // USE_VST2 | |||
void RackWidget::revert() { | |||
if (lastPath.empty()) | |||
return; | |||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "Revert patch to the last saved state?")) { | |||
load(lastPath); | |||
loadPatch(lastPath); | |||
} | |||
} | |||
@@ -186,7 +243,7 @@ json_t *RackWidget::toJson() { | |||
json_t *rootJ = json_object(); | |||
// version | |||
json_t *versionJ = json_string(gApplicationVersion.c_str()); | |||
json_t *versionJ = json_string(global_ui->app.gApplicationVersion.c_str()); | |||
json_object_set_new(rootJ, "version", versionJ); | |||
// modules | |||
@@ -200,12 +257,6 @@ json_t *RackWidget::toJson() { | |||
moduleId++; | |||
// module | |||
json_t *moduleJ = moduleWidget->toJson(); | |||
{ | |||
// pos | |||
Vec pos = moduleWidget->box.pos.div(RACK_GRID_SIZE).round(); | |||
json_t *posJ = json_pack("[i, i]", (int) pos.x, (int) pos.y); | |||
json_object_set_new(moduleJ, "pos", posJ); | |||
} | |||
json_array_append_new(modulesJ, moduleJ); | |||
} | |||
json_object_set_new(rootJ, "modules", modulesJ); | |||
@@ -278,30 +329,25 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
json_object_set(moduleJ, "legacy", json_integer(legacy)); | |||
} | |||
ModuleWidget *moduleWidget = moduleFromJson(moduleJ); | |||
if (moduleWidget) { | |||
// pos | |||
json_t *posJ = json_object_get(moduleJ, "pos"); | |||
double x, y; | |||
json_unpack(posJ, "[F, F]", &x, &y); | |||
Vec pos = Vec(x, y); | |||
if (legacy && legacy <= 1) { | |||
moduleWidget->box.pos = pos; | |||
} | |||
else { | |||
moduleWidget->box.pos = pos.mult(RACK_GRID_SIZE); | |||
} | |||
json_t *pluginSlugJ = json_object_get(moduleJ, "plugin"); | |||
if (!pluginSlugJ) continue; | |||
json_t *modelSlugJ = json_object_get(moduleJ, "model"); | |||
if (!modelSlugJ) continue; | |||
std::string pluginSlug = json_string_value(pluginSlugJ); | |||
std::string modelSlug = json_string_value(modelSlugJ); | |||
moduleWidgets[moduleId] = moduleWidget; | |||
} | |||
else { | |||
json_t *pluginSlugJ = json_object_get(moduleJ, "plugin"); | |||
json_t *modelSlugJ = json_object_get(moduleJ, "model"); | |||
std::string pluginSlug = json_string_value(pluginSlugJ); | |||
std::string modelSlug = json_string_value(modelSlugJ); | |||
Model *model = pluginGetModel(pluginSlug, modelSlug); | |||
if (!model) { | |||
message += stringf("Could not find module \"%s\" of plugin \"%s\"\n", modelSlug.c_str(), pluginSlug.c_str()); | |||
continue; | |||
} | |||
// Create ModuleWidget | |||
ModuleWidget *moduleWidget = model->createModuleWidget(); | |||
assert(moduleWidget); | |||
moduleWidget->fromJson(moduleJ); | |||
moduleContainer->addChild(moduleWidget); | |||
moduleWidgets[moduleId] = moduleWidget; | |||
} | |||
// wires | |||
@@ -363,53 +409,6 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
} | |||
} | |||
ModuleWidget *RackWidget::moduleFromJson(json_t *moduleJ) { | |||
// Get slugs | |||
json_t *pluginSlugJ = json_object_get(moduleJ, "plugin"); | |||
if (!pluginSlugJ) | |||
return NULL; | |||
json_t *modelSlugJ = json_object_get(moduleJ, "model"); | |||
if (!modelSlugJ) | |||
return NULL; | |||
std::string pluginSlug = json_string_value(pluginSlugJ); | |||
std::string modelSlug = json_string_value(modelSlugJ); | |||
// Get Model | |||
Model *model = pluginGetModel(pluginSlug, modelSlug); | |||
if (!model) | |||
return NULL; | |||
// Create ModuleWidget | |||
ModuleWidget *moduleWidget = model->createModuleWidget(); | |||
assert(moduleWidget); | |||
moduleWidget->fromJson(moduleJ); | |||
moduleContainer->addChild(moduleWidget); | |||
return moduleWidget; | |||
} | |||
void RackWidget::pastePresetClipboard() { | |||
const char *moduleJson = glfwGetClipboardString(gWindow); | |||
if (!moduleJson) { | |||
warn("Could not get text from clipboard."); | |||
return; | |||
} | |||
json_error_t error; | |||
json_t *moduleJ = json_loads(moduleJson, 0, &error); | |||
if (moduleJ) { | |||
ModuleWidget *moduleWidget = moduleFromJson(moduleJ); | |||
// Set moduleWidget position | |||
Rect newBox = moduleWidget->box; | |||
newBox.pos = lastMousePos.minus(newBox.size.div(2)); | |||
requestModuleBoxNearest(moduleWidget, newBox); | |||
json_decref(moduleJ); | |||
} | |||
else { | |||
warn("JSON parsing error at %s %d:%d %s", error.source, error.line, error.column, error.text); | |||
} | |||
} | |||
void RackWidget::addModule(ModuleWidget *m) { | |||
moduleContainer->addChild(m); | |||
m->create(); | |||
@@ -421,13 +420,16 @@ void RackWidget::deleteModule(ModuleWidget *m) { | |||
} | |||
void RackWidget::cloneModule(ModuleWidget *m) { | |||
// Create new module from model | |||
ModuleWidget *clonedModuleWidget = m->model->createModuleWidget(); | |||
// JSON serialization is the most straightforward way to do this | |||
json_t *moduleJ = m->toJson(); | |||
ModuleWidget *clonedModuleWidget = moduleFromJson(moduleJ); | |||
clonedModuleWidget->fromJson(moduleJ); | |||
json_decref(moduleJ); | |||
Rect clonedBox = clonedModuleWidget->box; | |||
clonedBox.pos = m->box.pos; | |||
requestModuleBoxNearest(clonedModuleWidget, clonedBox); | |||
addModule(clonedModuleWidget); | |||
} | |||
bool RackWidget::requestModuleBox(ModuleWidget *m, Rect box) { | |||
@@ -488,11 +490,13 @@ void RackWidget::step() { | |||
rail->box.size = rails->box.size; | |||
} | |||
#ifndef USE_VST2 | |||
// Autosave every 15 seconds | |||
if (gGuiFrame % (60 * 15) == 0) { | |||
save(assetLocal("autosave.vcv")); | |||
if (global_ui->window.gGuiFrame % (60 * 15) == 0) { | |||
savePatch(assetLocal("autosave.vcv")); | |||
settingsSave(assetLocal("settings.json")); | |||
} | |||
#endif // USE_VST2 | |||
Widget::step(); | |||
} | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -18,7 +20,7 @@ struct PanelBorder : TransparentWidget { | |||
void SVGPanel::step() { | |||
if (isNear(gPixelRatio, 1.0)) { | |||
if (isNear(global_ui->window.gPixelRatio, 1.0)) { | |||
// Small details draw poorly at low DPI, so oversample when drawing to the framebuffer | |||
oversample = 2.0; | |||
} | |||
@@ -1,7 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "engine.hpp" | |||
#include "asset.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -15,13 +18,13 @@ struct TooltipIconButton : IconButton { | |||
tooltip = new Tooltip(); | |||
tooltip->box.pos = getAbsoluteOffset(Vec(0, BND_WIDGET_HEIGHT)); | |||
tooltip->text = tooltipText; | |||
gScene->addChild(tooltip); | |||
global_ui->ui.gScene->addChild(tooltip); | |||
} | |||
IconButton::onMouseEnter(e); | |||
} | |||
void onMouseLeave(EventMouseLeave &e) override { | |||
if (tooltip) { | |||
gScene->removeChild(tooltip); | |||
global_ui->ui.gScene->removeChild(tooltip); | |||
delete tooltip; | |||
tooltip = NULL; | |||
} | |||
@@ -35,7 +38,7 @@ struct NewButton : TooltipIconButton { | |||
tooltipText = "New (" WINDOW_MOD_KEY_NAME "+N)"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->reset(); | |||
global_ui->app.gRackWidget->reset(); | |||
} | |||
}; | |||
@@ -45,7 +48,7 @@ struct OpenButton : TooltipIconButton { | |||
tooltipText = "Open (" WINDOW_MOD_KEY_NAME "+O)"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->loadDialog(); | |||
global_ui->app.gRackWidget->openDialog(); | |||
} | |||
}; | |||
@@ -55,7 +58,7 @@ struct SaveButton : TooltipIconButton { | |||
tooltipText = "Save (" WINDOW_MOD_KEY_NAME "+S)"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->saveDialog(); | |||
global_ui->app.gRackWidget->saveDialog(); | |||
} | |||
}; | |||
@@ -65,7 +68,7 @@ struct SaveAsButton : TooltipIconButton { | |||
tooltipText = "Save as (" WINDOW_MOD_KEY_NAME "+Shift+S)"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->saveAsDialog(); | |||
global_ui->app.gRackWidget->saveAsDialog(); | |||
} | |||
}; | |||
@@ -75,7 +78,7 @@ struct RevertButton : TooltipIconButton { | |||
tooltipText = "Revert"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->revert(); | |||
global_ui->app.gRackWidget->revert(); | |||
} | |||
}; | |||
@@ -85,7 +88,7 @@ struct DisconnectCablesButton : TooltipIconButton { | |||
tooltipText = "Disconnect cables"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->disconnect(); | |||
global_ui->app.gRackWidget->disconnect(); | |||
} | |||
}; | |||
@@ -95,13 +98,13 @@ struct PowerMeterButton : TooltipIconButton { | |||
tooltipText = "Toggle power meter (see manual for explanation)"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gPowerMeter ^= true; | |||
global->gPowerMeter ^= true; | |||
} | |||
}; | |||
struct EnginePauseItem : MenuItem { | |||
void onAction(EventAction &e) override { | |||
gPaused ^= true; | |||
global->gPaused ^= true; | |||
} | |||
}; | |||
@@ -109,7 +112,7 @@ struct SampleRateItem : MenuItem { | |||
float sampleRate; | |||
void onAction(EventAction &e) override { | |||
engineSetSampleRate(sampleRate); | |||
gPaused = false; | |||
global->gPaused = false; | |||
} | |||
}; | |||
@@ -119,14 +122,14 @@ struct SampleRateButton : TooltipIconButton { | |||
tooltipText = "Internal sample rate"; | |||
} | |||
void onAction(EventAction &e) override { | |||
Menu *menu = gScene->createMenu(); | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->box.pos = getAbsoluteOffset(Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
menu->addChild(MenuLabel::create("Internal sample rate")); | |||
EnginePauseItem *pauseItem = new EnginePauseItem(); | |||
pauseItem->text = gPaused ? "Resume engine" : "Pause engine"; | |||
pauseItem->text = global->gPaused ? "Resume engine" : "Pause engine"; | |||
menu->addChild(pauseItem); | |||
std::vector<float> sampleRates = {44100, 48000, 88200, 96000, 176400, 192000}; | |||
@@ -146,14 +149,14 @@ struct RackLockButton : TooltipIconButton { | |||
tooltipText = "Lock modules"; | |||
} | |||
void onAction(EventAction &e) override { | |||
gRackWidget->lockModules ^= true; | |||
global_ui->app.gRackWidget->lockModules ^= true; | |||
} | |||
}; | |||
struct ZoomSlider : Slider { | |||
void onAction(EventAction &e) override { | |||
Slider::onAction(e); | |||
gRackScene->zoomWidget->setZoom(roundf(value) / 100.0); | |||
global_ui->app.gRackScene->zoomWidget->setZoom(roundf(value) / 100.0); | |||
} | |||
}; | |||
@@ -1,7 +1,9 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "engine.hpp" | |||
#include "componentlibrary.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -120,25 +122,25 @@ void WireWidget::updateWire() { | |||
Vec WireWidget::getOutputPos() { | |||
if (outputPort) { | |||
return outputPort->getRelativeOffset(outputPort->box.zeroPos().getCenter(), gRackWidget); | |||
return outputPort->getRelativeOffset(outputPort->box.zeroPos().getCenter(), global_ui->app.gRackWidget); | |||
} | |||
else if (hoveredOutputPort) { | |||
return hoveredOutputPort->getRelativeOffset(hoveredOutputPort->box.zeroPos().getCenter(), gRackWidget); | |||
return hoveredOutputPort->getRelativeOffset(hoveredOutputPort->box.zeroPos().getCenter(), global_ui->app.gRackWidget); | |||
} | |||
else { | |||
return gRackWidget->lastMousePos; | |||
return global_ui->app.gRackWidget->lastMousePos; | |||
} | |||
} | |||
Vec WireWidget::getInputPos() { | |||
if (inputPort) { | |||
return inputPort->getRelativeOffset(inputPort->box.zeroPos().getCenter(), gRackWidget); | |||
return inputPort->getRelativeOffset(inputPort->box.zeroPos().getCenter(), global_ui->app.gRackWidget); | |||
} | |||
else if (hoveredInputPort) { | |||
return hoveredInputPort->getRelativeOffset(hoveredInputPort->box.zeroPos().getCenter(), gRackWidget); | |||
return hoveredInputPort->getRelativeOffset(hoveredInputPort->box.zeroPos().getCenter(), global_ui->app.gRackWidget); | |||
} | |||
else { | |||
return gRackWidget->lastMousePos; | |||
return global_ui->app.gRackWidget->lastMousePos; | |||
} | |||
} | |||
@@ -161,17 +163,17 @@ void WireWidget::fromJson(json_t *rootJ) { | |||
} | |||
void WireWidget::draw(NVGcontext *vg) { | |||
float opacity = gToolbar->wireOpacitySlider->value / 100.0; | |||
float tension = gToolbar->wireTensionSlider->value; | |||
float opacity = global_ui->app.gToolbar->wireOpacitySlider->value / 100.0; | |||
float tension = global_ui->app.gToolbar->wireTensionSlider->value; | |||
WireWidget *activeWire = gRackWidget->wireContainer->activeWire; | |||
WireWidget *activeWire = global_ui->app.gRackWidget->wireContainer->activeWire; | |||
if (activeWire) { | |||
// Draw as opaque if the wire is active | |||
if (activeWire == this) | |||
opacity = 1.0; | |||
} | |||
else { | |||
Port *hoveredPort = dynamic_cast<Port*>(gHoveredWidget); | |||
Port *hoveredPort = dynamic_cast<Port*>(global_ui->widgets.gHoveredWidget); | |||
if (hoveredPort && (hoveredPort == outputPort || hoveredPort == inputPort)) | |||
opacity = 1.0; | |||
} | |||
@@ -1,53 +1,46 @@ | |||
#include "global_pre.hpp" | |||
#include "app.hpp" | |||
#include "util/request.hpp" | |||
#include <thread> | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
std::string gApplicationName = "VCV Rack"; | |||
std::string gApplicationVersion = TOSTRING(VERSION); | |||
std::string gApiHost = "https://api.vcvrack.com"; | |||
// std::string gApiHost = "http://localhost:8081"; | |||
std::string gLatestVersion; | |||
bool gCheckVersion = true; | |||
RackWidget *gRackWidget = NULL; | |||
Toolbar *gToolbar = NULL; | |||
RackScene *gRackScene = NULL; | |||
#ifndef USE_VST2 | |||
static void checkVersion() { | |||
json_t *resJ = requestJson(METHOD_GET, gApiHost + "/version", NULL); | |||
json_t *resJ = requestJson(METHOD_GET, global_ui->app.gApiHost + "/version", NULL); | |||
if (resJ) { | |||
json_t *versionJ = json_object_get(resJ, "version"); | |||
if (versionJ) { | |||
const char *version = json_string_value(versionJ); | |||
if (version && version != gApplicationVersion) { | |||
gLatestVersion = version; | |||
if (version && version != global_ui->app.gApplicationVersion) { | |||
global_ui->app.gLatestVersion = version; | |||
} | |||
} | |||
json_decref(resJ); | |||
} | |||
} | |||
#endif // USE_VST2 | |||
void appInit(bool devMode) { | |||
gRackScene = new RackScene(); | |||
gScene = gRackScene; | |||
global_ui->app.gRackScene = new RackScene(); | |||
global_ui->ui.gScene = global_ui->app.gRackScene; | |||
#ifndef USE_VST2 | |||
// Request latest version from server | |||
if (!devMode && gCheckVersion) { | |||
if (!devMode && global_ui->app.gCheckVersion) { | |||
std::thread t(checkVersion); | |||
t.detach(); | |||
} | |||
#endif // USE_VST2 | |||
} | |||
void appDestroy() { | |||
delete gRackScene; | |||
delete global_ui->app.gRackScene; | |||
} | |||
@@ -1,6 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "asset.hpp" | |||
#include "util/common.hpp" | |||
#include "osdialog.h" | |||
#include "global.hpp" | |||
#if ARCH_MAC | |||
#include <CoreFoundation/CoreFoundation.h> | |||
@@ -23,15 +25,11 @@ | |||
namespace rack { | |||
static std::string globalDir; | |||
static std::string localDir; | |||
void assetInit(bool devMode) { | |||
if (devMode) { | |||
// Use current working directory if running in development mode | |||
globalDir = "."; | |||
localDir = "."; | |||
global->asset.globalDir = "."; | |||
global->asset.localDir = "."; | |||
return; | |||
} | |||
@@ -43,31 +41,36 @@ void assetInit(bool devMode) { | |||
Boolean success = CFURLGetFileSystemRepresentation(resourcesUrl, TRUE, (UInt8*) resourcesBuf, sizeof(resourcesBuf)); | |||
assert(success); | |||
CFRelease(resourcesUrl); | |||
globalDir = resourcesBuf; | |||
global->asset.globalDir = resourcesBuf; | |||
// Get home directory | |||
struct passwd *pw = getpwuid(getuid()); | |||
assert(pw); | |||
localDir = pw->pw_dir; | |||
localDir += "/Documents/Rack"; | |||
global->asset.localDir = pw->pw_dir; | |||
global->asset.localDir += "/Documents/Rack"; | |||
#endif | |||
#if ARCH_WIN | |||
#ifndef USE_VST2 | |||
char moduleBuf[MAX_PATH]; | |||
DWORD length = GetModuleFileName(NULL, moduleBuf, sizeof(moduleBuf)); | |||
assert(length > 0); | |||
PathRemoveFileSpec(moduleBuf); | |||
globalDir = moduleBuf; | |||
global->asset.globalDir = moduleBuf; | |||
// Get "My Documents" folder | |||
char documentsBuf[MAX_PATH]; | |||
HRESULT result = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, documentsBuf); | |||
assert(result == S_OK); | |||
localDir = documentsBuf; | |||
localDir += "/Rack"; | |||
global->asset.localDir = documentsBuf; | |||
global->asset.localDir += "/Rack"; | |||
#else | |||
global->asset.globalDir = global->vst2.program_dir; | |||
global->asset.localDir = global->vst2.program_dir; | |||
#endif // USE_VST2 | |||
#endif | |||
#if ARCH_LIN | |||
// TODO For now, users should launch Rack from their terminal in the global directory | |||
globalDir = "."; | |||
global->asset.globalDir = "."; | |||
// Get home directory | |||
const char *homeBuf = getenv("HOME"); | |||
@@ -76,20 +79,20 @@ void assetInit(bool devMode) { | |||
assert(pw); | |||
homeBuf = pw->pw_dir; | |||
} | |||
localDir = homeBuf; | |||
localDir += "/.Rack"; | |||
global->asset.localDir = homeBuf; | |||
global->asset.localDir += "/.Rack"; | |||
#endif | |||
systemCreateDirectory(localDir); | |||
systemCreateDirectory(global->asset.localDir); | |||
} | |||
std::string assetGlobal(std::string filename) { | |||
return globalDir + "/" + filename; | |||
return global->asset.globalDir + "/" + filename; | |||
} | |||
std::string assetLocal(std::string filename) { | |||
return localDir + "/" + filename; | |||
return global->asset.localDir + "/" + filename; | |||
} | |||
@@ -98,5 +101,14 @@ std::string assetPlugin(Plugin *plugin, std::string filename) { | |||
return plugin->path + "/" + filename; | |||
} | |||
#ifdef USE_VST2 | |||
std::string assetStaticPlugin(const char *name/*e.g. "Fundamentals"*/, const char *_relPathOrNull) { | |||
return global->asset.localDir + "plugins/" + name + "/" + ((NULL != _relPathOrNull)?_relPathOrNull:""); | |||
} | |||
std::string assetPlugin(const char *name/*e.g. "Fundamentals"*/, const char *_relPathOrNull) { | |||
return assetStaticPlugin(name, _relPathOrNull); | |||
} | |||
#endif // USE_VST2 | |||
} // namespace rack |
@@ -1,13 +1,19 @@ | |||
#include "global_pre.hpp" | |||
#include "audio.hpp" | |||
#include "util/common.hpp" | |||
#include "bridge.hpp" | |||
#include "global.hpp" | |||
namespace rack { | |||
AudioIO::AudioIO() { | |||
#ifdef USE_VST2 | |||
setDriver(-1); | |||
#else | |||
setDriver(RtAudio::UNSPECIFIED); | |||
#endif | |||
} | |||
AudioIO::~AudioIO() { | |||
@@ -15,44 +21,54 @@ AudioIO::~AudioIO() { | |||
} | |||
std::vector<int> AudioIO::getDrivers() { | |||
std::vector<int> drivers; | |||
#ifndef USE_VST2 | |||
std::vector<RtAudio::Api> apis; | |||
RtAudio::getCompiledApi(apis); | |||
std::vector<int> drivers; | |||
for (RtAudio::Api api : apis) | |||
drivers.push_back((int) api); | |||
// Add fake Bridge driver | |||
drivers.push_back(BRIDGE_DRIVER); | |||
#endif // !USE_VST2 | |||
return drivers; | |||
} | |||
std::string AudioIO::getDriverName(int driver) { | |||
#ifndef USE_VST2 | |||
switch (driver) { | |||
case RtAudio::UNSPECIFIED: return "Unspecified"; | |||
case RtAudio::LINUX_ALSA: return "ALSA"; | |||
case RtAudio::LINUX_PULSE: return "PulseAudio"; | |||
case RtAudio::LINUX_OSS: return "OSS"; | |||
case RtAudio::UNIX_JACK: return "JACK"; | |||
case RtAudio::MACOSX_CORE: return "Core Audio"; | |||
case RtAudio::UNSPECIFIED: return "Unspecified"; | |||
case RtAudio::LINUX_ALSA: return "ALSA"; | |||
case RtAudio::LINUX_PULSE: return "PulseAudio"; | |||
case RtAudio::LINUX_OSS: return "OSS"; | |||
case RtAudio::UNIX_JACK: return "JACK"; | |||
case RtAudio::MACOSX_CORE: return "Core Audio"; | |||
case RtAudio::WINDOWS_WASAPI: return "WASAPI"; | |||
case RtAudio::WINDOWS_ASIO: return "ASIO"; | |||
case RtAudio::WINDOWS_DS: return "DirectSound"; | |||
case RtAudio::RTAUDIO_DUMMY: return "Dummy Audio"; | |||
case BRIDGE_DRIVER: return "Bridge"; | |||
case RtAudio::WINDOWS_ASIO: return "ASIO"; | |||
case RtAudio::WINDOWS_DS: return "DirectSound"; | |||
case RtAudio::RTAUDIO_DUMMY: return "Dummy Audio"; | |||
case BRIDGE_DRIVER: return "Bridge"; | |||
default: return "Unknown"; | |||
} | |||
#else | |||
return "VST"; | |||
#endif // !USE_VST2 | |||
} | |||
void AudioIO::setDriver(int driver) { | |||
// Close device | |||
setDevice(-1, 0); | |||
#ifndef USE_VST2 | |||
// Close driver | |||
if (rtAudio) { | |||
delete rtAudio; | |||
rtAudio = NULL; | |||
} | |||
#endif // !USE_VST2 | |||
this->driver = 0; | |||
#ifndef USE_VST2 | |||
// Open driver | |||
if (driver >= 0) { | |||
rtAudio = new RtAudio((RtAudio::Api) driver); | |||
@@ -61,15 +77,18 @@ void AudioIO::setDriver(int driver) { | |||
else if (driver == BRIDGE_DRIVER) { | |||
this->driver = BRIDGE_DRIVER; | |||
} | |||
#endif // !USE_VST2 | |||
} | |||
int AudioIO::getDeviceCount() { | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
return rtAudio->getDeviceCount(); | |||
} | |||
else if (driver == BRIDGE_DRIVER) { | |||
return BRIDGE_NUM_PORTS; | |||
} | |||
#endif // !USE_VST2 | |||
return 0; | |||
} | |||
@@ -77,6 +96,7 @@ bool AudioIO::getDeviceInfo(int device, RtAudio::DeviceInfo *deviceInfo) { | |||
if (!deviceInfo) | |||
return false; | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
if (device == this->device) { | |||
*deviceInfo = this->deviceInfo; | |||
@@ -92,6 +112,7 @@ bool AudioIO::getDeviceInfo(int device, RtAudio::DeviceInfo *deviceInfo) { | |||
} | |||
} | |||
} | |||
#endif // !USE_VST2 | |||
return false; | |||
} | |||
@@ -100,6 +121,7 @@ int AudioIO::getDeviceChannels(int device) { | |||
if (device < 0) | |||
return 0; | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
RtAudio::DeviceInfo deviceInfo; | |||
if (getDeviceInfo(device, &deviceInfo)) | |||
@@ -108,6 +130,8 @@ int AudioIO::getDeviceChannels(int device) { | |||
else if (driver == BRIDGE_DRIVER) { | |||
return max(BRIDGE_OUTPUTS, BRIDGE_INPUTS); | |||
} | |||
#endif // !USE_VST2 | |||
return 0; | |||
} | |||
@@ -115,6 +139,7 @@ std::string AudioIO::getDeviceName(int device) { | |||
if (device < 0) | |||
return ""; | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
RtAudio::DeviceInfo deviceInfo; | |||
if (getDeviceInfo(device, &deviceInfo)) | |||
@@ -123,6 +148,8 @@ std::string AudioIO::getDeviceName(int device) { | |||
else if (driver == BRIDGE_DRIVER) { | |||
return stringf("%d", device + 1); | |||
} | |||
#endif // !USE_VST2 | |||
return ""; | |||
} | |||
@@ -130,6 +157,7 @@ std::string AudioIO::getDeviceDetail(int device, int offset) { | |||
if (device < 0) | |||
return ""; | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
RtAudio::DeviceInfo deviceInfo; | |||
if (getDeviceInfo(device, &deviceInfo)) { | |||
@@ -147,6 +175,8 @@ std::string AudioIO::getDeviceDetail(int device, int offset) { | |||
else if (driver == BRIDGE_DRIVER) { | |||
return stringf("Port %d", device + 1); | |||
} | |||
#endif // !USE_VST2 | |||
return ""; | |||
} | |||
@@ -158,6 +188,7 @@ void AudioIO::setDevice(int device, int offset) { | |||
} | |||
std::vector<int> AudioIO::getSampleRates() { | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
try { | |||
RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(device); | |||
@@ -168,6 +199,7 @@ std::vector<int> AudioIO::getSampleRates() { | |||
warn("Failed to query RtAudio device: %s", e.what()); | |||
} | |||
} | |||
#endif // !USE_VST2 | |||
return {}; | |||
} | |||
@@ -180,10 +212,14 @@ void AudioIO::setSampleRate(int sampleRate) { | |||
} | |||
std::vector<int> AudioIO::getBlockSizes() { | |||
#ifdef USE_VST2 | |||
return {}; | |||
#else | |||
if (rtAudio) { | |||
return {64, 128, 256, 512, 1024, 2048, 4096}; | |||
} | |||
return {}; | |||
#endif | |||
} | |||
void AudioIO::setBlockSize(int blockSize) { | |||
@@ -201,17 +237,20 @@ void AudioIO::setChannels(int numOutputs, int numInputs) { | |||
} | |||
#ifndef USE_VST2 | |||
static int rtCallback(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData) { | |||
AudioIO *audioIO = (AudioIO*) userData; | |||
assert(audioIO); | |||
audioIO->processStream((const float *) inputBuffer, (float *) outputBuffer, nFrames); | |||
return 0; | |||
} | |||
#endif // !USE_VST2 | |||
void AudioIO::openStream() { | |||
if (device < 0) | |||
return; | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
// Open new device | |||
try { | |||
@@ -283,11 +322,13 @@ void AudioIO::openStream() { | |||
setChannels(BRIDGE_OUTPUTS, BRIDGE_INPUTS); | |||
bridgeAudioSubscribe(device, this); | |||
} | |||
#endif // !USE_VST2 | |||
} | |||
void AudioIO::closeStream() { | |||
setChannels(0, 0); | |||
#ifndef USE_VST2 | |||
if (rtAudio) { | |||
if (rtAudio->isStreamRunning()) { | |||
info("Stopping RtAudio stream %d", device); | |||
@@ -312,6 +353,7 @@ void AudioIO::closeStream() { | |||
else if (driver == BRIDGE_DRIVER) { | |||
bridgeAudioUnsubscribe(device, this); | |||
} | |||
#endif // !USE_VST2 | |||
onCloseStream(); | |||
} | |||
@@ -1,6 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "bridge.hpp" | |||
#include "util/common.hpp" | |||
#include "dsp/ringbuffer.hpp" | |||
#include "global.hpp" | |||
#include <unistd.h> | |||
#if ARCH_WIN | |||
@@ -9,32 +9,17 @@ | |||
#include <xmmintrin.h> | |||
#include <pmmintrin.h> | |||
#include "global_pre.hpp" | |||
#include "engine.hpp" | |||
#include "global.hpp" | |||
namespace rack { | |||
bool gPaused = false; | |||
std::vector<Module*> gModules; | |||
std::vector<Wire*> gWires; | |||
bool gPowerMeter = false; | |||
static bool running = false; | |||
static float sampleRate = 44100.f; | |||
static float sampleTime = 1.f / sampleRate; | |||
static float sampleRateRequested = sampleRate; | |||
#ifdef USE_VST2 | |||
extern void vst2_handle_ui_param (int uniqueParamId, float normValue); | |||
#endif // USE_VST2 | |||
static Module *resetModule = NULL; | |||
static Module *randomizeModule = NULL; | |||
static std::mutex mutex; | |||
static std::thread thread; | |||
static VIPMutex vipMutex; | |||
namespace rack { | |||
// Parameter interpolation | |||
static Module *smoothModule = NULL; | |||
static int smoothParamId; | |||
static float smoothValue; | |||
float Light::getBrightness() { | |||
@@ -47,7 +32,7 @@ void Light::setBrightnessSmooth(float brightness, float frames) { | |||
float v = (brightness > 0.f) ? brightness * brightness : 0.f; | |||
if (v < value) { | |||
// Fade out light with lambda = framerate | |||
value += (v - value) * sampleTime * frames * 60.f; | |||
value += (v - value) * global->engine.sampleTime * frames * 60.f; | |||
} | |||
else { | |||
// Immediately illuminate light | |||
@@ -63,66 +48,43 @@ void Wire::step() { | |||
void engineInit() { | |||
engineSetSampleRate(44100.0); | |||
} | |||
void engineDestroy() { | |||
// Make sure there are no wires or modules in the rack on destruction. This suggests that a module failed to remove itself before the RackWidget was destroyed. | |||
assert(gWires.empty()); | |||
assert(gModules.empty()); | |||
// Make sure there are no wires or modules in the rack on destruction. This suggests that a module failed to remove itself before the WINDOW was destroyed. | |||
assert(global->gWires.empty()); | |||
assert(global->gModules.empty()); | |||
} | |||
static void engineStep() { | |||
// Sample rate | |||
if (sampleRateRequested != sampleRate) { | |||
sampleRate = sampleRateRequested; | |||
sampleTime = 1.f / sampleRate; | |||
for (Module *module : gModules) { | |||
module->onSampleRateChange(); | |||
// Param interpolation | |||
if (global->engine.smoothModule) { | |||
float value = global->engine.smoothModule->params[global->engine.smoothParamId].value; | |||
const float lambda = 60.0; // decay rate is 1 graphics frame | |||
float delta = global->engine.smoothValue - value; | |||
float newValue = value + delta * lambda * global->engine.sampleTime; | |||
if (value == newValue) { | |||
// Snap to actual smooth value if the value doesn't change enough (due to the granularity of floats) | |||
global->engine.smoothModule->params[global->engine.smoothParamId].value = global->engine.smoothValue; | |||
global->engine.smoothModule = NULL; | |||
} | |||
} | |||
// Events | |||
if (resetModule) { | |||
resetModule->onReset(); | |||
resetModule = NULL; | |||
} | |||
if (randomizeModule) { | |||
randomizeModule->onRandomize(); | |||
randomizeModule = NULL; | |||
} | |||
// Param smoothing | |||
{ | |||
Module *localSmoothModule = smoothModule; | |||
int localSmoothParamId = smoothParamId; | |||
float localSmoothValue = smoothValue; | |||
if (localSmoothModule) { | |||
float value = localSmoothModule->params[localSmoothParamId].value; | |||
const float lambda = 60.0; // decay rate is 1 graphics frame | |||
float delta = localSmoothValue - value; | |||
float newValue = value + delta * lambda * sampleTime; | |||
if (value == newValue) { | |||
// Snap to actual smooth value if the value doesn't change enough (due to the granularity of floats) | |||
localSmoothModule->params[localSmoothParamId].value = localSmoothValue; | |||
smoothModule = NULL; | |||
} | |||
else { | |||
localSmoothModule->params[localSmoothParamId].value = newValue; | |||
} | |||
else { | |||
global->engine.smoothModule->params[global->engine.smoothParamId].value = newValue; | |||
} | |||
} | |||
// Step modules | |||
for (Module *module : gModules) { | |||
for (Module *module : global->gModules) { | |||
std::chrono::high_resolution_clock::time_point startTime; | |||
if (gPowerMeter) { | |||
if (global->gPowerMeter) { | |||
startTime = std::chrono::high_resolution_clock::now(); | |||
module->step(); | |||
auto stopTime = std::chrono::high_resolution_clock::now(); | |||
float cpuTime = std::chrono::duration<float>(stopTime - startTime).count() * sampleRate; | |||
module->cpuTime += (cpuTime - module->cpuTime) * sampleTime / 0.5f; | |||
float cpuTime = std::chrono::duration<float>(stopTime - startTime).count() * global->engine.sampleRate; | |||
module->cpuTime += (cpuTime - module->cpuTime) * global->engine.sampleTime / 0.5f; | |||
} | |||
else { | |||
module->step(); | |||
@@ -146,7 +108,7 @@ static void engineStep() { | |||
} | |||
// Step cables by moving their output values to inputs | |||
for (Wire *wire : gWires) { | |||
for (Wire *wire : global->gWires) { | |||
wire->step(); | |||
} | |||
} | |||
@@ -163,17 +125,17 @@ static void engineRun() { | |||
double ahead = 0.0; | |||
auto lastTime = std::chrono::high_resolution_clock::now(); | |||
while (running) { | |||
vipMutex.wait(); | |||
while (global->engine.running) { | |||
global->engine.vipMutex.wait(); | |||
if (!gPaused) { | |||
std::lock_guard<std::mutex> lock(mutex); | |||
if (!global->gPaused) { | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
for (int i = 0; i < mutexSteps; i++) { | |||
engineStep(); | |||
} | |||
} | |||
double stepTime = mutexSteps * sampleTime; | |||
double stepTime = mutexSteps * global->engine.sampleTime; | |||
ahead += stepTime; | |||
auto currTime = std::chrono::high_resolution_clock::now(); | |||
const double aheadFactor = 2.0; | |||
@@ -191,56 +153,52 @@ static void engineRun() { | |||
} | |||
void engineStart() { | |||
running = true; | |||
thread = std::thread(engineRun); | |||
global->engine.running = true; | |||
global->engine.thread = std::thread(engineRun); | |||
} | |||
void engineStop() { | |||
running = false; | |||
thread.join(); | |||
global->engine.running = false; | |||
global->engine.thread.join(); | |||
} | |||
void engineAddModule(Module *module) { | |||
assert(module); | |||
VIPLock vipLock(vipMutex); | |||
std::lock_guard<std::mutex> lock(mutex); | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
// Check that the module is not already added | |||
auto it = std::find(gModules.begin(), gModules.end(), module); | |||
assert(it == gModules.end()); | |||
gModules.push_back(module); | |||
auto it = std::find(global->gModules.begin(), global->gModules.end(), module); | |||
assert(it == global->gModules.end()); | |||
global->gModules.push_back(module); | |||
#ifdef USE_VST2 | |||
module->vst2_unique_param_base_id = global->vst2.next_unique_param_base_id; | |||
global->vst2.next_unique_param_base_id += module->params.size() + 1; | |||
#endif // USE_VST2 | |||
} | |||
void engineRemoveModule(Module *module) { | |||
assert(module); | |||
VIPLock vipLock(vipMutex); | |||
std::lock_guard<std::mutex> lock(mutex); | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
// If a param is being smoothed on this module, stop smoothing it immediately | |||
if (module == smoothModule) { | |||
smoothModule = NULL; | |||
if (module == global->engine.smoothModule) { | |||
global->engine.smoothModule = NULL; | |||
} | |||
// Check that all wires are disconnected | |||
for (Wire *wire : gWires) { | |||
for (Wire *wire : global->gWires) { | |||
assert(wire->outputModule != module); | |||
assert(wire->inputModule != module); | |||
} | |||
// Check that the module actually exists | |||
auto it = std::find(gModules.begin(), gModules.end(), module); | |||
assert(it != gModules.end()); | |||
auto it = std::find(global->gModules.begin(), global->gModules.end(), module); | |||
assert(it != global->gModules.end()); | |||
// Remove it | |||
gModules.erase(it); | |||
} | |||
void engineResetModule(Module *module) { | |||
resetModule = module; | |||
} | |||
void engineRandomizeModule(Module *module) { | |||
randomizeModule = module; | |||
global->gModules.erase(it); | |||
} | |||
static void updateActive() { | |||
// Set everything to inactive | |||
for (Module *module : gModules) { | |||
for (Module *module : global->gModules) { | |||
for (Input &input : module->inputs) { | |||
input.active = false; | |||
} | |||
@@ -249,7 +207,7 @@ static void updateActive() { | |||
} | |||
} | |||
// Set inputs/outputs to active | |||
for (Wire *wire : gWires) { | |||
for (Wire *wire : global->gWires) { | |||
wire->outputModule->outputs[wire->outputId].active = true; | |||
wire->inputModule->inputs[wire->inputId].active = true; | |||
} | |||
@@ -257,59 +215,201 @@ static void updateActive() { | |||
void engineAddWire(Wire *wire) { | |||
assert(wire); | |||
VIPLock vipLock(vipMutex); | |||
std::lock_guard<std::mutex> lock(mutex); | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
// Check wire properties | |||
assert(wire->outputModule); | |||
assert(wire->inputModule); | |||
// Check that the wire is not already added, and that the input is not already used by another cable | |||
for (Wire *wire2 : gWires) { | |||
for (Wire *wire2 : global->gWires) { | |||
assert(wire2 != wire); | |||
assert(!(wire2->inputModule == wire->inputModule && wire2->inputId == wire->inputId)); | |||
} | |||
// Add the wire | |||
gWires.push_back(wire); | |||
global->gWires.push_back(wire); | |||
updateActive(); | |||
} | |||
void engineRemoveWire(Wire *wire) { | |||
assert(wire); | |||
VIPLock vipLock(vipMutex); | |||
std::lock_guard<std::mutex> lock(mutex); | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
// Check that the wire is already added | |||
auto it = std::find(gWires.begin(), gWires.end(), wire); | |||
assert(it != gWires.end()); | |||
auto it = std::find(global->gWires.begin(), global->gWires.end(), wire); | |||
assert(it != global->gWires.end()); | |||
// Set input to 0V | |||
wire->inputModule->inputs[wire->inputId].value = 0.0; | |||
// Remove the wire | |||
gWires.erase(it); | |||
global->gWires.erase(it); | |||
updateActive(); | |||
} | |||
#ifdef USE_VST2 | |||
static int loc_vst2_find_unique_param_by_module_and_paramid(Module *module, int paramId) { | |||
return module->vst2_unique_param_base_id + paramId; | |||
} | |||
static bool loc_vst2_find_module_and_paramid_by_unique_paramid(int uniqueParamId, Module**retModule, int *retParamId) { | |||
if(uniqueParamId >= 0) | |||
{ | |||
if(uniqueParamId < VST2_MAX_UNIQUE_PARAM_IDS) | |||
{ | |||
// (todo) speed this up with a hashtable | |||
for(Module *module : global->gModules) { | |||
if( (uniqueParamId >= module->vst2_unique_param_base_id) && | |||
(uniqueParamId < (module->vst2_unique_param_base_id + module->params.size())) | |||
) | |||
{ | |||
*retParamId = (uniqueParamId - module->vst2_unique_param_base_id); | |||
*retModule = module; | |||
return true; | |||
} | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
#endif // USE_VST2 | |||
#ifdef USE_VST2 | |||
void engineSetParam(Module *module, int paramId, float value, bool bVSTAutomate) { | |||
#else | |||
void engineSetParam(Module *module, int paramId, float value) { | |||
#endif | |||
if(module->params[paramId].value == value) | |||
return; | |||
module->params[paramId].value = value; | |||
#ifdef USE_VST2 | |||
if(bVSTAutomate && !global->vst2.b_patch_loading) | |||
{ | |||
// (note) [bsp] this is usually called from the UI thread (see ParamWidget.cpp) | |||
// (note) [bsp] VST requires all parameters to be in the normalized 0..1 range | |||
// (note) [bsp] VCV Rack parameters however are arbitrary floats | |||
// (note) [bsp] this scale+bias hack should work for most parameters, though | |||
// (note) [bsp] => automation curves will look a bit strange, though | |||
// (note) [bsp] => this may potentially crash modules which cannot deal with params outside the expected range | |||
// (todo) add min/max query methods to each module | |||
float normValue = value / 2.0f; | |||
normValue += 0.5f; | |||
// printf("xxx vcvrack: paramId=%d value=%f (=> %f)\n", paramId, value, normValue); | |||
int uniqueParamId = loc_vst2_find_unique_param_by_module_and_paramid(module, paramId); | |||
if(-1 != uniqueParamId) | |||
{ | |||
// Call host audioMasterAutomate | |||
vst2_handle_ui_param(uniqueParamId, normValue); | |||
} | |||
} | |||
#endif // USE_VST2 | |||
} | |||
#ifdef USE_VST2 | |||
} | |||
using namespace rack; | |||
void vst2_queue_param(int uniqueParamId, float normValue) { | |||
// Called from any thread via setParameter() | |||
// (note) protected by caller mutex | |||
VST2QueuedParam qp; | |||
qp.unique_id = uniqueParamId; | |||
qp.norm_value = normValue; | |||
global->vst2.queued_params.push_back(qp); | |||
} | |||
void vst2_handle_queued_params(void) { | |||
// Called in processReplacing() | |||
// (note) protected by caller mutex | |||
// vector<VST2QueuedParam>::iterator it; | |||
// for(it = global->vst2.queued_params.begin(); it != global->vst2.queued_params.end(); it++) | |||
for(VST2QueuedParam qp : global->vst2.queued_params) | |||
{ | |||
Module *module; | |||
int paramId; | |||
if(loc_vst2_find_module_and_paramid_by_unique_paramid(qp.unique_id, &module, ¶mId)) | |||
{ | |||
float value = qp.norm_value - 0.5f; | |||
value *= 2.0f; | |||
engineSetParam(module, paramId, value, false/*bVSTAutomate*/); | |||
} | |||
} | |||
global->vst2.queued_params.clear(); | |||
} | |||
float vst2_get_param(int uniqueParamId) { | |||
Module *module; | |||
int paramId; | |||
if(loc_vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, ¶mId)) | |||
{ | |||
if(sUI(paramId) < sUI(module->params.size())) // paranoia | |||
{ | |||
return module->params[paramId].value; | |||
} | |||
} | |||
return 0.0f; | |||
} | |||
void vst2_get_param_name (int uniqueParamId, char *s, int sMaxLen) { | |||
Module *module; | |||
int paramId; | |||
if(loc_vst2_find_module_and_paramid_by_unique_paramid(uniqueParamId, &module, ¶mId)) | |||
{ | |||
if(sUI(paramId) < sUI(module->params.size())) // paranoia | |||
{ | |||
// (note) VCV params do not have names | |||
::snprintf(s, sMaxLen, "%4d: <param>", uniqueParamId); | |||
return; | |||
} | |||
} | |||
::snprintf(s, sMaxLen, "%4d: -", uniqueParamId); | |||
} | |||
namespace rack { | |||
#endif // USE_VST2 | |||
void engineSetParamSmooth(Module *module, int paramId, float value) { | |||
// If another param is being smoothed, jump value | |||
if (smoothModule && !(smoothModule == module && smoothParamId == paramId)) { | |||
smoothModule->params[smoothParamId].value = smoothValue; | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
// Since only one param can be smoothed at a time, if another param is currently being smoothed, skip to its final state | |||
if (global->engine.smoothModule && !(global->engine.smoothModule == module && global->engine.smoothParamId == paramId)) { | |||
global->engine.smoothModule->params[global->engine.smoothParamId].value = global->engine.smoothValue; | |||
} | |||
smoothParamId = paramId; | |||
smoothValue = value; | |||
smoothModule = module; | |||
global->engine.smoothModule = module; | |||
global->engine.smoothParamId = paramId; | |||
global->engine.smoothValue = value; | |||
} | |||
void engineSetSampleRate(float newSampleRate) { | |||
sampleRateRequested = newSampleRate; | |||
VIPLock vipLock(global->engine.vipMutex); | |||
std::lock_guard<std::mutex> lock(global->engine.mutex); | |||
global->engine.sampleRate = newSampleRate; | |||
global->engine.sampleTime = 1.0 / global->engine.sampleRate; | |||
// onSampleRateChange | |||
for (Module *module : global->gModules) { | |||
module->onSampleRateChange(); | |||
} | |||
} | |||
float engineGetSampleRate() { | |||
return sampleRate; | |||
return global->engine.sampleRate; | |||
} | |||
float engineGetSampleTime() { | |||
return sampleTime; | |||
return global->engine.sampleTime; | |||
} | |||
} // namespace rack | |||
#ifdef USE_VST2 | |||
using namespace rack; | |||
void vst2_set_samplerate(sF32 _rate) { | |||
rack::engineSetSampleRate(_rate); | |||
} | |||
void vst2_engine_process(float *const*_in, float **_out, unsigned int _numFrames) { | |||
global->vst2.inputs = _in; | |||
global->vst2.outputs = _out; | |||
for(global->vst2.frame_idx = 0u; global->vst2.frame_idx < _numFrames; global->vst2.frame_idx++) | |||
{ | |||
engineStep(); | |||
} | |||
} | |||
#endif // USE_VST2 |
@@ -1,3 +1,4 @@ | |||
#ifndef USE_VST2 | |||
#include "gamepad.hpp" | |||
#include <GLFW/glfw3.h> | |||
@@ -113,3 +114,4 @@ void gamepadStep() { | |||
} // namespace rack | |||
#endif // USE_VST2 |
@@ -1,12 +1,13 @@ | |||
#include "global_pre.hpp" | |||
#include "keyboard.hpp" | |||
#include <GLFW/glfw3.h> | |||
#include "global.hpp" | |||
namespace rack { | |||
static const int KEYBOARD_DRIVER = -11; | |||
static KeyboardDriver *driver = NULL; | |||
void KeyboardInputDevice::onKeyPress(int key) { | |||
@@ -119,20 +120,20 @@ void KeyboardDriver::unsubscribeInputDevice(int deviceId, MidiInput *midiInput) | |||
void keyboardInit() { | |||
driver = new KeyboardDriver(); | |||
midiDriverAdd(KEYBOARD_DRIVER, driver); | |||
global->keyboard.driver = new KeyboardDriver(); | |||
midiDriverAdd(KEYBOARD_DRIVER, global->keyboard.driver); | |||
} | |||
void keyboardPress(int key) { | |||
if (!driver) | |||
if (!global->keyboard.driver) | |||
return; | |||
driver->device.onKeyPress(key); | |||
global->keyboard.driver->device.onKeyPress(key); | |||
} | |||
void keyboardRelease(int key) { | |||
if (!driver) | |||
if (!global->keyboard.driver) | |||
return; | |||
driver->device.onKeyRelease(key); | |||
global->keyboard.driver->device.onKeyRelease(key); | |||
} | |||
@@ -1,3 +1,4 @@ | |||
#include "global_pre.hpp" | |||
#include "util/common.hpp" | |||
#include "engine.hpp" | |||
#include "window.hpp" | |||
@@ -8,21 +9,159 @@ | |||
#include "bridge.hpp" | |||
#include "midi.hpp" | |||
#include "rtmidi.hpp" | |||
#include "vstmidi.hpp" | |||
#include "keyboard.hpp" | |||
#include "gamepad.hpp" | |||
#include "util/color.hpp" | |||
#include "osdialog.h" | |||
#ifdef YAC_POSIX | |||
#include <unistd.h> | |||
#endif | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
using namespace rack; | |||
/*__declspec(dllexport) won't link*/ YAC_TLS rack::Global *rack::global; | |||
/*__declspec(dllexport) won't link*/ YAC_TLS rack::GlobalUI *rack::global_ui; | |||
#ifdef USE_VST2 | |||
int vst2_init(int argc, char* argv[]) { | |||
bool devMode = false; | |||
std::string patchFile; | |||
#if 0 | |||
// Parse command line arguments | |||
int c; | |||
opterr = 0; | |||
while ((c = getopt(argc, argv, "d")) != -1) { | |||
switch (c) { | |||
case 'd': { | |||
devMode = true; | |||
} break; | |||
default: break; | |||
} | |||
} | |||
if (optind < argc) { | |||
patchFile = argv[optind]; | |||
} | |||
#endif | |||
// Initialize environment | |||
randomInit(); | |||
assetInit(devMode); | |||
loggerInit(devMode); | |||
// Log environment | |||
info("%s %s", global_ui->app.gApplicationName.c_str(), global_ui->app.gApplicationVersion.c_str()); | |||
if (devMode) | |||
info("Development mode"); | |||
info("Global directory: %s", assetGlobal("").c_str()); | |||
info("Local directory: %s", assetLocal("").c_str()); | |||
// Initialize app | |||
pluginInit(devMode); | |||
engineInit(); | |||
#ifndef USE_VST2 | |||
rtmidiInit(); | |||
bridgeInit(); | |||
#endif // USE_VST2 | |||
vstmidiInit(); | |||
keyboardInit(); | |||
#ifndef USE_VST2 | |||
gamepadInit(); | |||
windowInit(); // must be done in vst2 ui thread | |||
#endif // USE_VST2 | |||
appInit(devMode); | |||
#if 0 | |||
if (patchFile.empty()) { | |||
std::string oldLastPath = global_ui->app.gRackWidget->lastPath; | |||
// To prevent launch crashes, if Rack crashes between now and 15 seconds from now, the "skipAutosaveOnLaunch" property will remain in settings.json, so that in the next launch, the broken autosave will not be loaded. | |||
bool oldSkipAutosaveOnLaunch = global->settings.gSkipAutosaveOnLaunch; | |||
global->settings.gSkipAutosaveOnLaunch = true; | |||
settingsSave(assetLocal("settings.json")); | |||
global->settings.gSkipAutosaveOnLaunch = false; | |||
if (oldSkipAutosaveOnLaunch && osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, "Rack has recovered from a crash, possibly caused by a faulty module in your patch. Would you like to clear your patch and start over?")) { | |||
// Do nothing. Empty patch is already loaded. | |||
} | |||
else { | |||
// Load autosave | |||
global_ui->app.gRackWidget->loadPatch(assetLocal("autosave.vcv")); | |||
} | |||
global_ui->app.gRackWidget->lastPath = oldLastPath; | |||
} | |||
else { | |||
// Load patch | |||
global_ui->app.gRackWidget->loadPatch(patchFile); | |||
} | |||
#endif | |||
// // engineStart(); // starts bg thread for audio rendering | |||
return 0; | |||
} | |||
void vst2_editor_create(void) { | |||
windowInit(); | |||
// settingsLoad(assetLocal("settings.json")); | |||
glfwHideWindow(rack::global_ui->window.gWindow); | |||
} | |||
void vst2_editor_destroy(void) { | |||
windowDestroy(); | |||
} | |||
void vst2_editor_loop(void) { | |||
windowRun(); | |||
} | |||
void vst2_exit(void) { | |||
// Destroy namespaces | |||
// // engineStop(); | |||
printf("xxx vst2_exit 1\n"); | |||
// global_ui->app.gRackWidget->savePatch(assetLocal("autosave.vcv")); | |||
// settingsSave(assetLocal("settings.json")); | |||
printf("xxx vst2_exit 2\n"); | |||
#if 0 // (note) setting this to 1 seems to work fine (and it fixes the obvious mem leaks) | |||
appDestroy(); | |||
printf("xxx vst2_exit 3\n"); | |||
#ifndef USE_VST2 | |||
windowDestroy(); | |||
bridgeDestroy(); | |||
#endif // USE_VST2 | |||
printf("xxx vst2_exit 4\n"); | |||
engineDestroy(); | |||
printf("xxx vst2_exit 5\n"); | |||
#endif | |||
printf("xxx vst2_exit destroy midi\n"); | |||
midiDestroy(); | |||
printf("xxx vst2_exit destroy midi done\n"); | |||
#if 0 | |||
printf("xxx vst2_exit 6\n"); | |||
pluginDestroy(); | |||
printf("xxx vst2_exit 7\n"); | |||
loggerDestroy(); | |||
#endif | |||
printf("xxx vst2_exit 8 (leave)\n"); | |||
} | |||
#else | |||
static rack::Global loc_global; | |||
static rack::GlobalUI loc_global_ui; | |||
int main(int argc, char* argv[]) { | |||
bool devMode = false; | |||
std::string patchFile; | |||
loc_global.init(); | |||
loc_global_ui.init(); | |||
rack::global = &loc_global; | |||
rack::global_ui = &loc_global_ui; | |||
// Parse command line arguments | |||
int c; | |||
opterr = 0; | |||
@@ -44,7 +183,7 @@ int main(int argc, char* argv[]) { | |||
loggerInit(devMode); | |||
// Log environment | |||
info("%s %s", gApplicationName.c_str(), gApplicationVersion.c_str()); | |||
info("%s %s", global_ui->app.gApplicationName.c_str(), global_ui->app.gApplicationVersion.c_str()); | |||
if (devMode) | |||
info("Development mode"); | |||
info("Global directory: %s", assetGlobal("").c_str()); | |||
@@ -62,24 +201,24 @@ int main(int argc, char* argv[]) { | |||
settingsLoad(assetLocal("settings.json")); | |||
if (patchFile.empty()) { | |||
std::string oldLastPath = global_ui->app.gRackWidget->lastPath; | |||
// To prevent launch crashes, if Rack crashes between now and 15 seconds from now, the "skipAutosaveOnLaunch" property will remain in settings.json, so that in the next launch, the broken autosave will not be loaded. | |||
bool oldSkipAutosaveOnLaunch = gSkipAutosaveOnLaunch; | |||
gSkipAutosaveOnLaunch = true; | |||
bool oldSkipAutosaveOnLaunch = global->settings.gSkipAutosaveOnLaunch; | |||
global->settings.gSkipAutosaveOnLaunch = true; | |||
settingsSave(assetLocal("settings.json")); | |||
gSkipAutosaveOnLaunch = false; | |||
if (oldSkipAutosaveOnLaunch && osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, "Rack has recovered from a crash, possibly caused by a faulty module in your patch. Clear your patch and start over?")) { | |||
gRackWidget->lastPath = ""; | |||
global->settings.gSkipAutosaveOnLaunch = false; | |||
if (oldSkipAutosaveOnLaunch && osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, "Rack has recovered from a crash, possibly caused by a faulty module in your patch. Would you like to clear your patch and start over?")) { | |||
// Do nothing. Empty patch is already loaded. | |||
} | |||
else { | |||
// Load autosave | |||
std::string oldLastPath = gRackWidget->lastPath; | |||
gRackWidget->load(assetLocal("autosave.vcv")); | |||
gRackWidget->lastPath = oldLastPath; | |||
global_ui->app.gRackWidget->loadPatch(assetLocal("autosave.vcv")); | |||
} | |||
global_ui->app.gRackWidget->lastPath = oldLastPath; | |||
} | |||
else { | |||
// Load patch | |||
gRackWidget->load(patchFile); | |||
global_ui->app.gRackWidget->loadPatch(patchFile); | |||
} | |||
engineStart(); | |||
@@ -87,7 +226,7 @@ int main(int argc, char* argv[]) { | |||
engineStop(); | |||
// Destroy namespaces | |||
gRackWidget->save(assetLocal("autosave.vcv")); | |||
global_ui->app.gRackWidget->savePatch(assetLocal("autosave.vcv")); | |||
settingsSave(assetLocal("settings.json")); | |||
appDestroy(); | |||
windowDestroy(); | |||
@@ -99,3 +238,4 @@ int main(int argc, char* argv[]) { | |||
return 0; | |||
} | |||
#endif // USE_VST2 |
@@ -1,17 +1,15 @@ | |||
#include "global_pre.hpp" | |||
#include "midi.hpp" | |||
#include "rtmidi.hpp" | |||
#include "bridge.hpp" | |||
#include "gamepad.hpp" | |||
#include "keyboard.hpp" | |||
#include "global.hpp" | |||
namespace rack { | |||
static std::vector<int> driverIds; | |||
static std::map<int, MidiDriver*> drivers; | |||
//////////////////// | |||
// MidiDevice | |||
//////////////////// | |||
@@ -48,12 +46,12 @@ MidiIO::~MidiIO() { | |||
} | |||
std::vector<int> MidiIO::getDriverIds() { | |||
return driverIds; | |||
return global->midi.driverIds; | |||
} | |||
std::string MidiIO::getDriverName(int driverId) { | |||
auto it = drivers.find(driverId); | |||
if (it == drivers.end()) | |||
auto it = global->midi.drivers.find(driverId); | |||
if (it == global->midi.drivers.end()) | |||
return ""; | |||
return it->second->getName(); | |||
@@ -68,8 +66,8 @@ void MidiIO::setDriverId(int driverId) { | |||
this->driverId = -1; | |||
// Set driver | |||
auto it = drivers.find(driverId); | |||
if (it != drivers.end()) { | |||
auto it = global->midi.drivers.find(driverId); | |||
if (it != global->midi.drivers.end()) { | |||
driver = it->second; | |||
this->driverId = driverId; | |||
} | |||
@@ -119,8 +117,8 @@ void MidiIO::fromJson(json_t *rootJ) { | |||
//////////////////// | |||
MidiInput::MidiInput() { | |||
if (driverIds.size() >= 1) { | |||
setDriverId(driverIds[0]); | |||
if (global->midi.driverIds.size() >= 1) { | |||
setDriverId(global->midi.driverIds[0]); | |||
} | |||
} | |||
@@ -199,17 +197,17 @@ void MidiOutput::setDeviceId(int deviceId) { | |||
//////////////////// | |||
void midiDestroy() { | |||
driverIds.clear(); | |||
for (auto &pair : drivers) { | |||
global->midi.driverIds.clear(); | |||
for (auto &pair : global->midi.drivers) { | |||
delete pair.second; | |||
} | |||
drivers.clear(); | |||
global->midi.drivers.clear(); | |||
} | |||
void midiDriverAdd(int driverId, MidiDriver *driver) { | |||
assert(driver); | |||
driverIds.push_back(driverId); | |||
drivers[driverId] = driver; | |||
global->midi.driverIds.push_back(driverId); | |||
global->midi.drivers[driverId] = driver; | |||
} | |||
@@ -1,4 +1,6 @@ | |||
#include "global_pre.hpp" | |||
#include "plugin.hpp" | |||
#include "Core/Core.hpp" | |||
#include "app.hpp" | |||
#include "asset.hpp" | |||
#include "util/request.hpp" | |||
@@ -7,16 +9,26 @@ | |||
#include <stdio.h> | |||
#include <assert.h> | |||
#include <string.h> | |||
#ifdef YAC_POSIX | |||
#include <unistd.h> | |||
#include <sys/types.h> | |||
#include <sys/stat.h> | |||
#include <sys/param.h> // for MAXPATHLEN | |||
#include <fcntl.h> | |||
#include <dirent.h> | |||
#endif | |||
#include <thread> | |||
#include <stdexcept> | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
#ifndef USE_VST2 | |||
#define ZIP_STATIC | |||
#include <zip.h> | |||
#endif // USE_VST2 | |||
#include <jansson.h> | |||
#if ARCH_WIN | |||
@@ -26,20 +38,16 @@ | |||
#else | |||
#include <dlfcn.h> | |||
#endif | |||
#include <dirent.h> | |||
namespace rack { | |||
std::list<Plugin*> gPlugins; | |||
std::string gToken; | |||
typedef void (*InitCallback)(Plugin *); | |||
static bool isDownloading = false; | |||
static float downloadProgress = 0.0; | |||
static std::string downloadName; | |||
static std::string loginStatus; | |||
#ifdef USE_VST2 | |||
static void vst2_load_static_rack_plugins(void); | |||
#endif // USE_VST2 | |||
Plugin::~Plugin() { | |||
@@ -77,7 +85,13 @@ static bool loadPlugin(std::string path) { | |||
// Load dynamic/shared library | |||
#if ARCH_WIN | |||
SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS); | |||
// #ifdef USE_VST2 | |||
// std::wstring libNameW = std::wstring(libraryFilename.begin(), libraryFilename.end()); | |||
// HINSTANCE handle = LoadLibraryW(libNameW.c_str()); | |||
// #else | |||
HINSTANCE handle = LoadLibrary(libraryFilename.c_str()); | |||
// #endif | |||
SetErrorMode(0); | |||
if (!handle) { | |||
int error = GetLastError(); | |||
@@ -93,7 +107,6 @@ static bool loadPlugin(std::string path) { | |||
#endif | |||
// Call plugin's init() function | |||
typedef void (*InitCallback)(Plugin *); | |||
InitCallback initCallback; | |||
#if ARCH_WIN | |||
initCallback = (InitCallback) GetProcAddress(handle, "init"); | |||
@@ -121,13 +134,14 @@ static bool loadPlugin(std::string path) { | |||
} | |||
// Add plugin to list | |||
gPlugins.push_back(plugin); | |||
global->plugin.gPlugins.push_back(plugin); | |||
info("Loaded plugin %s %s from %s", plugin->slug.c_str(), plugin->version.c_str(), libraryFilename.c_str()); | |||
return true; | |||
} | |||
static bool syncPlugin(std::string slug, json_t *manifestJ, bool dryRun) { | |||
#ifndef USE_VST2 | |||
// Check that "status" is "available" | |||
json_t *statusJ = json_object_get(manifestJ, "status"); | |||
if (!statusJ) { | |||
@@ -170,15 +184,18 @@ static bool syncPlugin(std::string slug, json_t *manifestJ, bool dryRun) { | |||
#endif | |||
std::string downloadUrl; | |||
downloadUrl = gApiHost; | |||
downloadUrl = global_ui->app.gApiHost; | |||
downloadUrl += "/download"; | |||
if (dryRun) { | |||
downloadUrl += "/available"; | |||
} | |||
downloadUrl += "?token=" + requestEscape(gToken); | |||
downloadUrl += "?token=" + requestEscape(global->plugin.gToken); | |||
downloadUrl += "&slug=" + requestEscape(slug); | |||
downloadUrl += "&version=" + requestEscape(latestVersion); | |||
downloadUrl += "&arch=" + requestEscape(arch); | |||
#ifdef USE_VST2 | |||
downloadUrl += "&format=vst2"; | |||
#endif // USE_VST2 | |||
if (dryRun) { | |||
// Check if available | |||
@@ -194,20 +211,23 @@ static bool syncPlugin(std::string slug, json_t *manifestJ, bool dryRun) { | |||
return json_boolean_value(successJ); | |||
} | |||
else { | |||
downloadName = name; | |||
downloadProgress = 0.0; | |||
global->plugin.downloadName = name; | |||
global->plugin.downloadProgress = 0.0; | |||
info("Downloading plugin %s %s %s", slug.c_str(), latestVersion.c_str(), arch.c_str()); | |||
// Download zip | |||
std::string pluginDest = assetLocal("plugins/" + slug + ".zip"); | |||
if (!requestDownload(downloadUrl, pluginDest, &downloadProgress)) { | |||
if (!requestDownload(downloadUrl, pluginDest, &global->plugin.downloadProgress)) { | |||
warn("Plugin %s download was unsuccessful", slug.c_str()); | |||
return false; | |||
} | |||
downloadName = ""; | |||
global->plugin.downloadName = ""; | |||
return true; | |||
} | |||
#else | |||
return false; | |||
#endif // USE_VST2 | |||
} | |||
static void loadPlugins(std::string path) { | |||
@@ -225,6 +245,7 @@ static void loadPlugins(std::string path) { | |||
} | |||
} | |||
#ifndef USE_VST2 | |||
/** Returns 0 if successful */ | |||
static int extractZipHandle(zip_t *za, const char *dir) { | |||
int err; | |||
@@ -277,7 +298,9 @@ static int extractZipHandle(zip_t *za, const char *dir) { | |||
} | |||
return 0; | |||
} | |||
#endif // USE_VST2 | |||
#ifndef USE_VST2 | |||
/** Returns 0 if successful */ | |||
static int extractZip(const char *filename, const char *path) { | |||
int err; | |||
@@ -293,7 +316,9 @@ static int extractZip(const char *filename, const char *path) { | |||
err = extractZipHandle(za, path); | |||
return err; | |||
} | |||
#endif // USE_VST2 | |||
#ifndef USE_VST2 | |||
static void extractPackages(std::string path) { | |||
std::string message; | |||
@@ -316,6 +341,7 @@ static void extractPackages(std::string path) { | |||
osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str()); | |||
} | |||
} | |||
#endif // USE_VST2 | |||
//////////////////// | |||
// public API | |||
@@ -327,9 +353,10 @@ void pluginInit(bool devMode) { | |||
// Load core | |||
// This function is defined in core.cpp | |||
Plugin *corePlugin = new Plugin(); | |||
init(corePlugin); | |||
gPlugins.push_back(corePlugin); | |||
init_plugin_Core(corePlugin); | |||
global->plugin.gPlugins.push_back(corePlugin); | |||
#ifndef USE_VST2 | |||
// Get local plugins directory | |||
std::string localPlugins = assetLocal("plugins"); | |||
mkdir(localPlugins.c_str(), 0755); | |||
@@ -345,12 +372,19 @@ void pluginInit(bool devMode) { | |||
} | |||
// Extract packages and load plugins | |||
#ifndef USE_VST2 | |||
extractPackages(localPlugins); | |||
#endif // USE_VST2 | |||
loadPlugins(localPlugins); | |||
#else | |||
vst2_load_static_rack_plugins(); | |||
#endif // USE_VST2 | |||
} | |||
void pluginDestroy() { | |||
for (Plugin *plugin : gPlugins) { | |||
#ifndef USE_VST2 | |||
for (Plugin *plugin : global->plugin.gPlugins) { | |||
// Free library handle | |||
#if ARCH_WIN | |||
if (plugin->handle) | |||
@@ -364,28 +398,30 @@ void pluginDestroy() { | |||
// It might be best to let them leak anyway, because "crash on exit" issues would occur with badly-written plugins. | |||
// delete plugin; | |||
} | |||
gPlugins.clear(); | |||
#endif // USE_VST2 | |||
global->plugin.gPlugins.clear(); | |||
} | |||
bool pluginSync(bool dryRun) { | |||
if (gToken.empty()) | |||
#ifndef USE_VST2 | |||
if (global->plugin.gToken.empty()) | |||
return false; | |||
bool available = false; | |||
if (!dryRun) { | |||
isDownloading = true; | |||
downloadProgress = 0.0; | |||
downloadName = "Updating plugins..."; | |||
global->plugin.isDownloading = true; | |||
global->plugin.downloadProgress = 0.0; | |||
global->plugin.downloadName = "Updating plugins..."; | |||
} | |||
defer({ | |||
isDownloading = false; | |||
global->plugin.isDownloading = false; | |||
}); | |||
// Get user's plugins list | |||
json_t *pluginsReqJ = json_object(); | |||
json_object_set(pluginsReqJ, "token", json_string(gToken.c_str())); | |||
json_t *pluginsResJ = requestJson(METHOD_GET, gApiHost + "/plugins", pluginsReqJ); | |||
json_object_set(pluginsReqJ, "token", json_string(global->plugin.gToken.c_str())); | |||
json_t *pluginsResJ = requestJson(METHOD_GET, global_ui->app.gApiHost + "/plugins", pluginsReqJ); | |||
json_decref(pluginsReqJ); | |||
if (!pluginsResJ) { | |||
warn("Request for user's plugins failed"); | |||
@@ -402,7 +438,7 @@ bool pluginSync(bool dryRun) { | |||
} | |||
// Get community manifests | |||
json_t *manifestsResJ = requestJson(METHOD_GET, gApiHost + "/community/manifests", NULL); | |||
json_t *manifestsResJ = requestJson(METHOD_GET, global_ui->app.gApiHost + "/community/manifests", NULL); | |||
if (!manifestsResJ) { | |||
warn("Request for community manifests failed"); | |||
return false; | |||
@@ -444,35 +480,40 @@ bool pluginSync(bool dryRun) { | |||
} | |||
return available; | |||
#else | |||
return false; | |||
#endif // USE_VST2 | |||
} | |||
void pluginLogIn(std::string email, std::string password) { | |||
#ifndef USE_VST2 | |||
json_t *reqJ = json_object(); | |||
json_object_set(reqJ, "email", json_string(email.c_str())); | |||
json_object_set(reqJ, "password", json_string(password.c_str())); | |||
json_t *resJ = requestJson(METHOD_POST, gApiHost + "/token", reqJ); | |||
json_t *resJ = requestJson(METHOD_POST, global_ui->app.gApiHost + "/token", reqJ); | |||
json_decref(reqJ); | |||
if (resJ) { | |||
json_t *errorJ = json_object_get(resJ, "error"); | |||
if (errorJ) { | |||
const char *errorStr = json_string_value(errorJ); | |||
loginStatus = errorStr; | |||
global->plugin.loginStatus = errorStr; | |||
} | |||
else { | |||
json_t *tokenJ = json_object_get(resJ, "token"); | |||
if (tokenJ) { | |||
const char *tokenStr = json_string_value(tokenJ); | |||
gToken = tokenStr; | |||
loginStatus = ""; | |||
global->plugin.gToken = tokenStr; | |||
global->plugin.loginStatus = ""; | |||
} | |||
} | |||
json_decref(resJ); | |||
} | |||
#endif | |||
} | |||
void pluginLogOut() { | |||
gToken = ""; | |||
global->plugin.gToken = ""; | |||
} | |||
void pluginCancelDownload() { | |||
@@ -480,27 +521,28 @@ void pluginCancelDownload() { | |||
} | |||
bool pluginIsLoggedIn() { | |||
return gToken != ""; | |||
return global->plugin.gToken != ""; | |||
} | |||
bool pluginIsDownloading() { | |||
return isDownloading; | |||
return global->plugin.isDownloading; | |||
} | |||
float pluginGetDownloadProgress() { | |||
return downloadProgress; | |||
return global->plugin.downloadProgress; | |||
} | |||
std::string pluginGetDownloadName() { | |||
return downloadName; | |||
return global->plugin.downloadName; | |||
} | |||
std::string pluginGetLoginStatus() { | |||
return loginStatus; | |||
return global->plugin.loginStatus; | |||
} | |||
Plugin *pluginGetPlugin(std::string pluginSlug) { | |||
for (Plugin *plugin : gPlugins) { | |||
for (Plugin *plugin : global->plugin.gPlugins) { | |||
// printf("xxx pluginGetPlugin: find pluginSlug=\"%s\" current=\"%s\"\n", pluginSlug.c_str(), plugin->slug.c_str()); | |||
if (plugin->slug == pluginSlug) { | |||
return plugin; | |||
} | |||
@@ -510,9 +552,11 @@ Plugin *pluginGetPlugin(std::string pluginSlug) { | |||
Model *pluginGetModel(std::string pluginSlug, std::string modelSlug) { | |||
Plugin *plugin = pluginGetPlugin(pluginSlug); | |||
// printf("xxx vstrack_plugin: plugSlug=\"%s\" modelSlug=\"%s\" => plugin=%p\n", pluginSlug.c_str(), modelSlug.c_str(), plugin); | |||
if (plugin) { | |||
for (Model *model : plugin->models) { | |||
if (model->slug == modelSlug) { | |||
// printf("xxx vstrack_plugin: plugSlug=\"%s\" modelSlug=\"%s\" => plugin=%p model=%p\n", pluginSlug.c_str(), modelSlug.c_str(), plugin, model); | |||
return model; | |||
} | |||
} | |||
@@ -521,4 +565,72 @@ Model *pluginGetModel(std::string pluginSlug, std::string modelSlug) { | |||
} | |||
#ifdef USE_VST2 | |||
extern "C" { | |||
extern void init_plugin_AS (rack::Plugin *p); | |||
extern void init_plugin_AudibleInstruments (rack::Plugin *p); | |||
extern void init_plugin_Befaco (rack::Plugin *p); | |||
extern void init_plugin_Bogaudio (rack::Plugin *p); | |||
extern void init_plugin_cf (rack::Plugin *p); | |||
extern void init_plugin_ErraticInstruments (rack::Plugin *p); | |||
extern void init_plugin_ESeries (rack::Plugin *p); | |||
extern void init_plugin_Fundamental (rack::Plugin *p); | |||
extern void init_plugin_HetrickCV (rack::Plugin *p); | |||
extern void init_plugin_Koralfx (rack::Plugin *p); | |||
extern void init_plugin_LindenbergResearch (rack::Plugin *p); | |||
extern void init_plugin_Qwelk (rack::Plugin *p); | |||
extern void init_plugin_SonusModular (rack::Plugin *p); | |||
extern void init_plugin_SubmarineFree (rack::Plugin *p); | |||
extern void init_plugin_Template (rack::Plugin *p); | |||
extern void init_plugin_Valley (rack::Plugin *p); | |||
} | |||
static void vst2_load_static_rack_plugin(const char *_name, InitCallback _initCallback) { | |||
std::string path = assetStaticPlugin(_name); | |||
// Construct and initialize Plugin instance | |||
Plugin *plugin = new Plugin(); | |||
plugin->path = path; | |||
plugin->handle = NULL; | |||
_initCallback(plugin); | |||
#if 0 | |||
// Reject plugin if slug already exists | |||
Plugin *oldPlugin = pluginGetPlugin(plugin->slug); | |||
if (oldPlugin) { | |||
warn("Plugin \"%s\" is already loaded, not attempting to load it again", plugin->slug.c_str()); | |||
// TODO | |||
// Fix memory leak with `plugin` here | |||
return false; | |||
} | |||
#endif | |||
// Add plugin to list | |||
global->plugin.gPlugins.push_back(plugin); | |||
info("vcvrack: Loaded static plugin %s %s", plugin->slug.c_str(), plugin->version.c_str()); | |||
} | |||
void vst2_load_static_rack_plugins(void) { | |||
vst2_load_static_rack_plugin("AS", &init_plugin_AS); | |||
vst2_load_static_rack_plugin("AudibleInstruments", &init_plugin_AudibleInstruments); | |||
vst2_load_static_rack_plugin("Befaco", &init_plugin_Befaco); | |||
vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio); | |||
vst2_load_static_rack_plugin("cf", &init_plugin_cf); | |||
vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments); | |||
vst2_load_static_rack_plugin("ESeries", &init_plugin_ESeries); | |||
vst2_load_static_rack_plugin("Fundamental", &init_plugin_Fundamental); | |||
vst2_load_static_rack_plugin("HetrickCV", &init_plugin_HetrickCV); | |||
vst2_load_static_rack_plugin("Koralfx-Modules", &init_plugin_Koralfx); | |||
vst2_load_static_rack_plugin("LindenbergResearch", &init_plugin_LindenbergResearch); | |||
vst2_load_static_rack_plugin("Qwelk", &init_plugin_Qwelk); | |||
vst2_load_static_rack_plugin("SonusModular", &init_plugin_SonusModular); | |||
vst2_load_static_rack_plugin("SubmarineFree", &init_plugin_SubmarineFree); | |||
vst2_load_static_rack_plugin("Template", &init_plugin_Template); | |||
vst2_load_static_rack_plugin("Valley", &init_plugin_Valley); | |||
} | |||
#endif // USE_VST2 | |||
} // namespace rack |
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "rtmidi.hpp" | |||
#include <map> | |||
#include "global.hpp" | |||
namespace rack { | |||
@@ -1,23 +1,23 @@ | |||
#include "global_pre.hpp" | |||
#include "settings.hpp" | |||
#include "app.hpp" | |||
#include "window.hpp" | |||
#include "engine.hpp" | |||
#include "plugin.hpp" | |||
#include <jansson.h> | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
bool gSkipAutosaveOnLaunch = false; | |||
static json_t *settingsToJson() { | |||
// root | |||
json_t *rootJ = json_object(); | |||
// token | |||
json_t *tokenJ = json_string(gToken.c_str()); | |||
json_t *tokenJ = json_string(global->plugin.gToken.c_str()); | |||
json_object_set_new(rootJ, "token", tokenJ); | |||
if (!windowIsMaximized()) { | |||
@@ -33,22 +33,22 @@ static json_t *settingsToJson() { | |||
} | |||
// opacity | |||
float opacity = gToolbar->wireOpacitySlider->value; | |||
float opacity = global_ui->app.gToolbar->wireOpacitySlider->value; | |||
json_t *opacityJ = json_real(opacity); | |||
json_object_set_new(rootJ, "wireOpacity", opacityJ); | |||
// tension | |||
float tension = gToolbar->wireTensionSlider->value; | |||
float tension = global_ui->app.gToolbar->wireTensionSlider->value; | |||
json_t *tensionJ = json_real(tension); | |||
json_object_set_new(rootJ, "wireTension", tensionJ); | |||
// zoom | |||
float zoom = gRackScene->zoomWidget->zoom; | |||
float zoom = global_ui->app.gRackScene->zoomWidget->zoom; | |||
json_t *zoomJ = json_real(zoom); | |||
json_object_set_new(rootJ, "zoom", zoomJ); | |||
// allowCursorLock | |||
json_t *allowCursorLockJ = json_boolean(gAllowCursorLock); | |||
json_t *allowCursorLockJ = json_boolean(global_ui->window.gAllowCursorLock); | |||
json_object_set_new(rootJ, "allowCursorLock", allowCursorLockJ); | |||
// sampleRate | |||
@@ -56,11 +56,11 @@ static json_t *settingsToJson() { | |||
json_object_set_new(rootJ, "sampleRate", sampleRateJ); | |||
// lastPath | |||
json_t *lastPathJ = json_string(gRackWidget->lastPath.c_str()); | |||
json_t *lastPathJ = json_string(global_ui->app.gRackWidget->lastPath.c_str()); | |||
json_object_set_new(rootJ, "lastPath", lastPathJ); | |||
// skipAutosaveOnLaunch | |||
if (gSkipAutosaveOnLaunch) { | |||
if (global->settings.gSkipAutosaveOnLaunch) { | |||
json_object_set_new(rootJ, "skipAutosaveOnLaunch", json_true()); | |||
} | |||
@@ -68,10 +68,10 @@ static json_t *settingsToJson() { | |||
json_object_set_new(rootJ, "moduleBrowser", appModuleBrowserToJson()); | |||
// powerMeter | |||
json_object_set_new(rootJ, "powerMeter", json_boolean(gPowerMeter)); | |||
json_object_set_new(rootJ, "powerMeter", json_boolean(global->gPowerMeter)); | |||
// checkVersion | |||
json_object_set_new(rootJ, "checkVersion", json_boolean(gCheckVersion)); | |||
json_object_set_new(rootJ, "checkVersion", json_boolean(global_ui->app.gCheckVersion)); | |||
return rootJ; | |||
} | |||
@@ -80,7 +80,7 @@ static void settingsFromJson(json_t *rootJ) { | |||
// token | |||
json_t *tokenJ = json_object_get(rootJ, "token"); | |||
if (tokenJ) | |||
gToken = json_string_value(tokenJ); | |||
global->plugin.gToken = json_string_value(tokenJ); | |||
// windowSize | |||
json_t *windowSizeJ = json_object_get(rootJ, "windowSize"); | |||
@@ -101,24 +101,29 @@ static void settingsFromJson(json_t *rootJ) { | |||
// opacity | |||
json_t *opacityJ = json_object_get(rootJ, "wireOpacity"); | |||
if (opacityJ) | |||
gToolbar->wireOpacitySlider->value = json_number_value(opacityJ); | |||
global_ui->app.gToolbar->wireOpacitySlider->value = json_number_value(opacityJ); | |||
// tension | |||
json_t *tensionJ = json_object_get(rootJ, "wireTension"); | |||
if (tensionJ) | |||
gToolbar->wireTensionSlider->value = json_number_value(tensionJ); | |||
global_ui->app.gToolbar->wireTensionSlider->value = json_number_value(tensionJ); | |||
// zoom | |||
json_t *zoomJ = json_object_get(rootJ, "zoom"); | |||
if (zoomJ) { | |||
gRackScene->zoomWidget->setZoom(clamp((float) json_number_value(zoomJ), 0.25f, 4.0f)); | |||
gToolbar->zoomSlider->setValue(json_number_value(zoomJ) * 100.0); | |||
global_ui->app.gRackScene->zoomWidget->setZoom(clamp((float) json_number_value(zoomJ), 0.25f, 4.0f)); | |||
global_ui->app.gToolbar->zoomSlider->setValue(json_number_value(zoomJ) * 100.0); | |||
} | |||
// allowCursorLock | |||
json_t *allowCursorLockJ = json_object_get(rootJ, "allowCursorLock"); | |||
if (allowCursorLockJ) | |||
gAllowCursorLock = json_is_true(allowCursorLockJ); | |||
{ | |||
global_ui->window.gAllowCursorLock = json_is_true(allowCursorLockJ); | |||
#ifdef USE_VST2 | |||
global_ui->window.gAllowCursorLock = 0; | |||
#endif // USE_VST2 | |||
} | |||
// sampleRate | |||
json_t *sampleRateJ = json_object_get(rootJ, "sampleRate"); | |||
@@ -130,12 +135,12 @@ static void settingsFromJson(json_t *rootJ) { | |||
// lastPath | |||
json_t *lastPathJ = json_object_get(rootJ, "lastPath"); | |||
if (lastPathJ) | |||
gRackWidget->lastPath = json_string_value(lastPathJ); | |||
global_ui->app.gRackWidget->lastPath = json_string_value(lastPathJ); | |||
// skipAutosaveOnLaunch | |||
json_t *skipAutosaveOnLaunchJ = json_object_get(rootJ, "skipAutosaveOnLaunch"); | |||
if (skipAutosaveOnLaunchJ) | |||
gSkipAutosaveOnLaunch = json_boolean_value(skipAutosaveOnLaunchJ); | |||
global->settings.gSkipAutosaveOnLaunch = json_boolean_value(skipAutosaveOnLaunchJ); | |||
// moduleBrowser | |||
json_t *moduleBrowserJ = json_object_get(rootJ, "moduleBrowser"); | |||
@@ -145,12 +150,12 @@ static void settingsFromJson(json_t *rootJ) { | |||
// powerMeter | |||
json_t *powerMeterJ = json_object_get(rootJ, "powerMeter"); | |||
if (powerMeterJ) | |||
gPowerMeter = json_boolean_value(powerMeterJ); | |||
global->gPowerMeter = json_boolean_value(powerMeterJ); | |||
// checkVersion | |||
json_t *checkVersionJ = json_object_get(rootJ, "checkVersion"); | |||
if (checkVersionJ) | |||
gCheckVersion = json_boolean_value(checkVersionJ); | |||
global_ui->app.gCheckVersion = json_boolean_value(checkVersionJ); | |||
} | |||
@@ -4,10 +4,16 @@ | |||
namespace rack { | |||
static bool b_tags_init = false; | |||
std::string gTagNames[NUM_TAGS]; | |||
void tagsInit() { | |||
// (todo) protect with mutex in case of (unlikely) parallel/threaded instantation | |||
if(b_tags_init) | |||
return; | |||
b_tags_init = true; | |||
gTagNames[AMPLIFIER_TAG] = "Amplifier/VCA"; | |||
gTagNames[ATTENUATOR_TAG] = "Attenuator"; | |||
gTagNames[ARPEGGIATOR_TAG] = "Arpeggiator"; | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -10,7 +12,7 @@ namespace rack { | |||
void MenuItem::draw(NVGcontext *vg) { | |||
// Get state | |||
BNDwidgetState state = (gHoveredWidget == this) ? BND_HOVER : BND_DEFAULT; | |||
BNDwidgetState state = (global_ui->widgets.gHoveredWidget == this) ? BND_HOVER : BND_DEFAULT; | |||
Menu *parentMenu = dynamic_cast<Menu*>(parent); | |||
if (parentMenu && parentMenu->activeEntry == this) { | |||
state = BND_ACTIVE; | |||
@@ -28,7 +30,7 @@ void MenuItem::step() { | |||
const float rightPadding = 10.0; | |||
// HACK use gVg from the window. | |||
// All this does is inspect the font, so it shouldn't modify gVg and should work when called from a FramebufferWidget for example. | |||
box.size.x = bndLabelWidth(gVg, -1, text.c_str()) + bndLabelWidth(gVg, -1, rightText.c_str()) + rightPadding; | |||
box.size.x = bndLabelWidth(global_ui->window.gVg, -1, text.c_str()) + bndLabelWidth(global_ui->window.gVg, -1, rightText.c_str()) + rightPadding; | |||
Widget::step(); | |||
} | |||
@@ -58,7 +60,7 @@ void MenuItem::onDragDrop(EventDragDrop &e) { | |||
onAction(eAction); | |||
if (eAction.consumed) { | |||
// deletes `this` | |||
gScene->setOverlay(NULL); | |||
global_ui->ui.gScene->setOverlay(NULL); | |||
} | |||
} | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -13,7 +15,7 @@ void MenuLabel::step() { | |||
// Add 10 more pixels because Retina measurements are sometimes too small | |||
const float rightPadding = 10.0; | |||
// HACK use gVg from the window. | |||
box.size.x = bndLabelWidth(gVg, -1, text.c_str()) + rightPadding; | |||
box.size.x = bndLabelWidth(global_ui->window.gVg, -1, text.c_str()) + rightPadding; | |||
Widget::step(); | |||
} | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -18,7 +20,7 @@ void MenuOverlay::onMouseDown(EventMouseDown &e) { | |||
Widget::onMouseDown(e); | |||
if (!e.consumed) { | |||
// deletes `this` | |||
gScene->setOverlay(NULL); | |||
global_ui->ui.gScene->setOverlay(NULL); | |||
e.consumed = true; | |||
} | |||
} | |||
@@ -26,7 +28,7 @@ void MenuOverlay::onMouseDown(EventMouseDown &e) { | |||
void MenuOverlay::onHoverKey(EventHoverKey &e) { | |||
switch (e.key) { | |||
case GLFW_KEY_ESCAPE: { | |||
gScene->setOverlay(NULL); | |||
global_ui->ui.gScene->setOverlay(NULL); | |||
e.consumed = true; | |||
return; | |||
} break; | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -21,10 +23,10 @@ Menu *Scene::createMenu() { | |||
// Get relative position of the click | |||
MenuOverlay *overlay = new MenuOverlay(); | |||
Menu *menu = new Menu(); | |||
menu->box.pos = gMousePos; | |||
menu->box.pos = global_ui->window.gMousePos; | |||
overlay->addChild(menu); | |||
gScene->setOverlay(overlay); | |||
global_ui->ui.gScene->setOverlay(overlay); | |||
return menu; | |||
} | |||
@@ -1,5 +1,7 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
#include "window.hpp" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -109,7 +111,7 @@ void ScrollWidget::step() { | |||
void ScrollWidget::onMouseMove(EventMouseMove &e) { | |||
// Scroll with arrow keys | |||
if (!gFocusedWidget) { | |||
if (!global_ui->widgets.gFocusedWidget) { | |||
float arrowSpeed = 30.0; | |||
if (windowIsShiftPressed() && windowIsModPressed()) | |||
arrowSpeed /= 16.0; | |||
@@ -118,16 +120,16 @@ void ScrollWidget::onMouseMove(EventMouseMove &e) { | |||
else if (windowIsModPressed()) | |||
arrowSpeed /= 4.0; | |||
if (glfwGetKey(gWindow, GLFW_KEY_LEFT) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT) == GLFW_PRESS) { | |||
offset.x -= arrowSpeed; | |||
} | |||
if (glfwGetKey(gWindow, GLFW_KEY_RIGHT) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT) == GLFW_PRESS) { | |||
offset.x += arrowSpeed; | |||
} | |||
if (glfwGetKey(gWindow, GLFW_KEY_UP) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_UP) == GLFW_PRESS) { | |||
offset.y -= arrowSpeed; | |||
} | |||
if (glfwGetKey(gWindow, GLFW_KEY_DOWN) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_DOWN) == GLFW_PRESS) { | |||
offset.y += arrowSpeed; | |||
} | |||
} | |||
@@ -1,8 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "ui.hpp" | |||
// for gVg | |||
#include "window.hpp" | |||
// for key codes | |||
#include <GLFW/glfw3.h> | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -12,9 +14,9 @@ void TextField::draw(NVGcontext *vg) { | |||
nvgScissor(vg, 0, 0, box.size.x, box.size.y); | |||
BNDwidgetState state; | |||
if (this == gFocusedWidget) | |||
if (this == global_ui->widgets.gFocusedWidget) | |||
state = BND_ACTIVE; | |||
else if (this == gHoveredWidget) | |||
else if (this == global_ui->widgets.gHoveredWidget) | |||
state = BND_HOVER; | |||
else | |||
state = BND_DEFAULT; | |||
@@ -38,7 +40,7 @@ void TextField::onMouseDown(EventMouseDown &e) { | |||
} | |||
void TextField::onMouseMove(EventMouseMove &e) { | |||
if (this == gDraggedWidget) { | |||
if (this == global_ui->widgets.gDraggedWidget) { | |||
int pos = getTextPosition(e.pos); | |||
if (pos != selection) { | |||
cursor = pos; | |||
@@ -125,7 +127,7 @@ void TextField::onKey(EventKey &e) { | |||
} break; | |||
case GLFW_KEY_V: { | |||
if (windowIsModPressed()) { | |||
const char *newText = glfwGetClipboardString(gWindow); | |||
const char *newText = glfwGetClipboardString(global_ui->window.gWindow); | |||
if (newText) | |||
insertText(newText); | |||
} | |||
@@ -135,7 +137,7 @@ void TextField::onKey(EventKey &e) { | |||
if (cursor != selection) { | |||
int begin = min(cursor, selection); | |||
std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||
glfwSetClipboardString(gWindow, selectedText.c_str()); | |||
glfwSetClipboardString(global_ui->window.gWindow, selectedText.c_str()); | |||
insertText(""); | |||
} | |||
} | |||
@@ -145,7 +147,7 @@ void TextField::onKey(EventKey &e) { | |||
if (cursor != selection) { | |||
int begin = min(cursor, selection); | |||
std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||
glfwSetClipboardString(gWindow, selectedText.c_str()); | |||
glfwSetClipboardString(global_ui->window.gWindow, selectedText.c_str()); | |||
} | |||
} | |||
} break; | |||
@@ -190,7 +192,7 @@ void TextField::setText(std::string text) { | |||
} | |||
int TextField::getTextPosition(Vec mousePos) { | |||
return bndTextFieldTextPosition(gVg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str(), mousePos.x, mousePos.y); | |||
return bndTextFieldTextPosition(global_ui->window.gVg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str(), mousePos.x, mousePos.y); | |||
} | |||
@@ -3,7 +3,6 @@ | |||
namespace rack { | |||
Scene *gScene = NULL; | |||
} // namespace rack |
@@ -1,29 +1,27 @@ | |||
#include "global_pre.hpp" | |||
#include "util/common.hpp" | |||
#include "asset.hpp" | |||
#include <stdarg.h> | |||
#include "global.hpp" | |||
namespace rack { | |||
static FILE *logFile = NULL; | |||
static std::chrono::high_resolution_clock::time_point startTime; | |||
void loggerInit(bool devMode) { | |||
startTime = std::chrono::high_resolution_clock::now(); | |||
global->logger.startTime = std::chrono::high_resolution_clock::now(); | |||
if (devMode) { | |||
logFile = stderr; | |||
global->logger.logFile = stderr; | |||
} | |||
else { | |||
std::string logFilename = assetLocal("log.txt"); | |||
logFile = fopen(logFilename.c_str(), "w"); | |||
global->logger.logFile = fopen(logFilename.c_str(), "w"); | |||
} | |||
} | |||
void loggerDestroy() { | |||
if (logFile != stderr) { | |||
fclose(logFile); | |||
if (global->logger.logFile != stderr) { | |||
fclose(global->logger.logFile); | |||
} | |||
} | |||
@@ -43,15 +41,17 @@ static const int loggerColor[] = { | |||
static void loggerLogVa(LoggerLevel level, const char *file, int line, const char *format, va_list args) { | |||
auto nowTime = std::chrono::high_resolution_clock::now(); | |||
int duration = std::chrono::duration_cast<std::chrono::milliseconds>(nowTime - startTime).count(); | |||
if (logFile == stderr) | |||
fprintf(logFile, "\x1B[%dm", loggerColor[level]); | |||
fprintf(logFile, "[%.03f %s %s:%d] ", duration / 1000.0, loggerText[level], file, line); | |||
if (logFile == stderr) | |||
fprintf(logFile, "\x1B[0m"); | |||
vfprintf(logFile, format, args); | |||
fprintf(logFile, "\n"); | |||
fflush(logFile); | |||
int duration = std::chrono::duration_cast<std::chrono::milliseconds>(nowTime - global->logger.startTime).count(); | |||
if (global->logger.logFile == stderr) | |||
fprintf(global->logger.logFile, "\x1B[%dm", loggerColor[level]); | |||
fprintf(global->logger.logFile, "[%.03f %s %s:%d] ", duration / 1000.0, loggerText[level], file, line); | |||
if (global->logger.logFile == stderr) | |||
fprintf(global->logger.logFile, "\x1B[0m"); | |||
vfprintf(global->logger.logFile, format, args); | |||
vprintf(format, args); // xxx | |||
printf("\n"); // xxx | |||
fprintf(global->logger.logFile, "\n"); | |||
fflush(global->logger.logFile); | |||
} | |||
void loggerLog(LoggerLevel level, const char *file, int line, const char *format, ...) { | |||
@@ -1,6 +1,14 @@ | |||
#include "global_pre.hpp" | |||
#include "util/common.hpp" | |||
#ifdef YAC_POSIX | |||
#include <time.h> | |||
#include <sys/time.h> | |||
#endif // YAC_POSIX | |||
#ifdef YAC_WIN32 | |||
#define WIN32_LEAN_AND_MEAN defined | |||
#include <windows.h> | |||
#endif // YAC_WIN32 | |||
#include "global.hpp" | |||
namespace rack { | |||
@@ -9,31 +17,36 @@ namespace rack { | |||
// xoroshiro128+ | |||
// from http://xoroshiro.di.unimi.it/xoroshiro128plus.c | |||
static uint64_t xoroshiro128plus_state[2] = {}; | |||
static uint64_t rotl(const uint64_t x, int k) { | |||
return (x << k) | (x >> (64 - k)); | |||
} | |||
static uint64_t xoroshiro128plus_next(void) { | |||
const uint64_t s0 = xoroshiro128plus_state[0]; | |||
uint64_t s1 = xoroshiro128plus_state[1]; | |||
const uint64_t s0 = global->random.xoroshiro128plus_state[0]; | |||
uint64_t s1 = global->random.xoroshiro128plus_state[1]; | |||
const uint64_t result = s0 + s1; | |||
s1 ^= s0; | |||
xoroshiro128plus_state[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b | |||
xoroshiro128plus_state[1] = rotl(s1, 36); // c | |||
global->random.xoroshiro128plus_state[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b | |||
global->random.xoroshiro128plus_state[1] = rotl(s1, 36); // c | |||
return result; | |||
} | |||
void randomInit() { | |||
// Only allow the seed to be initialized once during the lifetime of the program. | |||
assert(xoroshiro128plus_state[0] == 0 && xoroshiro128plus_state[1] == 0); | |||
assert(global->random.xoroshiro128plus_state[0] == 0 && global->random.xoroshiro128plus_state[1] == 0); | |||
#ifdef YAC_WIN32 | |||
LARGE_INTEGER pfcCurrent; | |||
::QueryPerformanceCounter(&pfcCurrent); | |||
global->random.xoroshiro128plus_state[0] = pfcCurrent.QuadPart; | |||
global->random.xoroshiro128plus_state[1] = pfcCurrent.QuadPart; | |||
#else | |||
struct timeval tv; | |||
gettimeofday(&tv, NULL); | |||
xoroshiro128plus_state[0] = tv.tv_sec; | |||
xoroshiro128plus_state[1] = tv.tv_usec; | |||
global->random.xoroshiro128plus_state[0] = tv.tv_sec; | |||
global->random.xoroshiro128plus_state[1] = tv.tv_usec; | |||
#endif // USE_VST2 | |||
// Generate a few times to fix the fact that the time is not a uniform u64 | |||
for (int i = 0; i < 10; i++) { | |||
xoroshiro128plus_next(); | |||
@@ -1,7 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "util/common.hpp" | |||
#include <stdarg.h> | |||
#include <algorithm> | |||
#ifdef YAC_GCC | |||
#include <libgen.h> // for dirname and basename | |||
#endif | |||
namespace rack { | |||
@@ -50,16 +53,44 @@ bool stringEndsWith(std::string str, std::string suffix) { | |||
} | |||
std::string stringDirectory(std::string path) { | |||
#ifdef YAC_POSIX | |||
char *pathDup = strdup(path.c_str()); | |||
std::string directory = dirname(pathDup); | |||
free(pathDup); | |||
#elif defined(YAC_WIN32) | |||
char drive[_MAX_DRIVE]; | |||
char dir [_MAX_DIR]; | |||
char file [_MAX_FNAME]; | |||
char ext [_MAX_EXT]; | |||
char dirName [_MAX_DRIVE + _MAX_DIR + _MAX_EXT]; | |||
_splitpath(path.c_str(), drive, dir, file, ext); | |||
sprintf(dirName, "%s%s", drive, dir); | |||
printf("xxx dirName=\"%s\"\n", dirName); | |||
std::string directory = dirName; | |||
#else | |||
#error dirname not implemented | |||
#endif | |||
return directory; | |||
} | |||
std::string stringFilename(std::string path) { | |||
#ifdef YAC_POSIX | |||
char *pathDup = strdup(path.c_str()); | |||
std::string filename = basename(pathDup); | |||
free(pathDup); | |||
#elif defined(YAC_WIN32) | |||
char drive[_MAX_DRIVE]; | |||
char dir [_MAX_DIR]; | |||
char file [_MAX_FNAME]; | |||
char ext [_MAX_EXT]; | |||
char fileName [_MAX_FNAME + _MAX_EXT]; | |||
_splitpath(path.c_str(), drive, dir, file, ext); | |||
sprintf(fileName, "%s%s", file, ext); | |||
// printf("xxx fileName=\"%s\"\n", fileName); | |||
std::string filename = fileName; | |||
#else | |||
#error basename not implemented | |||
#endif | |||
return filename; | |||
} | |||
@@ -1,7 +1,10 @@ | |||
#include "global_pre.hpp" | |||
#include "util/common.hpp" | |||
#ifdef YAC_POSIX | |||
#include <dirent.h> | |||
#include <sys/stat.h> | |||
#endif // YAC_POSIX | |||
#if ARCH_WIN | |||
#include <windows.h> | |||
@@ -9,11 +12,16 @@ | |||
#endif | |||
#ifdef USE_VST2 | |||
#define SKIP_SYSTEM_FXNS defined | |||
#endif // USE_VST2 | |||
namespace rack { | |||
std::vector<std::string> systemListEntries(std::string path) { | |||
std::vector<std::string> filenames; | |||
#ifndef SKIP_SYSTEM_FXNS | |||
DIR *dir = opendir(path.c_str()); | |||
if (dir) { | |||
struct dirent *d; | |||
@@ -25,29 +33,43 @@ std::vector<std::string> systemListEntries(std::string path) { | |||
} | |||
closedir(dir); | |||
} | |||
#endif | |||
return filenames; | |||
} | |||
bool systemExists(std::string path) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
struct stat statbuf; | |||
return (stat(path.c_str(), &statbuf) == 0); | |||
#else | |||
return false; | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
bool systemIsFile(std::string path) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
struct stat statbuf; | |||
if (stat(path.c_str(), &statbuf)) | |||
return false; | |||
return S_ISREG(statbuf.st_mode); | |||
#else | |||
return false; | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
bool systemIsDirectory(std::string path) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
struct stat statbuf; | |||
if (stat(path.c_str(), &statbuf)) | |||
return false; | |||
return S_ISDIR(statbuf.st_mode); | |||
#else | |||
return false; | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
void systemCopy(std::string srcPath, std::string destPath) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
// Open files | |||
FILE *source = fopen(srcPath.c_str(), "rb"); | |||
if (!source) return; | |||
@@ -70,17 +92,23 @@ void systemCopy(std::string srcPath, std::string destPath) { | |||
if (size == 0) | |||
break; | |||
} | |||
#else | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
void systemCreateDirectory(std::string path) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
#if ARCH_WIN | |||
CreateDirectory(path.c_str(), NULL); | |||
#else | |||
mkdir(path.c_str(), 0755); | |||
#endif | |||
#else | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
void systemOpenBrowser(std::string url) { | |||
#ifndef SKIP_SYSTEM_FXNS | |||
#if ARCH_LIN | |||
std::string command = "xdg-open " + url; | |||
(void) system(command.c_str()); | |||
@@ -92,6 +120,8 @@ void systemOpenBrowser(std::string url) { | |||
#if ARCH_WIN | |||
ShellExecute(NULL, "open", url.c_str(), NULL, NULL, SW_SHOWNORMAL); | |||
#endif | |||
#else | |||
#endif // SKIP_SYSTEM_FXNS | |||
} | |||
@@ -0,0 +1,111 @@ | |||
#include "global_pre.hpp" | |||
#include "vstmidi.hpp" | |||
#include <map> | |||
#include "global.hpp" | |||
extern void vst2_lock_midi_device(void); | |||
extern void vst2_unlock_midi_device(void); | |||
namespace rack { | |||
// static void midiInputCallback(double timeStamp, std::vector<unsigned char> *message, void *userData) { | |||
// if (!message) return; | |||
// if (!userData) return; | |||
// RtMidiInputDevice *midiInputDevice = (RtMidiInputDevice*) userData; | |||
// if (!midiInputDevice) return; | |||
// MidiMessage msg; | |||
// if (message->size() >= 1) | |||
// msg.cmd = (*message)[0]; | |||
// if (message->size() >= 2) | |||
// msg.data1 = (*message)[1]; | |||
// if (message->size() >= 3) | |||
// msg.data2 = (*message)[2]; | |||
// midiInputDevice->onMessage(msg); | |||
// } | |||
VSTMidiInputDevice::VSTMidiInputDevice(int driverId, int deviceId) { | |||
} | |||
VSTMidiInputDevice::~VSTMidiInputDevice() { | |||
} | |||
VSTMidiDriver::VSTMidiDriver(int driverId) { | |||
device = NULL; | |||
} | |||
VSTMidiDriver::~VSTMidiDriver() { | |||
if(NULL != device) | |||
delete device; | |||
} | |||
std::string VSTMidiDriver::getName() { | |||
return "VST"; | |||
} | |||
std::vector<int> VSTMidiDriver::getInputDeviceIds() { | |||
std::vector<int> deviceIds; | |||
deviceIds.push_back(0); | |||
return deviceIds; | |||
} | |||
std::string VSTMidiDriver::getInputDeviceName(int deviceId) { | |||
if(0 == deviceId) | |||
return std::string("VST MIDI Input Device"); | |||
return ""; | |||
} | |||
MidiInputDevice *VSTMidiDriver::subscribeInputDevice(int deviceId, MidiInput *midiInput) { | |||
if(0 != deviceId) | |||
return NULL; | |||
if (!device) { | |||
device = new VSTMidiInputDevice(VST_DRIVER, deviceId); | |||
vst2_lock_midi_device(); | |||
global->vst2.midi_device = device; | |||
vst2_unlock_midi_device(); | |||
} | |||
device->subscribe(midiInput); | |||
return device; | |||
} | |||
void VSTMidiDriver::unsubscribeInputDevice(int deviceId, MidiInput *midiInput) { | |||
if(0 != deviceId) | |||
return; | |||
device->unsubscribe(midiInput); | |||
// Destroy device if nothing is subscribed anymore | |||
if (device->subscribed.empty()) { | |||
vst2_lock_midi_device(); | |||
delete device; | |||
device = NULL; | |||
global->vst2.midi_device = NULL; | |||
vst2_unlock_midi_device(); | |||
} | |||
} | |||
void vstmidiInit() { | |||
MidiDriver *driver = new VSTMidiDriver(VST_DRIVER); | |||
midiDriverAdd(VST_DRIVER, driver); | |||
} | |||
} // namespace rack | |||
void vst2_process_midi_input_event(sU8 _a, sU8 _b, sU8 _c) { | |||
// (note) vst midi device mutex is locked by caller | |||
if(NULL != rack::global->vst2.midi_device) | |||
{ | |||
rack::MidiMessage msg; | |||
msg.cmd = _a; | |||
msg.data1 = _b; | |||
msg.data2 = _c; | |||
rack::global->vst2.midi_device->onMessage(msg); | |||
} | |||
} |
@@ -1,7 +1,9 @@ | |||
#include "global_pre.hpp" | |||
#include "widgets.hpp" | |||
#include "window.hpp" | |||
#include "nanovg_gl.h" | |||
#include "nanovg_gl_utils.h" | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -55,7 +57,7 @@ void FramebufferWidget::draw(NVGcontext *vg) { | |||
internal->box.pos = internal->box.pos.mult(s).floor(); | |||
internal->box.size = internal->box.size.mult(s).ceil().plus(Vec(1, 1)); | |||
Vec fbSize = internal->box.size.mult(gPixelRatio * oversample); | |||
Vec fbSize = internal->box.size.mult(global_ui->window.gPixelRatio * oversample); | |||
if (!fbSize.isFinite()) | |||
return; | |||
@@ -66,7 +68,7 @@ void FramebufferWidget::draw(NVGcontext *vg) { | |||
// Delete old one first to free up GPU memory | |||
internal->setFramebuffer(NULL); | |||
// Create a framebuffer from the main nanovg context. We will draw to this in the secondary nanovg context. | |||
NVGLUframebuffer *fb = nvgluCreateFramebuffer(gVg, fbSize.x, fbSize.y, 0); | |||
NVGLUframebuffer *fb = nvgluCreateFramebuffer(global_ui->window.gVg, fbSize.x, fbSize.y, 0); | |||
if (!fb) | |||
return; | |||
internal->setFramebuffer(fb); | |||
@@ -76,16 +78,16 @@ void FramebufferWidget::draw(NVGcontext *vg) { | |||
glClearColor(0.0, 0.0, 0.0, 0.0); | |||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | |||
nvgBeginFrame(gFramebufferVg, fbSize.x, fbSize.y, gPixelRatio * oversample); | |||
nvgBeginFrame(global_ui->window.gFramebufferVg, fbSize.x, fbSize.y, global_ui->window.gPixelRatio * oversample); | |||
nvgScale(gFramebufferVg, gPixelRatio * oversample, gPixelRatio * oversample); | |||
nvgScale(global_ui->window.gFramebufferVg, global_ui->window.gPixelRatio * oversample, global_ui->window.gPixelRatio * oversample); | |||
// Use local scaling | |||
nvgTranslate(gFramebufferVg, bf.x, bf.y); | |||
nvgTranslate(gFramebufferVg, -internal->box.pos.x, -internal->box.pos.y); | |||
nvgScale(gFramebufferVg, s.x, s.y); | |||
Widget::draw(gFramebufferVg); | |||
nvgTranslate(global_ui->window.gFramebufferVg, bf.x, bf.y); | |||
nvgTranslate(global_ui->window.gFramebufferVg, -internal->box.pos.x, -internal->box.pos.y); | |||
nvgScale(global_ui->window.gFramebufferVg, s.x, s.y); | |||
Widget::draw(global_ui->window.gFramebufferVg); | |||
nvgEndFrame(gFramebufferVg); | |||
nvgEndFrame(global_ui->window.gFramebufferVg); | |||
nvgluBindFramebuffer(NULL); | |||
} | |||
@@ -1,6 +1,8 @@ | |||
#include "global_pre.hpp" | |||
#include "widgets.hpp" | |||
#include "app.hpp" | |||
#include <algorithm> | |||
#include "global_ui.hpp" | |||
namespace rack { | |||
@@ -9,11 +11,11 @@ Widget::~Widget() { | |||
// You should only delete orphaned widgets | |||
assert(!parent); | |||
// Stop dragging and hovering this widget | |||
if (gHoveredWidget == this) gHoveredWidget = NULL; | |||
if (gDraggedWidget == this) gDraggedWidget = NULL; | |||
if (gDragHoveredWidget == this) gDragHoveredWidget = NULL; | |||
if (gFocusedWidget == this) gFocusedWidget = NULL; | |||
if (gTempWidget == this) gTempWidget = NULL; | |||
if (global_ui->widgets.gHoveredWidget == this) global_ui->widgets.gHoveredWidget = NULL; | |||
if (global_ui->widgets.gDraggedWidget == this) global_ui->widgets.gDraggedWidget = NULL; | |||
if (global_ui->widgets.gDragHoveredWidget == this) global_ui->widgets.gDragHoveredWidget = NULL; | |||
if (global_ui->widgets.gFocusedWidget == this) global_ui->widgets.gFocusedWidget = NULL; | |||
if (global_ui->widgets.gTempWidget == this) global_ui->widgets.gTempWidget = NULL; | |||
clearChildren(); | |||
} | |||
@@ -77,23 +79,23 @@ void Widget::clearChildren() { | |||
void Widget::finalizeEvents() { | |||
// Stop dragging and hovering this widget | |||
if (gHoveredWidget == this) { | |||
if (global_ui->widgets.gHoveredWidget == this) { | |||
EventMouseLeave e; | |||
gHoveredWidget->onMouseLeave(e); | |||
gHoveredWidget = NULL; | |||
global_ui->widgets.gHoveredWidget->onMouseLeave(e); | |||
global_ui->widgets.gHoveredWidget = NULL; | |||
} | |||
if (gDraggedWidget == this) { | |||
if (global_ui->widgets.gDraggedWidget == this) { | |||
EventDragEnd e; | |||
gDraggedWidget->onDragEnd(e); | |||
gDraggedWidget = NULL; | |||
global_ui->widgets.gDraggedWidget->onDragEnd(e); | |||
global_ui->widgets.gDraggedWidget = NULL; | |||
} | |||
if (gDragHoveredWidget == this) { | |||
gDragHoveredWidget = NULL; | |||
if (global_ui->widgets.gDragHoveredWidget == this) { | |||
global_ui->widgets.gDragHoveredWidget = NULL; | |||
} | |||
if (gFocusedWidget == this) { | |||
if (global_ui->widgets.gFocusedWidget == this) { | |||
EventDefocus e; | |||
gFocusedWidget->onDefocus(e); | |||
gFocusedWidget = NULL; | |||
global_ui->widgets.gFocusedWidget->onDefocus(e); | |||
global_ui->widgets.gFocusedWidget = NULL; | |||
} | |||
for (Widget *child : children) { | |||
child->finalizeEvents(); | |||
@@ -3,11 +3,6 @@ | |||
namespace rack { | |||
Widget *gHoveredWidget = NULL; | |||
Widget *gDraggedWidget = NULL; | |||
Widget *gDragHoveredWidget = NULL; | |||
Widget *gFocusedWidget = NULL; | |||
Widget *gTempWidget = NULL; | |||
} // namespace rack |
@@ -1,3 +1,4 @@ | |||
#include "global_pre.hpp" | |||
#include "window.hpp" | |||
#include "app.hpp" | |||
#include "asset.hpp" | |||
@@ -30,21 +31,15 @@ | |||
#include <ApplicationServices/ApplicationServices.h> | |||
#endif | |||
namespace rack { | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
GLFWwindow *gWindow = NULL; | |||
NVGcontext *gVg = NULL; | |||
NVGcontext *gFramebufferVg = NULL; | |||
std::shared_ptr<Font> gGuiFont; | |||
float gPixelRatio = 1.0; | |||
float gWindowRatio = 1.0; | |||
bool gAllowCursorLock = true; | |||
int gGuiFrame; | |||
Vec gMousePos; | |||
#ifdef USE_VST2 | |||
extern void vst2_handle_queued_set_program_chunk (void); | |||
#endif // USE_VST2 | |||
std::string lastWindowTitle; | |||
namespace rack { | |||
void windowSizeCallback(GLFWwindow* window, int width, int height) { | |||
@@ -54,78 +49,78 @@ void mouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { | |||
#ifdef ARCH_MAC | |||
// Ctrl-left click --> right click | |||
if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||
if (glfwGetKey(gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS) { | |||
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS) { | |||
button = GLFW_MOUSE_BUTTON_RIGHT; | |||
} | |||
} | |||
#endif | |||
if (action == GLFW_PRESS) { | |||
gTempWidget = NULL; | |||
global_ui->widgets.gTempWidget = NULL; | |||
// onMouseDown | |||
{ | |||
EventMouseDown e; | |||
e.pos = gMousePos; | |||
e.pos = global_ui->window.gMousePos; | |||
e.button = button; | |||
gScene->onMouseDown(e); | |||
gTempWidget = e.target; | |||
global_ui->ui.gScene->onMouseDown(e); | |||
global_ui->widgets.gTempWidget = e.target; | |||
} | |||
if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||
if (gTempWidget) { | |||
if (global_ui->widgets.gTempWidget) { | |||
// onDragStart | |||
EventDragStart e; | |||
gTempWidget->onDragStart(e); | |||
global_ui->widgets.gTempWidget->onDragStart(e); | |||
} | |||
gDraggedWidget = gTempWidget; | |||
global_ui->widgets.gDraggedWidget = global_ui->widgets.gTempWidget; | |||
if (gTempWidget != gFocusedWidget) { | |||
if (gFocusedWidget) { | |||
if (global_ui->widgets.gTempWidget != global_ui->widgets.gFocusedWidget) { | |||
if (global_ui->widgets.gFocusedWidget) { | |||
// onDefocus | |||
EventDefocus e; | |||
gFocusedWidget->onDefocus(e); | |||
global_ui->widgets.gFocusedWidget->onDefocus(e); | |||
} | |||
gFocusedWidget = NULL; | |||
if (gTempWidget) { | |||
global_ui->widgets.gFocusedWidget = NULL; | |||
if (global_ui->widgets.gTempWidget) { | |||
// onFocus | |||
EventFocus e; | |||
gTempWidget->onFocus(e); | |||
global_ui->widgets.gTempWidget->onFocus(e); | |||
if (e.consumed) { | |||
gFocusedWidget = gTempWidget; | |||
global_ui->widgets.gFocusedWidget = global_ui->widgets.gTempWidget; | |||
} | |||
} | |||
} | |||
} | |||
gTempWidget = NULL; | |||
global_ui->widgets.gTempWidget = NULL; | |||
} | |||
else if (action == GLFW_RELEASE) { | |||
// onMouseUp | |||
gTempWidget = NULL; | |||
global_ui->widgets.gTempWidget = NULL; | |||
{ | |||
EventMouseUp e; | |||
e.pos = gMousePos; | |||
e.pos = global_ui->window.gMousePos; | |||
e.button = button; | |||
gScene->onMouseUp(e); | |||
gTempWidget = e.target; | |||
global_ui->ui.gScene->onMouseUp(e); | |||
global_ui->widgets.gTempWidget = e.target; | |||
} | |||
if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||
if (gDraggedWidget) { | |||
if (global_ui->widgets.gDraggedWidget) { | |||
// onDragDrop | |||
EventDragDrop e; | |||
e.origin = gDraggedWidget; | |||
gTempWidget->onDragDrop(e); | |||
e.origin = global_ui->widgets.gDraggedWidget; | |||
global_ui->widgets.gTempWidget->onDragDrop(e); | |||
} | |||
// gDraggedWidget might have been set to null in the last event, recheck here | |||
if (gDraggedWidget) { | |||
if (global_ui->widgets.gDraggedWidget) { | |||
// onDragEnd | |||
EventDragEnd e; | |||
gDraggedWidget->onDragEnd(e); | |||
global_ui->widgets.gDraggedWidget->onDragEnd(e); | |||
} | |||
gDraggedWidget = NULL; | |||
gDragHoveredWidget = NULL; | |||
global_ui->widgets.gDraggedWidget = NULL; | |||
global_ui->widgets.gDragHoveredWidget = NULL; | |||
} | |||
gTempWidget = NULL; | |||
global_ui->widgets.gTempWidget = NULL; | |||
} | |||
} | |||
@@ -152,10 +147,10 @@ void mouseButtonStickyCallback(GLFWwindow *window, int button, int action, int m | |||
} | |||
void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) { | |||
Vec mousePos = Vec(xpos, ypos).div(gPixelRatio / gWindowRatio).round(); | |||
Vec mouseRel = mousePos.minus(gMousePos); | |||
Vec mousePos = Vec(xpos, ypos).div(global_ui->window.gPixelRatio / global_ui->window.gWindowRatio).round(); | |||
Vec mouseRel = mousePos.minus(global_ui->window.gMousePos); | |||
int cursorMode = glfwGetInputMode(gWindow, GLFW_CURSOR); | |||
int cursorMode = glfwGetInputMode(global_ui->window.gWindow, GLFW_CURSOR); | |||
(void) cursorMode; | |||
#ifdef ARCH_MAC | |||
@@ -163,80 +158,80 @@ void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) { | |||
// This is not an ideal implementation. For example, if the user drags off the screen, the new mouse position will be clamped. | |||
if (cursorMode == GLFW_CURSOR_HIDDEN) { | |||
// CGSetLocalEventsSuppressionInterval(0.0); | |||
glfwSetCursorPos(gWindow, gMousePos.x, gMousePos.y); | |||
glfwSetCursorPos(global_ui->window.gWindow, global_ui->window.gMousePos.x, global_ui->window.gMousePos.y); | |||
CGAssociateMouseAndMouseCursorPosition(true); | |||
mousePos = gMousePos; | |||
mousePos = global_ui->window.gMousePos; | |||
} | |||
// Because sometimes the cursor turns into an arrow when its position is on the boundary of the window | |||
glfwSetCursor(gWindow, NULL); | |||
glfwSetCursor(global_ui->window.gWindow, NULL); | |||
#endif | |||
gMousePos = mousePos; | |||
global_ui->window.gMousePos = mousePos; | |||
gTempWidget = NULL; | |||
global_ui->widgets.gTempWidget = NULL; | |||
// onMouseMove | |||
{ | |||
EventMouseMove e; | |||
e.pos = mousePos; | |||
e.mouseRel = mouseRel; | |||
gScene->onMouseMove(e); | |||
gTempWidget = e.target; | |||
global_ui->ui.gScene->onMouseMove(e); | |||
global_ui->widgets.gTempWidget = e.target; | |||
} | |||
if (gDraggedWidget) { | |||
if (global_ui->widgets.gDraggedWidget) { | |||
// onDragMove | |||
EventDragMove e; | |||
e.mouseRel = mouseRel; | |||
gDraggedWidget->onDragMove(e); | |||
global_ui->widgets.gDraggedWidget->onDragMove(e); | |||
if (gTempWidget != gDragHoveredWidget) { | |||
if (gDragHoveredWidget) { | |||
if (global_ui->widgets.gTempWidget != global_ui->widgets.gDragHoveredWidget) { | |||
if (global_ui->widgets.gDragHoveredWidget) { | |||
EventDragEnter e; | |||
e.origin = gDraggedWidget; | |||
gDragHoveredWidget->onDragLeave(e); | |||
e.origin = global_ui->widgets.gDraggedWidget; | |||
global_ui->widgets.gDragHoveredWidget->onDragLeave(e); | |||
} | |||
gDragHoveredWidget = gTempWidget; | |||
if (gDragHoveredWidget) { | |||
global_ui->widgets.gDragHoveredWidget = global_ui->widgets.gTempWidget; | |||
if (global_ui->widgets.gDragHoveredWidget) { | |||
EventDragEnter e; | |||
e.origin = gDraggedWidget; | |||
gDragHoveredWidget->onDragEnter(e); | |||
e.origin = global_ui->widgets.gDraggedWidget; | |||
global_ui->widgets.gDragHoveredWidget->onDragEnter(e); | |||
} | |||
} | |||
} | |||
else { | |||
if (gTempWidget != gHoveredWidget) { | |||
if (gHoveredWidget) { | |||
if (global_ui->widgets.gTempWidget != global_ui->widgets.gHoveredWidget) { | |||
if (global_ui->widgets.gHoveredWidget) { | |||
// onMouseLeave | |||
EventMouseLeave e; | |||
gHoveredWidget->onMouseLeave(e); | |||
global_ui->widgets.gHoveredWidget->onMouseLeave(e); | |||
} | |||
gHoveredWidget = gTempWidget; | |||
if (gHoveredWidget) { | |||
global_ui->widgets.gHoveredWidget = global_ui->widgets.gTempWidget; | |||
if (global_ui->widgets.gHoveredWidget) { | |||
// onMouseEnter | |||
EventMouseEnter e; | |||
gHoveredWidget->onMouseEnter(e); | |||
global_ui->widgets.gHoveredWidget->onMouseEnter(e); | |||
} | |||
} | |||
} | |||
gTempWidget = NULL; | |||
if (glfwGetMouseButton(gWindow, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS) { | |||
global_ui->widgets.gTempWidget = NULL; | |||
if (glfwGetMouseButton(global_ui->window.gWindow, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS) { | |||
// TODO | |||
// Define a new global called gScrollWidget, which remembers the widget where middle-click was first pressed | |||
EventScroll e; | |||
e.pos = mousePos; | |||
e.scrollRel = mouseRel; | |||
gScene->onScroll(e); | |||
global_ui->ui.gScene->onScroll(e); | |||
} | |||
} | |||
void cursorEnterCallback(GLFWwindow* window, int entered) { | |||
if (!entered) { | |||
if (gHoveredWidget) { | |||
if (global_ui->widgets.gHoveredWidget) { | |||
// onMouseLeave | |||
EventMouseLeave e; | |||
gHoveredWidget->onMouseLeave(e); | |||
global_ui->widgets.gHoveredWidget->onMouseLeave(e); | |||
} | |||
gHoveredWidget = NULL; | |||
global_ui->widgets.gHoveredWidget = NULL; | |||
} | |||
} | |||
@@ -248,35 +243,35 @@ void scrollCallback(GLFWwindow *window, double x, double y) { | |||
#endif | |||
// onScroll | |||
EventScroll e; | |||
e.pos = gMousePos; | |||
e.pos = global_ui->window.gMousePos; | |||
e.scrollRel = scrollRel.mult(50.0); | |||
gScene->onScroll(e); | |||
global_ui->ui.gScene->onScroll(e); | |||
} | |||
void charCallback(GLFWwindow *window, unsigned int codepoint) { | |||
if (gFocusedWidget) { | |||
if (global_ui->widgets.gFocusedWidget) { | |||
// onText | |||
EventText e; | |||
e.codepoint = codepoint; | |||
gFocusedWidget->onText(e); | |||
global_ui->widgets.gFocusedWidget->onText(e); | |||
} | |||
} | |||
void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) { | |||
if (action == GLFW_PRESS || action == GLFW_REPEAT) { | |||
if (gFocusedWidget) { | |||
if (global_ui->widgets.gFocusedWidget) { | |||
// onKey | |||
EventKey e; | |||
e.key = key; | |||
gFocusedWidget->onKey(e); | |||
global_ui->widgets.gFocusedWidget->onKey(e); | |||
if (e.consumed) | |||
return; | |||
} | |||
// onHoverKey | |||
EventHoverKey e; | |||
e.pos = gMousePos; | |||
e.pos = global_ui->window.gMousePos; | |||
e.key = key; | |||
gScene->onHoverKey(e); | |||
global_ui->ui.gScene->onHoverKey(e); | |||
} | |||
// Keyboard MIDI driver | |||
@@ -293,11 +288,11 @@ void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods | |||
void dropCallback(GLFWwindow *window, int count, const char **paths) { | |||
// onPathDrop | |||
EventPathDrop e; | |||
e.pos = gMousePos; | |||
e.pos = global_ui->window.gMousePos; | |||
for (int i = 0; i < count; i++) { | |||
e.paths.push_back(paths[i]); | |||
} | |||
gScene->onPathDrop(e); | |||
global_ui->ui.gScene->onPathDrop(e); | |||
} | |||
void errorCallback(int error, const char *description) { | |||
@@ -306,32 +301,47 @@ void errorCallback(int error, const char *description) { | |||
void renderGui() { | |||
int width, height; | |||
glfwGetFramebufferSize(gWindow, &width, &height); | |||
glfwGetFramebufferSize(global_ui->window.gWindow, &width, &height); | |||
// Update and render | |||
nvgBeginFrame(gVg, width, height, gPixelRatio); | |||
nvgBeginFrame(global_ui->window.gVg, width, height, global_ui->window.gPixelRatio); | |||
nvgReset(gVg); | |||
nvgScale(gVg, gPixelRatio, gPixelRatio); | |||
gScene->draw(gVg); | |||
nvgReset(global_ui->window.gVg); | |||
nvgScale(global_ui->window.gVg, global_ui->window.gPixelRatio, global_ui->window.gPixelRatio); | |||
global_ui->ui.gScene->draw(global_ui->window.gVg); | |||
glViewport(0, 0, width, height); | |||
glClearColor(0.0, 0.0, 0.0, 1.0); | |||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | |||
nvgEndFrame(gVg); | |||
glfwSwapBuffers(gWindow); | |||
nvgEndFrame(global_ui->window.gVg); | |||
glfwSwapBuffers(global_ui->window.gWindow); | |||
} | |||
void windowInit() { | |||
int err; | |||
// Set up GLFW | |||
glfwSetErrorCallback(errorCallback); | |||
err = glfwInit(); | |||
if (err != GLFW_TRUE) { | |||
osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Could not initialize GLFW."); | |||
exit(1); | |||
} | |||
bool bInitGLFW = true; | |||
#ifdef USE_VST2 | |||
// (note) GLFW uses global vars. hmmmmm. multiple init seems to work, though (and opening multiple windows) | |||
// (note) just don't terminate until last instance is closed | |||
// (note) (this will probably result in memleaks..?!) | |||
bInitGLFW = (1 == global->vst2.last_seen_instance_count); | |||
#endif // USE_VST2 | |||
#if 0 | |||
if(bInitGLFW) | |||
{ | |||
// Set up GLFW | |||
glfwSetErrorCallback(errorCallback); | |||
err = glfwInit(); | |||
if (err != GLFW_TRUE) { | |||
osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Could not initialize GLFW."); | |||
exit(1); | |||
} | |||
} | |||
#else | |||
glfwSetErrorCallback(errorCallback); | |||
#endif | |||
#if defined NANOVG_GL2 | |||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); | |||
@@ -344,28 +354,28 @@ void windowInit() { | |||
#endif | |||
glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE); | |||
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); | |||
lastWindowTitle = ""; | |||
gWindow = glfwCreateWindow(640, 480, lastWindowTitle.c_str(), NULL, NULL); | |||
if (!gWindow) { | |||
global_ui->window.lastWindowTitle = ""; | |||
global_ui->window.gWindow = glfwCreateWindow(640, 480, global_ui->window.lastWindowTitle.c_str(), NULL, NULL); | |||
if (!global_ui->window.gWindow) { | |||
osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Cannot open window with OpenGL 2.0 renderer. Does your graphics card support OpenGL 2.0 or greater? If so, make sure you have the latest graphics drivers installed."); | |||
exit(1); | |||
} | |||
glfwMakeContextCurrent(gWindow); | |||
glfwMakeContextCurrent(global_ui->window.gWindow); | |||
glfwSwapInterval(1); | |||
glfwSetInputMode(gWindow, GLFW_LOCK_KEY_MODS, 1); | |||
glfwSetInputMode(global_ui->window.gWindow, GLFW_LOCK_KEY_MODS, 1); | |||
glfwSetWindowSizeCallback(gWindow, windowSizeCallback); | |||
glfwSetMouseButtonCallback(gWindow, mouseButtonStickyCallback); | |||
glfwSetWindowSizeCallback(global_ui->window.gWindow, windowSizeCallback); | |||
glfwSetMouseButtonCallback(global_ui->window.gWindow, mouseButtonStickyCallback); | |||
// Call this ourselves, but on every frame instead of only when the mouse moves | |||
// glfwSetCursorPosCallback(gWindow, cursorPosCallback); | |||
glfwSetCursorEnterCallback(gWindow, cursorEnterCallback); | |||
glfwSetScrollCallback(gWindow, scrollCallback); | |||
glfwSetCharCallback(gWindow, charCallback); | |||
glfwSetKeyCallback(gWindow, keyCallback); | |||
glfwSetDropCallback(gWindow, dropCallback); | |||
glfwSetCursorEnterCallback(global_ui->window.gWindow, cursorEnterCallback); | |||
glfwSetScrollCallback(global_ui->window.gWindow, scrollCallback); | |||
glfwSetCharCallback(global_ui->window.gWindow, charCallback); | |||
glfwSetKeyCallback(global_ui->window.gWindow, keyCallback); | |||
glfwSetDropCallback(global_ui->window.gWindow, dropCallback); | |||
// Set up GLEW | |||
glewExperimental = GL_TRUE; | |||
@@ -378,113 +388,139 @@ void windowInit() { | |||
// GLEW generates GL error because it calls glGetString(GL_EXTENSIONS), we'll consume it here. | |||
glGetError(); | |||
glfwSetWindowSizeLimits(gWindow, 640, 480, GLFW_DONT_CARE, GLFW_DONT_CARE); | |||
glfwSetWindowSizeLimits(global_ui->window.gWindow, 640, 480, GLFW_DONT_CARE, GLFW_DONT_CARE); | |||
// Set up NanoVG | |||
int nvgFlags = NVG_ANTIALIAS; | |||
#if defined NANOVG_GL2 | |||
gVg = nvgCreateGL2(nvgFlags); | |||
global_ui->window.gVg = nvgCreateGL2(nvgFlags); | |||
#elif defined NANOVG_GL3 | |||
gVg = nvgCreateGL3(nvgFlags); | |||
global_ui->window.gVg = nvgCreateGL3(nvgFlags); | |||
#elif defined NANOVG_GLES2 | |||
gVg = nvgCreateGLES2(nvgFlags); | |||
global_ui->window.gVg = nvgCreateGLES2(nvgFlags); | |||
#endif | |||
assert(gVg); | |||
assert(global_ui->window.gVg); | |||
#if defined NANOVG_GL2 | |||
gFramebufferVg = nvgCreateGL2(nvgFlags); | |||
global_ui->window.gFramebufferVg = nvgCreateGL2(nvgFlags); | |||
#elif defined NANOVG_GL3 | |||
gFramebufferVg = nvgCreateGL3(nvgFlags); | |||
global_ui->window.gFramebufferVg = nvgCreateGL3(nvgFlags); | |||
#elif defined NANOVG_GLES2 | |||
gFramebufferVg = nvgCreateGLES2(nvgFlags); | |||
global_ui->window.gFramebufferVg = nvgCreateGLES2(nvgFlags); | |||
#endif | |||
assert(gFramebufferVg); | |||
assert(global_ui->window.gFramebufferVg); | |||
// Set up Blendish | |||
gGuiFont = Font::load(assetGlobal("res/fonts/DejaVuSans.ttf")); | |||
bndSetFont(gGuiFont->handle); | |||
global_ui->window.gGuiFont = Font::load(assetGlobal("res/fonts/DejaVuSans.ttf")); | |||
bndSetFont(global_ui->window.gGuiFont->handle); | |||
windowSetTheme(nvgRGB(0x33, 0x33, 0x33), nvgRGB(0xf0, 0xf0, 0xf0)); | |||
#ifdef USE_VST2 | |||
// (note) the patch loader requires an initialized window system (widgets etc) | |||
::glfwHideWindow(global_ui->window.gWindow); | |||
#endif // USE_VST2 | |||
} | |||
void windowDestroy() { | |||
gGuiFont.reset(); | |||
global_ui->window.gGuiFont.reset(); | |||
#if defined NANOVG_GL2 | |||
nvgDeleteGL2(gVg); | |||
nvgDeleteGL2(global_ui->window.gVg); | |||
#elif defined NANOVG_GL3 | |||
nvgDeleteGL3(gVg); | |||
nvgDeleteGL3(global_ui->window.gVg); | |||
#elif defined NANOVG_GLES2 | |||
nvgDeleteGLES2(gVg); | |||
nvgDeleteGLES2(global_ui->window.gVg); | |||
#endif | |||
#if defined NANOVG_GL2 | |||
nvgDeleteGL2(gFramebufferVg); | |||
nvgDeleteGL2(global_ui->window.gFramebufferVg); | |||
#elif defined NANOVG_GL3 | |||
nvgDeleteGL3(gFramebufferVg); | |||
nvgDeleteGL3(global_ui->window.gFramebufferVg); | |||
#elif defined NANOVG_GLES2 | |||
nvgDeleteGLES2(gFramebufferVg); | |||
nvgDeleteGLES2(global_ui->window.gFramebufferVg); | |||
#endif | |||
glfwDestroyWindow(gWindow); | |||
glfwTerminate(); | |||
glfwDestroyWindow(global_ui->window.gWindow); | |||
global_ui->window.gWindow = 0; | |||
#if 0 | |||
bool bTerminateGLFW = true; | |||
#ifdef USE_VST2 | |||
bTerminateGLFW = (1 == global->vst2.last_seen_instance_count); | |||
#endif // USE_VST2 | |||
if(bTerminateGLFW) | |||
glfwTerminate(); | |||
#endif | |||
} | |||
void windowRun() { | |||
assert(gWindow); | |||
gGuiFrame = 0; | |||
while(!glfwWindowShouldClose(gWindow)) { | |||
printf("xxx vcvrack: windowRun() ENTER\n"); | |||
assert(global_ui->window.gWindow); | |||
global_ui->window.gGuiFrame = 0; | |||
while(!glfwWindowShouldClose(global_ui->window.gWindow) | |||
#ifdef USE_VST2 | |||
&& !global_ui->vst2.b_close_window | |||
#endif // USE_VST2 | |||
) { | |||
vst2_handle_queued_set_program_chunk(); | |||
double startTime = glfwGetTime(); | |||
gGuiFrame++; | |||
global_ui->window.gGuiFrame++; | |||
// printf("xxx vcvrack: windowRun(): startTime=%g\n", startTime); | |||
// Poll events | |||
glfwPollEvents(); | |||
{ | |||
double xpos, ypos; | |||
glfwGetCursorPos(gWindow, &xpos, &ypos); | |||
cursorPosCallback(gWindow, xpos, ypos); | |||
glfwGetCursorPos(global_ui->window.gWindow, &xpos, &ypos); | |||
cursorPosCallback(global_ui->window.gWindow, xpos, ypos); | |||
} | |||
mouseButtonStickyPop(); | |||
#ifndef USE_VST2 | |||
gamepadStep(); | |||
#endif // !USE_VST2 | |||
// Set window title | |||
std::string windowTitle; | |||
windowTitle = gApplicationName; | |||
windowTitle = global_ui->app.gApplicationName; | |||
windowTitle += " "; | |||
windowTitle += gApplicationVersion; | |||
if (!gRackWidget->lastPath.empty()) { | |||
windowTitle += global_ui->app.gApplicationVersion; | |||
if (!global_ui->app.gRackWidget->lastPath.empty()) { | |||
windowTitle += " - "; | |||
windowTitle += stringFilename(gRackWidget->lastPath); | |||
windowTitle += stringFilename(global_ui->app.gRackWidget->lastPath); | |||
} | |||
if (windowTitle != lastWindowTitle) { | |||
glfwSetWindowTitle(gWindow, windowTitle.c_str()); | |||
lastWindowTitle = windowTitle; | |||
if (windowTitle != global_ui->window.lastWindowTitle) { | |||
glfwSetWindowTitle(global_ui->window.gWindow, windowTitle.c_str()); | |||
global_ui->window.lastWindowTitle = windowTitle; | |||
} | |||
// Get desired scaling | |||
float pixelRatio; | |||
glfwGetWindowContentScale(gWindow, &pixelRatio, NULL); | |||
glfwGetWindowContentScale(global_ui->window.gWindow, &pixelRatio, NULL); | |||
pixelRatio = roundf(pixelRatio); | |||
if (pixelRatio != gPixelRatio) { | |||
if (pixelRatio != global_ui->window.gPixelRatio) { | |||
EventZoom eZoom; | |||
gScene->onZoom(eZoom); | |||
gPixelRatio = pixelRatio; | |||
global_ui->ui.gScene->onZoom(eZoom); | |||
global_ui->window.gPixelRatio = pixelRatio; | |||
} | |||
// Get framebuffer/window ratio | |||
int width, height; | |||
glfwGetFramebufferSize(gWindow, &width, &height); | |||
glfwGetFramebufferSize(global_ui->window.gWindow, &width, &height); | |||
int windowWidth, windowHeight; | |||
glfwGetWindowSize(gWindow, &windowWidth, &windowHeight); | |||
gWindowRatio = (float)width / windowWidth; | |||
glfwGetWindowSize(global_ui->window.gWindow, &windowWidth, &windowHeight); | |||
global_ui->window.gWindowRatio = (float)width / windowWidth; | |||
gScene->box.size = Vec(width, height).div(gPixelRatio); | |||
global_ui->ui.gScene->box.size = Vec(width, height).div(global_ui->window.gPixelRatio); | |||
// Step scene | |||
gScene->step(); | |||
global_ui->ui.gScene->step(); | |||
// Render | |||
bool visible = glfwGetWindowAttrib(gWindow, GLFW_VISIBLE) && !glfwGetWindowAttrib(gWindow, GLFW_ICONIFIED); | |||
bool visible = glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_VISIBLE) && !glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_ICONIFIED); | |||
if (visible) { | |||
renderGui(); | |||
} | |||
@@ -498,67 +534,85 @@ void windowRun() { | |||
} | |||
endTime = glfwGetTime(); | |||
// info("%lf fps", 1.0 / (endTime - startTime)); | |||
#ifdef USE_VST2 | |||
if(global_ui->vst2.b_hide_window) | |||
{ | |||
global_ui->vst2.b_hide_window = 0; | |||
break; | |||
} | |||
#endif // USE_VST2 | |||
} | |||
#ifdef USE_VST2 | |||
::glfwSetWindowShouldClose(global_ui->window.gWindow, 0); | |||
::glfwHideWindow(global_ui->window.gWindow); | |||
#endif | |||
printf("xxx vcvrack: windowRun() LEAVE\n"); | |||
} | |||
void windowClose() { | |||
glfwSetWindowShouldClose(gWindow, GLFW_TRUE); | |||
glfwSetWindowShouldClose(global_ui->window.gWindow, GLFW_TRUE); | |||
} | |||
void windowCursorLock() { | |||
if (gAllowCursorLock) { | |||
if (global_ui->window.gAllowCursorLock) { | |||
#ifdef ARCH_MAC | |||
glfwSetInputMode(gWindow, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | |||
glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | |||
#else | |||
glfwSetInputMode(gWindow, GLFW_CURSOR, GLFW_CURSOR_DISABLED); | |||
glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_DISABLED); | |||
#endif | |||
} | |||
} | |||
void windowCursorUnlock() { | |||
if (gAllowCursorLock) { | |||
glfwSetInputMode(gWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | |||
if (global_ui->window.gAllowCursorLock) { | |||
glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | |||
} | |||
} | |||
bool windowIsModPressed() { | |||
#ifdef ARCH_MAC | |||
return glfwGetKey(gWindow, GLFW_KEY_LEFT_SUPER) == GLFW_PRESS || glfwGetKey(gWindow, GLFW_KEY_RIGHT_SUPER) == GLFW_PRESS; | |||
return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_SUPER) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_SUPER) == GLFW_PRESS; | |||
#else | |||
return glfwGetKey(gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS; | |||
return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS; | |||
#endif | |||
} | |||
bool windowIsShiftPressed() { | |||
return glfwGetKey(gWindow, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS || glfwGetKey(gWindow, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS; | |||
return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS; | |||
} | |||
Vec windowGetWindowSize() { | |||
int width, height; | |||
glfwGetWindowSize(gWindow, &width, &height); | |||
glfwGetWindowSize(global_ui->window.gWindow, &width, &height); | |||
return Vec(width, height); | |||
} | |||
void windowSetWindowSize(Vec size) { | |||
int width = size.x; | |||
int height = size.y; | |||
glfwSetWindowSize(gWindow, width, height); | |||
glfwSetWindowSize(global_ui->window.gWindow, width, height); | |||
} | |||
Vec windowGetWindowPos() { | |||
int x, y; | |||
glfwGetWindowPos(gWindow, &x, &y); | |||
glfwGetWindowPos(global_ui->window.gWindow, &x, &y); | |||
return Vec(x, y); | |||
} | |||
void windowSetWindowPos(Vec pos) { | |||
int x = pos.x; | |||
int y = pos.y; | |||
glfwSetWindowPos(gWindow, x, y); | |||
glfwSetWindowPos(global_ui->window.gWindow, x, y); | |||
} | |||
bool windowIsMaximized() { | |||
return glfwGetWindowAttrib(gWindow, GLFW_MAXIMIZED); | |||
if(global_ui->window.gWindow) | |||
return glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_MAXIMIZED); | |||
else | |||
return false; | |||
} | |||
void windowSetTheme(NVGcolor bg, NVGcolor fg) { | |||
@@ -607,26 +661,21 @@ void windowSetTheme(NVGcolor bg, NVGcolor fg) { | |||
bndSetTheme(t); | |||
} | |||
static int windowX = 0; | |||
static int windowY = 0; | |||
static int windowWidth = 0; | |||
static int windowHeight = 0; | |||
void windowSetFullScreen(bool fullScreen) { | |||
if (windowGetFullScreen()) { | |||
glfwSetWindowMonitor(gWindow, NULL, windowX, windowY, windowWidth, windowHeight, GLFW_DONT_CARE); | |||
glfwSetWindowMonitor(global_ui->window.gWindow, NULL, global_ui->window.windowX, global_ui->window.windowY, global_ui->window.windowWidth, global_ui->window.windowHeight, GLFW_DONT_CARE); | |||
} | |||
else { | |||
glfwGetWindowPos(gWindow, &windowX, &windowY); | |||
glfwGetWindowSize(gWindow, &windowWidth, &windowHeight); | |||
glfwGetWindowPos(global_ui->window.gWindow, &global_ui->window.windowX, &global_ui->window.windowY); | |||
glfwGetWindowSize(global_ui->window.gWindow, &global_ui->window.windowWidth, &global_ui->window.windowHeight); | |||
GLFWmonitor *monitor = glfwGetPrimaryMonitor(); | |||
const GLFWvidmode* mode = glfwGetVideoMode(monitor); | |||
glfwSetWindowMonitor(gWindow, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); | |||
glfwSetWindowMonitor(global_ui->window.gWindow, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); | |||
} | |||
} | |||
bool windowGetFullScreen() { | |||
GLFWmonitor *monitor = glfwGetWindowMonitor(gWindow); | |||
GLFWmonitor *monitor = glfwGetWindowMonitor(global_ui->window.gWindow); | |||
return monitor != NULL; | |||
} | |||
@@ -636,7 +685,7 @@ bool windowGetFullScreen() { | |||
//////////////////// | |||
Font::Font(const std::string &filename) { | |||
handle = nvgCreateFont(gVg, filename.c_str(), filename.c_str()); | |||
handle = nvgCreateFont(global_ui->window.gVg, filename.c_str(), filename.c_str()); | |||
if (handle >= 0) { | |||
info("Loaded font %s", filename.c_str()); | |||
} | |||
@@ -650,10 +699,9 @@ Font::~Font() { | |||
} | |||
std::shared_ptr<Font> Font::load(const std::string &filename) { | |||
static std::map<std::string, std::weak_ptr<Font>> cache; | |||
auto sp = cache[filename].lock(); | |||
auto sp = global_ui->window.font_cache[filename].lock(); | |||
if (!sp) | |||
cache[filename] = sp = std::make_shared<Font>(filename); | |||
global_ui->window.font_cache[filename] = sp = std::make_shared<Font>(filename); | |||
return sp; | |||
} | |||
@@ -662,7 +710,7 @@ std::shared_ptr<Font> Font::load(const std::string &filename) { | |||
//////////////////// | |||
Image::Image(const std::string &filename) { | |||
handle = nvgCreateImage(gVg, filename.c_str(), NVG_IMAGE_REPEATX | NVG_IMAGE_REPEATY); | |||
handle = nvgCreateImage(global_ui->window.gVg, filename.c_str(), NVG_IMAGE_REPEATX | NVG_IMAGE_REPEATY); | |||
if (handle > 0) { | |||
info("Loaded image %s", filename.c_str()); | |||
} | |||
@@ -673,14 +721,13 @@ Image::Image(const std::string &filename) { | |||
Image::~Image() { | |||
// TODO What if handle is invalid? | |||
nvgDeleteImage(gVg, handle); | |||
nvgDeleteImage(global_ui->window.gVg, handle); | |||
} | |||
std::shared_ptr<Image> Image::load(const std::string &filename) { | |||
static std::map<std::string, std::weak_ptr<Image>> cache; | |||
auto sp = cache[filename].lock(); | |||
auto sp = global_ui->window.image_cache[filename].lock(); | |||
if (!sp) | |||
cache[filename] = sp = std::make_shared<Image>(filename); | |||
global_ui->window.image_cache[filename] = sp = std::make_shared<Image>(filename); | |||
return sp; | |||
} | |||
@@ -703,10 +750,9 @@ SVG::~SVG() { | |||
} | |||
std::shared_ptr<SVG> SVG::load(const std::string &filename) { | |||
static std::map<std::string, std::weak_ptr<SVG>> cache; | |||
auto sp = cache[filename].lock(); | |||
auto sp = global_ui->window.svg_cache[filename].lock(); | |||
if (!sp) | |||
cache[filename] = sp = std::make_shared<SVG>(filename); | |||
global_ui->window.svg_cache[filename] = sp = std::make_shared<SVG>(filename); | |||
return sp; | |||
} | |||
@@ -0,0 +1,264 @@ | |||
** July 2nd, 2018 | |||
- add module Template.MyModule | |||
- clean up for GITHub release | |||
** July 1st, 2018 | |||
- add VST parameter support (set/get/query name) | |||
- added "vst2_unique_param_base_id" JSON module parameter | |||
- the plugin always reports 9999 parameters | |||
- known issue: does not work in Reason since it bails out when a plugin has more than 128 params (IIRC) | |||
- add module Bogaudio.VCO | |||
- add module Bogaudio.XCO | |||
- add module Bogaudio.Additator | |||
- add module Bogaudio.FMOp | |||
- add module Bogaudio.LFO | |||
- add module Bogaudio.EightFO | |||
- add module Bogaudio.DADSRH | |||
- add module Bogaudio.DADSRHPlus | |||
- add module Bogaudio.DGate | |||
- add module Bogaudio.Shaper | |||
- add module Bogaudio.ShaperPlus | |||
- add module Bogaudio.ADSR | |||
- add module Bogaudio.Follow | |||
- add module Bogaudio.Mix4 | |||
- add module Bogaudio.Mix8 | |||
- add module Bogaudio.VCM | |||
- add module Bogaudio.Pan | |||
- add module Bogaudio.XFade | |||
- add module Bogaudio.VCA | |||
- add module Bogaudio.VCAmp | |||
- add module Bogaudio.Analyzer | |||
- add module Bogaudio.VU | |||
- add module Bogaudio.Detune | |||
- add module Bogaudio.Stack | |||
- add module Bogaudio.Reftone | |||
- add module Bogaudio.Bool | |||
- add module Bogaudio.CVD | |||
- add module Bogaudio.FlipFlop | |||
- add module Bogaudio.Manual | |||
- add module Bogaudio.Mult | |||
- add module Bogaudio.Noise | |||
- add module Bogaudio.Offset | |||
- add module Bogaudio.SampleHold | |||
- add module Bogaudio.Sums | |||
- add module Bogaudio.Switch | |||
- add module Bogaudio.Lag | |||
- add module Bogaudio.RM | |||
- add module Bogaudio.Test | |||
- add module Bogaudio.Test2 | |||
- add module Bogaudio.ThreeHP | |||
- add module Bogaudio.SixHP | |||
- add module Bogaudio.EightHP | |||
- add module Bogaudio.TenHP | |||
- add module Bogaudio.TwelveHP | |||
- add module Bogaudio.ThirteenHP | |||
- add module Bogaudio.FifteenHP | |||
- add module Bogaudio.EighteenHP | |||
- add module Bogaudio.TwentyHP | |||
- add module Bogaudio.TwentyTwoHP | |||
- add module Bogaudio.TwentyFiveHP | |||
- add module Bogaudio.ThirtyHP | |||
- add module cf.trSEQ | |||
- add module cf.LEDSEQ | |||
- add module cf.L3DS3Q | |||
- add module cf.SLIDERSEQ | |||
- add module cf.PLAYER | |||
- add module cf.STEPS | |||
- add module cf.METRO | |||
- add module cf.EACH | |||
- add module cf.FOUR | |||
- add module cf.PEAK | |||
- add module cf.MONO | |||
- add module cf.STEREO | |||
- add module cf.MASTER | |||
- add module cf.SUB | |||
- add module cf.CUBE | |||
- add module cf.PATCH | |||
- add module cf.LEDS | |||
- add module cf.DAVE | |||
- add module Koralfx.Beatovnik | |||
- add module Koralfx.Mixovnik | |||
- add module Koralfx.Nullovnik4 | |||
- add module Koralfx.Nullovnik6 | |||
- add module Koralfx.Presetovnik | |||
- add module Koralfx.Quantovnik | |||
- add module Koralfx.Scorovnik | |||
- add module LindenbergResearch.SimpleFilter | |||
- add module LindenbergResearch.MS20Filter | |||
- add module LindenbergResearch.AlmaFilter | |||
- add module LindenbergResearch.ReShaper | |||
- add module LindenbergResearch.BlankPanel | |||
- add module LindenbergResearch.BlankPanelM1 | |||
- add module Qwelk.Automaton | |||
- add module Qwelk.Byte | |||
- add module Qwelk.Chaos | |||
- add module Qwelk.Column | |||
- add module Qwelk.Gate | |||
- add module Qwelk.Or | |||
- add module Qwelk.Not | |||
- add module Qwelk.Xor | |||
- add module Qwelk.Mix | |||
- add module Qwelk.News | |||
- add module Qwelk.Scaler | |||
- add module Qwelk.Wrap | |||
- add module Qwelk.XFade | |||
- add module SubmarineFree.AG106 | |||
- add module SubmarineFree.BB120 | |||
- add module SubmarineFree.FF110 | |||
- add module SubmarineFree.FF120 | |||
- add module SubmarineFree.FF212 | |||
- add module SubmarineFree.LA108 | |||
- add module SubmarineFree.LD106 | |||
- add module SubmarineFree.NG112 | |||
- add module SubmarineFree.OG106 | |||
- add module SubmarineFree.PG112 | |||
- add module SubmarineFree.PO101 | |||
- add module SubmarineFree.PO102 | |||
- add module SubmarineFree.PO204 | |||
- add module SubmarineFree.WK101 | |||
- add module SubmarineFree.WK205 | |||
- add module SubmarineFree.XF101 | |||
- add module SubmarineFree.XF102 | |||
- add module SubmarineFree.XF104 | |||
- add module SubmarineFree.XF201 | |||
- add module SubmarineFree.XF202 | |||
- add module SubmarineFree.XG106 | |||
- add module SubmarineFree.BP101 | |||
- add module SubmarineFree.BP102 | |||
- add module SubmarineFree.BP104 | |||
- add module SubmarineFree.BP108 | |||
- add module SubmarineFree.BP110 | |||
- add module SubmarineFree.BP112 | |||
- add module SubmarineFree.BP116 | |||
- add module SubmarineFree.BP120 | |||
- add module SubmarineFree.BP124 | |||
- add module SubmarineFree.BP132 | |||
** June 30th, 2018 | |||
- add module AS.ADSR | |||
- add module AS.AtNuVrTr | |||
- add module AS.BPMCalc | |||
- add module AS.BPMClock | |||
- add module AS.BlankPanel4 | |||
- add module AS.BlankPanel6 | |||
- add module AS.BlankPanel8 | |||
- add module AS.BlankPanelSpecial | |||
- add module AS.Cv2T | |||
- add module AS.DelayPlusFx | |||
- add module AS.DelayPlusStereoFx | |||
- add module AS.Flow | |||
- add module AS.KillGate | |||
- add module AS.LaunchGate | |||
- add module AS.Merge2.5 | |||
- add module AS.Mixer8ch | |||
- add module AS.MonoVUmeter | |||
- add module AS.Multiple2.5 | |||
- add module AS.PhaserFx | |||
- add module AS.QuadVCA | |||
- add module AS.ReverbFx | |||
- add module AS.ReverbStereoFx | |||
- add module AS.SEQ16 | |||
- add module AS.SawOsc | |||
- add module AS.SignalDelay | |||
- add module AS.SineOsc | |||
- add module AS.Steps | |||
- add module AS.SuperDriveFx | |||
- add module AS.TremoloFx | |||
- add module AS.TremoloStereoFx | |||
- add module AS.TriLFO | |||
- add module AS.TriggersMKI | |||
- add module AS.TriggersMKII | |||
- add module AS.VCA | |||
- add module AS.WaveShaper | |||
- add module AS.StereoVUmeter | |||
- add module Befaco.ABC | |||
- add module Befaco.DualAtenuverter | |||
- add module Befaco.EvenVCO | |||
- add module Befaco.Mixer | |||
- add module Befaco.Rampage | |||
- add module Befaco.SlewLimiter | |||
- add module Befaco.SpringReverb | |||
- add module ESeries.E340 | |||
- add module ErraticInstruments.MPEToCV | |||
- add module ErraticInstruments.QuadMPEToCV | |||
- add module HetrickCV.TwoToFour | |||
- add module HetrickCV.AnalogToDigital | |||
- add module HetrickCV.ASR | |||
- add module HetrickCV.Bitshift | |||
- add module HetrickCV.BlankPanel | |||
- add module HetrickCV.Boolean3 | |||
- add module HetrickCV.Comparator | |||
- add module HetrickCV.Contrast | |||
- add module HetrickCV.Crackle | |||
- add module HetrickCV.Delta | |||
- add module HetrickCV.DigitalToAnalog | |||
- add module HetrickCV.Dust | |||
- add module HetrickCV.Exponent | |||
- add module HetrickCV.FlipFlop | |||
- add module HetrickCV.FlipPan | |||
- add module HetrickCV.GateJunction | |||
- add module HetrickCV.LogicCombine | |||
- add module HetrickCV.RandomGates | |||
- add module HetrickCV.Rotator | |||
- add module HetrickCV.Scanner | |||
- add module HetrickCV.Waveshape | |||
- add module SonusModular.Addiction | |||
- add module SonusModular.Bitter | |||
- add module SonusModular.Bymidside | |||
- add module SonusModular.Campione | |||
- add module SonusModular.Chainsaw | |||
- add module SonusModular.Ctrl | |||
- add module SonusModular.Deathcrush | |||
- add module SonusModular.Harmony | |||
- add module SonusModular.Ladrone | |||
- add module SonusModular.Luppolo | |||
- add module SonusModular.Luppolo3 | |||
- add module SonusModular.Micromacro | |||
- add module SonusModular.Multimulti | |||
- add module SonusModular.Oktagon | |||
- add module SonusModular.Osculum | |||
- add module SonusModular.Paramath | |||
- add module SonusModular.Piconoise | |||
- add module SonusModular.Pusher | |||
- add module SonusModular.Ringo | |||
- add module SonusModular.Scramblase | |||
- add module SonusModular.Twoff | |||
- add module SonusModular.Yabp | |||
- add module Valley.Topograph | |||
- add module Valley.UGraph | |||
- add module Valley.Dexter | |||
- add module Valley.Plateau | |||
** June 29th, 2018 | |||
- add VSTi version of the plugin (the only difference is that it is reported as an instrument instead of an effect) | |||
- forward host samplerate to VCV | |||
- report last seen processing buffer size | |||
- disable mouse focus lock (can result in non-responding UI) | |||
- prevent windows from being closed | |||
- load patches in UI thread | |||
- add AudibleInstruments modules (Mutable Instruments Clouds, Elements, ..) | |||
** June 28th, 2018 | |||
- replaced all (700+) static+global var references by TLS instance pointer | |||
- added MSVC+GNU make based build system | |||
- added support for multiple instantion (reentrant + thread safe) | |||
- added MIDI input support (VSTMidiDriver) | |||
- comes with one (statically linke) plugin ("Fundamental") | |||
- the plugin now also works in other DAWs (tested with Reaper and Reason 10) | |||
** June 25th, 2018 | |||
- initial release | |||
- registered VST2 uid ('gvgy') at http://service.steinberg.de/databases/plugin.nsf/plugIn?openForm | |||
- built using mingw64 | |||
- only one instance supported | |||
- no program chunks | |||
- no MIDI | |||
- audio input is broken | |||
- comes with one (dynamically loaded) plugin ("Fundamental") | |||
- the VST plugin does not work in some DAWs (neither in Reaper, nor in Reason. It does work in Eureka) |
@@ -0,0 +1,514 @@ | |||
# nanosvg | |||
Copyright (c) 2013-14 Mikko Mononen memon@inside.org | |||
This software is provided 'as-is', without any express or implied | |||
warranty. In no event will the authors be held liable for any damages | |||
arising from the use of this software. | |||
Permission is granted to anyone to use this software for any purpose, | |||
including commercial applications, and to alter it and redistribute it | |||
freely, subject to the following restrictions: | |||
1. The origin of this software must not be misrepresented; you must not | |||
claim that you wrote the original software. If you use this software | |||
in a product, an acknowledgment in the product documentation would be | |||
appreciated but is not required. | |||
2. Altered source versions must be plainly marked as such, and must not be | |||
misrepresented as being the original software. | |||
3. This notice may not be removed or altered from any source distribution. | |||
# nanovg | |||
Copyright (c) 2013 Mikko Mononen memon@inside.org | |||
This software is provided 'as-is', without any express or implied | |||
warranty. In no event will the authors be held liable for any damages | |||
arising from the use of this software. | |||
Permission is granted to anyone to use this software for any purpose, | |||
including commercial applications, and to alter it and redistribute it | |||
freely, subject to the following restrictions: | |||
1. The origin of this software must not be misrepresented; you must not | |||
claim that you wrote the original software. If you use this software | |||
in a product, an acknowledgment in the product documentation would be | |||
appreciated but is not required. | |||
2. Altered source versions must be plainly marked as such, and must not be | |||
misrepresented as being the original software. | |||
3. This notice may not be removed or altered from any source distribution. | |||
# Blendish | |||
Copyright (c) 2014 Leonard Ritter <leonard.ritter@duangle.com> | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
THE SOFTWARE. | |||
# GLFW | |||
Copyright © 2002-2006 Marcus Geelnard | |||
Copyright © 2006-2011 Camilla Berglund | |||
This software is provided ‘as-is’, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. | |||
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: | |||
The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. | |||
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | |||
This notice may not be removed or altered from any source distribution. | |||
# GLEW | |||
The OpenGL Extension Wrangler Library | |||
Copyright (C) 2002-2007, Milan Ikits <milan ikits[]ieee org> | |||
Copyright (C) 2002-2007, Marcelo E. Magallon <mmagallo[]debian org> | |||
Copyright (C) 2002, Lev Povalahev | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are met: | |||
* Redistributions of source code must retain the above copyright notice, | |||
this list of conditions and the following disclaimer. | |||
* Redistributions in binary form must reproduce the above copyright notice, | |||
this list of conditions and the following disclaimer in the documentation | |||
and/or other materials provided with the distribution. | |||
* The name of the author may be used to endorse or promote products | |||
derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |||
THE POSSIBILITY OF SUCH DAMAGE. | |||
Mesa 3-D graphics library | |||
Version: 7.0 | |||
Copyright (C) 1999-2007 Brian Paul All Rights Reserved. | |||
Permission is hereby granted, free of charge, to any person obtaining a | |||
copy of this software and associated documentation files (the "Software"), | |||
to deal in the Software without restriction, including without limitation | |||
the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||
and/or sell copies of the Software, and to permit persons to whom the | |||
Software is furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included | |||
in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |||
BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Copyright (c) 2007 The Khronos Group Inc. | |||
Permission is hereby granted, free of charge, to any person obtaining a | |||
copy of this software and/or associated documentation files (the | |||
"Materials"), to deal in the Materials without restriction, including | |||
without limitation the rights to use, copy, modify, merge, publish, | |||
distribute, sublicense, and/or sell copies of the Materials, and to | |||
permit persons to whom the Materials are furnished to do so, subject to | |||
the following conditions: | |||
The above copyright notice and this permission notice shall be included | |||
in all copies or substantial portions of the Materials. | |||
THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |||
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | |||
# jansson | |||
Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org> | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
THE SOFTWARE. | |||
# RtAudio | |||
RtAudio: a set of realtime audio i/o C++ classes | |||
Copyright (c) 2001-2017 Gary P. Scavone | |||
Permission is hereby granted, free of charge, to any person | |||
obtaining a copy of this software and associated documentation files | |||
(the "Software"), to deal in the Software without restriction, | |||
including without limitation the rights to use, copy, modify, merge, | |||
publish, distribute, sublicense, and/or sell copies of the Software, | |||
and to permit persons to whom the Software is furnished to do so, | |||
subject to the following conditions: | |||
The above copyright notice and this permission notice shall be | |||
included in all copies or substantial portions of the Software. | |||
Any person wishing to distribute modifications to the Software is | |||
asked to send the modifications to the original developer so that | |||
they can be incorporated into the canonical version. This is, | |||
however, not a binding provision of this license. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR | |||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | |||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
# RtMidi | |||
RtMidi: realtime MIDI i/o C++ classes | |||
Copyright (c) 2003-2017 Gary P. Scavone | |||
Permission is hereby granted, free of charge, to any person | |||
obtaining a copy of this software and associated documentation files | |||
(the "Software"), to deal in the Software without restriction, | |||
including without limitation the rights to use, copy, modify, merge, | |||
publish, distribute, sublicense, and/or sell copies of the Software, | |||
and to permit persons to whom the Software is furnished to do so, | |||
subject to the following conditions: | |||
The above copyright notice and this permission notice shall be | |||
included in all copies or substantial portions of the Software. | |||
Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, | |||
however, not a binding provision of this license. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR | |||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | |||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
# libspeexdsp | |||
Copyright 2002-2008 Xiph.org Foundation | |||
Copyright 2002-2008 Jean-Marc Valin | |||
Copyright 2005-2007 Analog Devices Inc. | |||
Copyright 2005-2008 Commonwealth Scientific and Industrial Research | |||
Organisation (CSIRO) | |||
Copyright 1993, 2002, 2006 David Rowe | |||
Copyright 2003 EpicGames | |||
Copyright 1992-1994 Jutta Degener, Carsten Bormann | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions | |||
are met: | |||
- Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
- Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
- Neither the name of the Xiph.org Foundation nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR | |||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
# curl | |||
Copyright (c) 1996 - 2017, Daniel Stenberg, daniel@haxx.se, and many contributors, see the THANKS file. | |||
All rights reserved. | |||
Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. | |||
# libzip | |||
Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner | |||
The authors can be contacted at <libzip@nih.at> | |||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |||
3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
# zlib | |||
(C) 1995-2017 Jean-loup Gailly and Mark Adler | |||
This software is provided 'as-is', without any express or implied | |||
warranty. In no event will the authors be held liable for any damages | |||
arising from the use of this software. | |||
Permission is granted to anyone to use this software for any purpose, | |||
including commercial applications, and to alter it and redistribute it | |||
freely, subject to the following restrictions: | |||
1. The origin of this software must not be misrepresented; you must not | |||
claim that you wrote the original software. If you use this software | |||
in a product, an acknowledgment in the product documentation would be | |||
appreciated but is not required. | |||
2. Altered source versions must be plainly marked as such, and must not be | |||
misrepresented as being the original software. | |||
3. This notice may not be removed or altered from any source distribution. | |||
Jean-loup Gailly Mark Adler | |||
jloup@gzip.org madler@alumni.caltech.edu | |||
If you use the zlib library in a product, we would appreciate *not* receiving | |||
lengthy legal documents to sign. The sources are provided for free but without | |||
warranty of any kind. The library has been entirely written by Jean-loup | |||
Gailly and Mark Adler; it does not include third-party code. | |||
If you redistribute modified sources, we would appreciate that you include in | |||
the file ChangeLog history information documenting your changes. Please read | |||
the FAQ for more information on the distribution of modified source versions. | |||
# OpenSSL | |||
OpenSSL License | |||
--------------- | |||
/* ==================================================================== | |||
* Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. All advertising materials mentioning features or use of this | |||
* software must display the following acknowledgment: | |||
* "This product includes software developed by the OpenSSL Project | |||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | |||
* | |||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | |||
* endorse or promote products derived from this software without | |||
* prior written permission. For written permission, please contact | |||
* openssl-core@openssl.org. | |||
* | |||
* 5. Products derived from this software may not be called "OpenSSL" | |||
* nor may "OpenSSL" appear in their names without prior written | |||
* permission of the OpenSSL Project. | |||
* | |||
* 6. Redistributions of any form whatsoever must retain the following | |||
* acknowledgment: | |||
* "This product includes software developed by the OpenSSL Project | |||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)" | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | |||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | |||
* OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This product includes cryptographic software written by Eric Young | |||
* (eay@cryptsoft.com). This product includes software written by Tim | |||
* Hudson (tjh@cryptsoft.com). | |||
* | |||
*/ | |||
Original SSLeay License | |||
----------------------- | |||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | |||
* All rights reserved. | |||
* | |||
* This package is an SSL implementation written | |||
* by Eric Young (eay@cryptsoft.com). | |||
* The implementation was written so as to conform with Netscapes SSL. | |||
* | |||
* This library is free for commercial and non-commercial use as long as | |||
* the following conditions are aheared to. The following conditions | |||
* apply to all code found in this distribution, be it the RC4, RSA, | |||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation | |||
* included with this distribution is covered by the same copyright terms | |||
* except that the holder is Tim Hudson (tjh@cryptsoft.com). | |||
* | |||
* Copyright remains Eric Young's, and as such any Copyright notices in | |||
* the code are not to be removed. | |||
* If this package is used in a product, Eric Young should be given attribution | |||
* as the author of the parts of the library used. | |||
* This can be in the form of a textual message at program startup or | |||
* in documentation (online or textual) provided with the package. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* 1. Redistributions of source code must retain the copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in the | |||
* documentation and/or other materials provided with the distribution. | |||
* 3. All advertising materials mentioning features or use of this software | |||
* must display the following acknowledgement: | |||
* "This product includes cryptographic software written by | |||
* Eric Young (eay@cryptsoft.com)" | |||
* The word 'cryptographic' can be left out if the rouines from the library | |||
* being used are not cryptographic related :-). | |||
* 4. If you include any Windows specific code (or a derivative thereof) from | |||
* the apps directory (application code) you must include an acknowledgement: | |||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | |||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* | |||
* The licence and distribution terms for any publically available version or | |||
* derivative of this code cannot be changed. i.e. this code cannot simply be | |||
* copied and put under another distribution licence | |||
* [including the GNU Public Licence.] | |||
*/ | |||
# osdialog | |||
(CC0 1.0 Universal, no attribution needed) | |||
# pffft | |||
Copyright (c) 2013 Julien Pommier ( pommier@modartt.com ) | |||
Based on original fortran 77 code from FFTPACKv4 from NETLIB, | |||
authored by Dr Paul Swarztrauber of NCAR, in 1985. | |||
As confirmed by the NCAR fftpack software curators, the following | |||
FFTPACKv5 license applies to FFTPACKv4 sources. My changes are | |||
released under the same terms. | |||
FFTPACK license: | |||
http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html | |||
Copyright (c) 2004 the University Corporation for Atmospheric | |||
Research ("UCAR"). All rights reserved. Developed by NCAR's | |||
Computational and Information Systems Laboratory, UCAR, | |||
www.cisl.ucar.edu. | |||
Redistribution and use of the Software in source and binary forms, | |||
with or without modification, is permitted provided that the | |||
following conditions are met: | |||
- Neither the names of NCAR's Computational and Information Systems | |||
Laboratory, the University Corporation for Atmospheric Research, | |||
nor the names of its sponsors or contributors may be used to | |||
endorse or promote products derived from this Software without | |||
specific prior written permission. | |||
- Redistributions of source code must retain the above copyright | |||
notices, this list of conditions, and the disclaimer below. | |||
- Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions, and the disclaimer below in the | |||
documentation and/or other materials provided with the | |||
distribution. | |||
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT | |||
HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, | |||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE | |||
SOFTWARE. |
@@ -0,0 +1,11 @@ | |||
Copyright 2016 Andrew Belt | |||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,108 @@ | |||
# Rack | |||
*Rack* is the engine for the VCV open-source virtual modular synthesizer. | |||
 | |||
This README includes instructions for building Rack from source. For information about the software, go to https://vcvrack.com/. | |||
## The [Issue Tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) *is* the official developer's forum | |||
Bug reports, feature requests, and even *questions/discussions* are welcome on the GitHub Issue Tracker for all VCVRack repos. | |||
However, please search before posting to avoid duplicates, and limit to one issue per post. | |||
Please vote on feature requests by using the Thumbs Up/Down reaction on the first post. | |||
I rarely accept code contributions to Rack itself, so please notify me in advance if you wish to send a pull request. | |||
## Setting up your development environment | |||
Before building Rack, you must install build dependencies provided by your system's package manager. | |||
Rack's own dependencies (GLEW, glfw, etc) do not need to be installed on your system, since specific versions are compiled locally during the build process. | |||
However, you need proper tools to build Rack and these dependencies. | |||
### Mac | |||
Install [Xcode](https://developer.apple.com/xcode/). | |||
Using [Homebrew](https://brew.sh/), install the build dependencies. | |||
``` | |||
brew install git wget cmake autoconf automake libtool | |||
``` | |||
### Windows | |||
Install [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell (not the default MSYS shell). | |||
``` | |||
pacman -S git wget make tar unzip zip mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake autoconf automake mingw-w64-x86_64-libtool | |||
``` | |||
### Linux | |||
On Arch Linux: | |||
``` | |||
pacman -S git wget gcc make cmake tar unzip zip curl | |||
``` | |||
On Ubuntu 16.04: | |||
``` | |||
sudo apt install git curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev | |||
``` | |||
## Building | |||
*If the build fails for you, please report the issue with a detailed error message to help the portability of Rack.* | |||
Clone this repository with `git clone https://github.com/VCVRack/Rack.git` and `cd Rack`. | |||
Make sure there are no spaces in your path, as this breaks many build systems. | |||
Clone submodules. | |||
git submodule update --init --recursive | |||
Build dependencies locally. | |||
You may use make's `-j$(nproc)` flag to parallelize builds across all your CPU cores. | |||
make dep | |||
You may use `make dep RTAUDIO_ALL_APIS=1` to attempt to build with all audio driver APIs enabled for your operating system, although this is unsupported. | |||
You should see a message that all dependencies built successfully. | |||
Build Rack. | |||
make | |||
Run Rack. | |||
make run | |||
## Building plugins | |||
Be sure to check out and build the version of Rack you wish to build your plugins against. | |||
You must clone the plugin in Rack's `plugins/` directory, e.g. | |||
cd plugins | |||
git clone https://github.com/VCVRack/Fundamental.git | |||
Clone submodules. | |||
cd Fundamental | |||
git submodule update --init --recursive | |||
Build plugin. | |||
make dep | |||
make | |||
## Licenses | |||
All **source code** in this repository is licensed under [BSD-3-Clause](LICENSE.txt) by [Andrew Belt](https://andrewbelt.name/). | |||
**Component Library graphics** in `res/ComponentLibrary` are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) by [Grayscale](http://grayscale.info/). Commercial plugins must request a commercial license to use Component Library graphics by emailing contact@vcvrack.com. | |||
**Core** panel graphics in `res/Core` are copyright © 2017 Grayscale. You may not create derivative works of Core panels. | |||
The **VCV logo and icon** are copyright © 2017 Andrew Belt and may not be used in derivative works. | |||
The **"VCV" name** is trademarked and may not be used for unofficial products. However, it is acceptable to use the phrase "for VCV Rack" for promotion of your plugin. For all other purposes, email contact@vcvrack.com. |
@@ -0,0 +1,289 @@ | |||
VeeSeeVST Rack VST 2.4 Plugin -- July 2nd, 2018 | |||
=============================================== | |||
!!!------------------------------------------------------------------------------ | |||
!!! ***** THIS IS NOT AN OFFICIAL VCV RACK RELEASE ***** !!! | |||
!!! Please DO NOT contact the VCV Rack team if you need any support !!! | |||
!!! Instead, go to https://www.kvraudio.com/forum/viewtopic.php?f=23&t=507216 !!! | |||
--------------------------------------------------------------------------------- | |||
This is a quick'n'dirty adaption of VCV Rack 0.6.1 for the VST2 format. | |||
+ supports multiple instances (that was quite a lot of work..) | |||
+ supports VST MIDI input | |||
+ supports up to 8 audio outputs | |||
+ supports up to 8 audio inputs | |||
+ support VST program chunks (=> patches are saved with the DAW's project file or as .fxp files) | |||
- does not support plugin DLLs due to VCV Rack's architecture which prevents this when it is run as a plugin itself | |||
- future releases will contain additional (open source) add-ons modules | |||
Here's a demo video of it: https://vimeo.com/277703414 | |||
Tested in | |||
- Eureka (my own work-in-progress VST host) | |||
- Cockos Reaper | |||
- Propellerhead Reason 10 | |||
The VST2 plugin includes the following add-on modules: | |||
- AS.ADSR | |||
- AS.AtNuVrTr | |||
- AS.BPMCalc | |||
- AS.BPMClock | |||
- AS.BlankPanel4 | |||
- AS.BlankPanel6 | |||
- AS.BlankPanel8 | |||
- AS.BlankPanelSpecial | |||
- AS.Cv2T | |||
- AS.DelayPlusFx | |||
- AS.DelayPlusStereoFx | |||
- AS.Flow | |||
- AS.KillGate | |||
- AS.LaunchGate | |||
- AS.Merge2.5 | |||
- AS.Mixer8ch | |||
- AS.MonoVUmeter | |||
- AS.Multiple2.5 | |||
- AS.PhaserFx | |||
- AS.QuadVCA | |||
- AS.ReverbFx | |||
- AS.ReverbStereoFx | |||
- AS.SEQ16 | |||
- AS.SawOsc | |||
- AS.SignalDelay | |||
- AS.SineOsc | |||
- AS.Steps | |||
- AS.SuperDriveFx | |||
- AS.TremoloFx | |||
- AS.TremoloStereoFx | |||
- AS.TriLFO | |||
- AS.TriggersMKI | |||
- AS.TriggersMKII | |||
- AS.VCA | |||
- AS.WaveShaper | |||
- AS.StereoVUmeter | |||
- AudibleInstruments.Braids | |||
- AudibleInstruments.Elements | |||
- AudibleInstruments.Tides | |||
- AudibleInstruments.Clouds | |||
- AudibleInstruments.Warps | |||
- AudibleInstruments.Rings | |||
- AudibleInstruments.Links | |||
- AudibleInstruments.Kinks | |||
- AudibleInstruments.Shades | |||
- AudibleInstruments.Branches | |||
- AudibleInstruments.Blinds | |||
- AudibleInstruments.Veils | |||
- AudibleInstruments.Frames | |||
- Befaco.ABC | |||
- Befaco.DualAtenuverter | |||
- Befaco.EvenVCO | |||
- Befaco.Mixer | |||
- Befaco.Rampage | |||
- Befaco.SlewLimiter | |||
- Befaco.SpringReverb | |||
- Bogaudio.VCO | |||
- Bogaudio.XCO | |||
- Bogaudio.Additator | |||
- Bogaudio.FMOp | |||
- Bogaudio.LFO | |||
- Bogaudio.EightFO | |||
- Bogaudio.DADSRH | |||
- Bogaudio.DADSRHPlus | |||
- Bogaudio.DGate | |||
- Bogaudio.Shaper | |||
- Bogaudio.ShaperPlus | |||
- Bogaudio.ADSR | |||
- Bogaudio.Follow | |||
- Bogaudio.Mix4 | |||
- Bogaudio.Mix8 | |||
- Bogaudio.VCM | |||
- Bogaudio.Pan | |||
- Bogaudio.XFade | |||
- Bogaudio.VCA | |||
- Bogaudio.VCAmp | |||
- Bogaudio.Analyzer | |||
- Bogaudio.VU | |||
- Bogaudio.Detune | |||
- Bogaudio.Stack | |||
- Bogaudio.Reftone | |||
- Bogaudio.Bool | |||
- Bogaudio.CVD | |||
- Bogaudio.FlipFlop | |||
- Bogaudio.Manual | |||
- Bogaudio.Mult | |||
- Bogaudio.Noise | |||
- Bogaudio.Offset | |||
- Bogaudio.SampleHold | |||
- Bogaudio.Sums | |||
- Bogaudio.Switch | |||
- Bogaudio.Lag | |||
- Bogaudio.RM | |||
- Bogaudio.Test | |||
- Bogaudio.Test2 | |||
- Bogaudio.ThreeHP | |||
- Bogaudio.SixHP | |||
- Bogaudio.EightHP | |||
- Bogaudio.TenHP | |||
- Bogaudio.TwelveHP | |||
- Bogaudio.ThirteenHP | |||
- Bogaudio.FifteenHP | |||
- Bogaudio.EighteenHP | |||
- Bogaudio.TwentyHP | |||
- Bogaudio.TwentyTwoHP | |||
- Bogaudio.TwentyFiveHP | |||
- Bogaudio.ThirtyHP | |||
- cf.trSEQ | |||
- cf.LEDSEQ | |||
- cf.L3DS3Q | |||
- cf.SLIDERSEQ | |||
- cf.PLAYER | |||
- cf.STEPS | |||
- cf.METRO | |||
- cf.EACH | |||
- cf.FOUR | |||
- cf.PEAK | |||
- cf.MONO | |||
- cf.STEREO | |||
- cf.MASTER | |||
- cf.SUB | |||
- cf.CUBE | |||
- cf.PATCH | |||
- cf.LEDS | |||
- cf.DAVE | |||
- ESeries.E340 | |||
- ErraticInstruments.MPEToCV | |||
- ErraticInstruments.QuadMPEToCV | |||
- Fundamentals.8vert | |||
- Fundamentals.ADSR | |||
- Fundamentals.Delay | |||
- Fundamentals.LFO | |||
- Fundamentals.LFO2 | |||
- Fundamentals.Mutes | |||
- Fundamentals.SEQ3 | |||
- Fundamentals.SequentialSwitch1 | |||
- Fundamentals.SequentialSwitch2 | |||
- Fundamentals.Scope | |||
- Fundamentals.Unity | |||
- Fundamentals.VCA | |||
- Fundamentals.VCF | |||
- Fundamentals.VCMixer | |||
- Fundamentals.VCO | |||
- Fundamentals.VCO2 | |||
- HetrickCV.TwoToFour | |||
- HetrickCV.AnalogToDigital | |||
- HetrickCV.ASR | |||
- HetrickCV.Bitshift | |||
- HetrickCV.BlankPanel | |||
- HetrickCV.Boolean3 | |||
- HetrickCV.Comparator | |||
- HetrickCV.Contrast | |||
- HetrickCV.Crackle | |||
- HetrickCV.Delta | |||
- HetrickCV.DigitalToAnalog | |||
- HetrickCV.Dust | |||
- HetrickCV.Exponent | |||
- HetrickCV.FlipFlop | |||
- HetrickCV.FlipPan | |||
- HetrickCV.GateJunction | |||
- HetrickCV.LogicCombine | |||
- HetrickCV.RandomGates | |||
- HetrickCV.Rotator | |||
- HetrickCV.Scanner | |||
- HetrickCV.Waveshape | |||
- Koralfx.Beatovnik | |||
- Koralfx.Mixovnik | |||
- Koralfx.Nullovnik4 | |||
- Koralfx.Nullovnik6 | |||
- Koralfx.Presetovnik | |||
- Koralfx.Quantovnik | |||
- Koralfx.Scorovnik | |||
- LindenbergResearch.SimpleFilter | |||
- LindenbergResearch.MS20Filter | |||
- LindenbergResearch.AlmaFilter | |||
- LindenbergResearch.ReShaper | |||
- LindenbergResearch.BlankPanel | |||
- LindenbergResearch.BlankPanelM1 | |||
- Qwelk.Automaton | |||
- Qwelk.Byte | |||
- Qwelk.Chaos | |||
- Qwelk.Column | |||
- Qwelk.Gate | |||
- Qwelk.Or | |||
- Qwelk.Not | |||
- Qwelk.Xor | |||
- Qwelk.Mix | |||
- Qwelk.News | |||
- Qwelk.Scaler | |||
- Qwelk.Wrap | |||
- Qwelk.XFade | |||
- SonusModular.Addiction | |||
- SonusModular.Bitter | |||
- SonusModular.Bymidside | |||
- SonusModular.Campione | |||
- SonusModular.Chainsaw | |||
- SonusModular.Ctrl | |||
- SonusModular.Deathcrush | |||
- SonusModular.Harmony | |||
- SonusModular.Ladrone | |||
- SonusModular.Luppolo | |||
- SonusModular.Luppolo3 | |||
- SonusModular.Micromacro | |||
- SonusModular.Multimulti | |||
- SonusModular.Oktagon | |||
- SonusModular.Osculum | |||
- SonusModular.Paramath | |||
- SonusModular.Piconoise | |||
- SonusModular.Pusher | |||
- SonusModular.Ringo | |||
- SonusModular.Scramblase | |||
- SonusModular.Twoff | |||
- SonusModular.Yabp | |||
- SubmarineFree.AG106 | |||
- SubmarineFree.BB120 | |||
- SubmarineFree.FF110 | |||
- SubmarineFree.FF120 | |||
- SubmarineFree.FF212 | |||
- SubmarineFree.LA108 | |||
- SubmarineFree.LD106 | |||
- SubmarineFree.NG112 | |||
- SubmarineFree.OG106 | |||
- SubmarineFree.PG112 | |||
- SubmarineFree.PO101 | |||
- SubmarineFree.PO102 | |||
- SubmarineFree.PO204 | |||
- SubmarineFree.WK101 | |||
- SubmarineFree.WK205 | |||
- SubmarineFree.XF101 | |||
- SubmarineFree.XF102 | |||
- SubmarineFree.XF104 | |||
- SubmarineFree.XF201 | |||
- SubmarineFree.XF202 | |||
- SubmarineFree.XG106 | |||
- SubmarineFree.BP101 | |||
- SubmarineFree.BP102 | |||
- SubmarineFree.BP104 | |||
- SubmarineFree.BP108 | |||
- SubmarineFree.BP110 | |||
- SubmarineFree.BP112 | |||
- SubmarineFree.BP116 | |||
- SubmarineFree.BP120 | |||
- SubmarineFree.BP124 | |||
- SubmarineFree.BP132 | |||
- Template.MyModule | |||
- Valley.Topograph | |||
- Valley.UGraph | |||
- Valley.Dexter | |||
- Valley.Plateau | |||
Please notice that the Audible/Mutable Instruments modules appear under a different name in the UI. | |||
For example, "Clouds" is listed as "Texture Synthesizer". | |||
For more info about VCV rack, see https://vcvrack.com/ | |||
!!!------------------------------------------------------------------------------ | |||
!!! ***** THIS IS NOT AN OFFICIAL VCV RACK RELEASE ***** !!! | |||
!!! Please DO NOT contact the VCV Rack team if you need any support !!! | |||
!!! Instead, go to https://www.kvraudio.com/forum/viewtopic.php?f=23&t=507216 !!! | |||
--------------------------------------------------------------------------------- | |||
~bsp |
@@ -0,0 +1,54 @@ | |||
[0.000 info src/main.cpp:58] VeeSeeVST Rack 0.6.1 | |||
[0.000 info src/main.cpp:61] Global directory: f:\git\Rack\vst2_bin\/ | |||
[0.000 info src/main.cpp:62] Local directory: f:\git\Rack\vst2_bin\/ | |||
[0.000 info src/plugin.cpp:612] vcvrack: Loaded static plugin AS 0.6.1 | |||
[0.000 info src/plugin.cpp:612] vcvrack: Loaded static plugin AudibleInstruments 0.6.1 | |||
[0.001 info src/plugin.cpp:612] vcvrack: Loaded static plugin Befaco 0.6.1 | |||
[0.001 info src/plugin.cpp:612] vcvrack: Loaded static plugin Bogaudio 0.6.1 | |||
[0.001 info src/plugin.cpp:612] vcvrack: Loaded static plugin cf 0.6.1 | |||
[0.001 info src/plugin.cpp:612] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin ESeries 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin Fundamental 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin HetrickCV 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin LindenbergResearch 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin Qwelk 0.6.1 | |||
[0.002 info src/plugin.cpp:612] vcvrack: Loaded static plugin SonusModular 0.6.1 | |||
[0.003 info src/plugin.cpp:612] vcvrack: Loaded static plugin SubmarineFree 0.6.1 | |||
[0.003 info src/plugin.cpp:612] vcvrack: Loaded static plugin Template 0.6.1 | |||
[0.003 info src/plugin.cpp:612] vcvrack: Loaded static plugin Valley 0.6.1 | |||
[0.003 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_146097_cc.svg | |||
[0.003 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_31859_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_1343816_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_1343811_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_1084369_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_1745061_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_1240789_cc.svg | |||
[0.004 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_305536_cc.svg | |||
[0.005 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/icons/noun_468341_cc.svg | |||
[0.182 info src/window.cpp:690] Loaded font f:\git\Rack\vst2_bin\/res/fonts/DejaVuSans.ttf | |||
[0.284 info src/app/RackWidget.cpp:192] Loading patch from string | |||
[0.286 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/Core/AudioInterface.svg | |||
[0.286 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg | |||
[0.286 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/ComponentLibrary/PJ301M.svg | |||
[0.286 info src/window.cpp:690] Loaded font f:\git\Rack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf | |||
[0.287 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/Core/MIDIToCVInterface.svg | |||
[0.290 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/XCO.svg | |||
[0.290 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg | |||
[0.290 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg | |||
[0.291 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg | |||
[0.291 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg | |||
[0.291 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg | |||
[0.291 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg | |||
[0.291 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg | |||
[0.292 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Bogaudio/res/port.svg | |||
[0.292 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Fundamental/res/VCA.svg | |||
[0.293 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg | |||
[0.293 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/Fundamental/res/VCF.svg | |||
[0.294 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg | |||
[0.295 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/AS/res/ADSR.svg | |||
[0.295 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/AS/res/as-hexscrew.svg | |||
[0.295 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/AS/res/as-SlidePot.svg | |||
[0.295 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg | |||
[0.296 info src/window.cpp:741] Loaded SVG f:\git\Rack\vst2_bin\plugins/AS/res/as-PJ301M.svg | |||
[3.464 info src/app/RackWidget.cpp:154] Saving patch to string |
@@ -0,0 +1,320 @@ | |||
### AS ### | |||
AS Logo/Monogram Copyright (c) 2017 Alfredo Santamaria , All rights reserved. | |||
Panel graphics in res/ are (c) 2017 | |||
Derivative works may not use the AS logo or panel graphics including custom component graphics (knobs, switches, screws, caps,etc.). | |||
### AS Modules License ### | |||
MIT License | |||
Copyright (c) 2017 Alfredo Santamaria, Copyright (c) 2017 AS Custom Works | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all | |||
copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
SOFTWARE. | |||
### FUNDAMENTAL ### | |||
Copyright (c) 2016 Andrew Belt (Source code licensed under BSD-3-Clause by Andrew Belt) | |||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
### Waveshaper code by HetrickCV ### | |||
Creative Commons Legal Code | |||
CC0 1.0 Universal | |||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE | |||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN | |||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS | |||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES | |||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS | |||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM | |||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED | |||
HEREUNDER. | |||
Statement of Purpose | |||
The laws of most jurisdictions throughout the world automatically confer | |||
exclusive Copyright and Related Rights (defined below) upon the creator | |||
and subsequent owner(s) (each and all, an "owner") of an original work of | |||
authorship and/or a database (each, a "Work"). | |||
Certain owners wish to permanently relinquish those rights to a Work for | |||
the purpose of contributing to a commons of creative, cultural and | |||
scientific works ("Commons") that the public can reliably and without fear | |||
of later claims of infringement build upon, modify, incorporate in other | |||
works, reuse and redistribute as freely as possible in any form whatsoever | |||
and for any purposes, including without limitation commercial purposes. | |||
These owners may contribute to the Commons to promote the ideal of a free | |||
culture and the further production of creative, cultural and scientific | |||
works, or to gain reputation or greater distribution for their Work in | |||
part through the use and efforts of others. | |||
For these and/or other purposes and motivations, and without any | |||
expectation of additional consideration or compensation, the person | |||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she | |||
is an owner of Copyright and Related Rights in the Work, voluntarily | |||
elects to apply CC0 to the Work and publicly distribute the Work under its | |||
terms, with knowledge of his or her Copyright and Related Rights in the | |||
Work and the meaning and intended legal effect of CC0 on those rights. | |||
1. Copyright and Related Rights. A Work made available under CC0 may be | |||
protected by copyright and related or neighboring rights ("Copyright and | |||
Related Rights"). Copyright and Related Rights include, but are not | |||
limited to, the following: | |||
i. the right to reproduce, adapt, distribute, perform, display, | |||
communicate, and translate a Work; | |||
ii. moral rights retained by the original author(s) and/or performer(s); | |||
iii. publicity and privacy rights pertaining to a person's image or | |||
likeness depicted in a Work; | |||
iv. rights protecting against unfair competition in regards to a Work, | |||
subject to the limitations in paragraph 4(a), below; | |||
v. rights protecting the extraction, dissemination, use and reuse of data | |||
in a Work; | |||
vi. database rights (such as those arising under Directive 96/9/EC of the | |||
European Parliament and of the Council of 11 March 1996 on the legal | |||
protection of databases, and under any national implementation | |||
thereof, including any amended or successor version of such | |||
directive); and | |||
vii. other similar, equivalent or corresponding rights throughout the | |||
world based on applicable law or treaty, and any national | |||
implementations thereof. | |||
2. Waiver. To the greatest extent permitted by, but not in contravention | |||
of, applicable law, Affirmer hereby overtly, fully, permanently, | |||
irrevocably and unconditionally waives, abandons, and surrenders all of | |||
Affirmer's Copyright and Related Rights and associated claims and causes | |||
of action, whether now known or unknown (including existing as well as | |||
future claims and causes of action), in the Work (i) in all territories | |||
worldwide, (ii) for the maximum duration provided by applicable law or | |||
treaty (including future time extensions), (iii) in any current or future | |||
medium and for any number of copies, and (iv) for any purpose whatsoever, | |||
including without limitation commercial, advertising or promotional | |||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each | |||
member of the public at large and to the detriment of Affirmer's heirs and | |||
successors, fully intending that such Waiver shall not be subject to | |||
revocation, rescission, cancellation, termination, or any other legal or | |||
equitable action to disrupt the quiet enjoyment of the Work by the public | |||
as contemplated by Affirmer's express Statement of Purpose. | |||
3. Public License Fallback. Should any part of the Waiver for any reason | |||
be judged legally invalid or ineffective under applicable law, then the | |||
Waiver shall be preserved to the maximum extent permitted taking into | |||
account Affirmer's express Statement of Purpose. In addition, to the | |||
extent the Waiver is so judged Affirmer hereby grants to each affected | |||
person a royalty-free, non transferable, non sublicensable, non exclusive, | |||
irrevocable and unconditional license to exercise Affirmer's Copyright and | |||
Related Rights in the Work (i) in all territories worldwide, (ii) for the | |||
maximum duration provided by applicable law or treaty (including future | |||
time extensions), (iii) in any current or future medium and for any number | |||
of copies, and (iv) for any purpose whatsoever, including without | |||
limitation commercial, advertising or promotional purposes (the | |||
"License"). The License shall be deemed effective as of the date CC0 was | |||
applied by Affirmer to the Work. Should any part of the License for any | |||
reason be judged legally invalid or ineffective under applicable law, such | |||
partial invalidity or ineffectiveness shall not invalidate the remainder | |||
of the License, and in such case Affirmer hereby affirms that he or she | |||
will not (i) exercise any of his or her remaining Copyright and Related | |||
Rights in the Work or (ii) assert any associated claims and causes of | |||
action with respect to the Work, in either case contrary to Affirmer's | |||
express Statement of Purpose. | |||
4. Limitations and Disclaimers. | |||
a. No trademark or patent rights held by Affirmer are waived, abandoned, | |||
surrendered, licensed or otherwise affected by this document. | |||
b. Affirmer offers the Work as-is and makes no representations or | |||
warranties of any kind concerning the Work, express, implied, | |||
statutory or otherwise, including without limitation warranties of | |||
title, merchantability, fitness for a particular purpose, non | |||
infringement, or the absence of latent or other defects, accuracy, or | |||
the present or absence of errors, whether or not discoverable, all to | |||
the greatest extent permissible under applicable law. | |||
c. Affirmer disclaims responsibility for clearing rights of other persons | |||
that may apply to the Work or any use thereof, including without | |||
limitation any person's Copyright and Related Rights in the Work. | |||
Further, Affirmer disclaims responsibility for obtaining any necessary | |||
consents, permissions or other rights required for any use of the | |||
Work. | |||
d. Affirmer understands and acknowledges that Creative Commons is not a | |||
party to this document and has no duty or obligation with respect to | |||
this CC0 or use of the Work. | |||
### Portions of code from Mental ### | |||
Copyright (c) 2017 Strum strum@softhome.net , All rights reserved. | |||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
### seq-16, 8ch mixer and phaser portions of code from Autodafe ### | |||
Copyright (c) 2016 Antonio Grazioli (AUtodafe) is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
### Portions of code from martin-lueders/ML_modules ### | |||
BSD 3-Clause License | |||
Copyright (c) 2017, Martin Lueders | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are met: | |||
* Redistributions of source code must retain the above copyright notice, this | |||
list of conditions and the following disclaimer. | |||
* Redistributions in binary form must reproduce the above copyright notice, | |||
this list of conditions and the following disclaimer in the documentation | |||
and/or other materials provided with the distribution. | |||
* Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
### Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain ### | |||
----------------------------------------------------------------------- | |||
Written by Jezar at Dreampoint - http://www.dreampoint.co.uk | |||
Introduction | |||
------------ | |||
Hello. | |||
I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later... | |||
In this zip file you will find two folders of C++ source code: | |||
"Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL. | |||
"FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple. | |||
Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead. | |||
Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves. | |||
Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code. | |||
Technical Explanation | |||
--------------------- | |||
Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect. | |||
Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers. | |||
Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices. | |||
Background | |||
---------- | |||
Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming. | |||
In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it. | |||
Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms. | |||
Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances. | |||
HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it. | |||
Disclaimer | |||
---------- | |||
This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit. | |||
I hope this code is useful and interesting to you all! | |||
I hope you have lots of fun experimenting with it and make good products! | |||
Very best regards, | |||
Jezar. | |||
Technology Consultant | |||
Dreampoint Design and Engineering | |||
http://www.dreampoint.co.uk | |||
//ends | |||
### BPM detect portions of code by Tomasz Sosnowski - KoralFX | |||
Copyright (c) 2018, Tomasz Sosnowski - KoralFX | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are met: | |||
* Redistributions of source code must retain the above copyright notice, this | |||
list of conditions and the following disclaimer. | |||
* Redistributions in binary form must reproduce the above copyright notice, | |||
this list of conditions and the following disclaimer in the documentation | |||
and/or other materials provided with the distribution. | |||
* Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,251 @@ | |||
# AS modules for VCV Rack | |||
AS is a collection of modules for [VCV Rack](https://vcvrack.com/) by Alfredo Santamaria, Need a custom work?, you can find me at [Hakken.com.mx](http://www.hakken.com.mx/). | |||
AS Logo/Monogram Copyright (c) 2017 Alfredo Santamaria , All rights reserved. | |||
Panel graphics in res/ are © 2017 | |||
Derivative works may not use the AS logo or panel graphics including custom component graphics (knobs, switches, screws, caps,etc.). | |||
### Releases | |||
AS is compatible with VCV Rack 0.6.X. releases, (see previous releases for 0.5.X. binaries and source files). You can download Mac, Win and Linux binary files and source on the [Release Page](https://github.com/AScustomWorks/as/releases) | |||
If you enjoy those modules you can support the development by making a donation, it will be appreciated!. Here's the link: [DONATE](https://www.paypal.me/frederius/) | |||
 | |||
# AS modules | |||
### ADSR | |||
Fundamental ADSR module. Mods: graphics, sliders instead of knobs to provide faster visual input. | |||
### VCA | |||
Fundamental VCA module. Mods: graphics, sliders instead of knobs to provide faster visual input, one input + lin/exp switch instead of two separate inputs. | |||
V 0.5.3: Code fix, now the VCA module works ok when there's no envelope input present. | |||
### QuadVCA/Mixer | |||
AS VCA module x 4, plus mixer functionality (user request). | |||
V 0.5.5: First relase of this module. | |||
### BPM Clock | |||
Strum's Mental VCV Master Clock. Mods: graphics, reset trigger input and output. | |||
V 0.5.2: all the trigger signals are 10v now, it seems that some other modules don't work fine with the correct voltages. | |||
V 0.5.4: Fixed a reset signal issue. | |||
V 0.5.5: 16th clock output now sends unipolar signal, just as the other outputs. | |||
V 0.6.1: Now BPM Clock outputs a short length trigger signal, as most of the available clocks. | |||
V 0.6.2: Small fix on the reset signal length. | |||
V 0.6.5: Added a Regular/Extended switch to change the clock from 40-250 to 30-300 range. Had to add the switch instead of simply changing the default settings to avoid changing the bpm tempo on the patches already using the clock. | |||
V 0.6.6: Added a CV input for the "RUN" switch. | |||
V 0.6.7: Added a CV output for the "RUN" switch, sends a trigger signal on each press of the switch. | |||
### BPM to delay/hz calculator | |||
A BPM to delay/hz calculator to setup easier those nice delay effects. | |||
V 0.6.4: First relase of this module. | |||
V 0.6.5: Added an external input to detect a BPM from a LFO or some other sources, BPM detection code based on Koralfx Beatovnik from Tomek Sosnowski, nice work Tomek!. | |||
### 8 Channel Mixer | |||
Fundamental/Autodafe mixer module. Mods: graphics, sliders for channel volume, stereo or mono output(L channel outputs L+R signal if R channel is not active). Now with main mix mute button. Beware,the default setting for each channel volume is at 70% in stead of 0%. | |||
V 0.5.2: added MIX L & R input to chain mixers without giving up 2 mixer channels. | |||
### Multi 2x5 | |||
2x5 Signal multiplier. | |||
V 0.5.7 Module size reduced to 5HP | |||
### Merge 2x5 | |||
2x5 CV Signal merger. | |||
V 0.5.7: First relase of this module. | |||
### Mono VU Meter | |||
V 0.5.4, New module added, Mono VU Meter made to match the 8CH Mixer. | |||
### Stereo VU Meter | |||
V 0.5.3, New module added, Stereo VU Meter made to match the 8CH Mixer. | |||
### 16-step Sequencer | |||
Fundamental/Autodafe SEQ module. Mods: graphics, digital display to show the number of steps selected. | |||
V 0.5.2: added digital display to show current sequence step so you can run/stop the sequence and tune in the current step. | |||
V 0.5.3: added edit mode: manual trigger with current step selector buttons and blinking led light to highlight the current step. Send a row output to a NYSTHI Hot Tuna and enjoy precise step tuning! | |||
V 0.5.4: Exposed the trigger mode settings into the panel (contextual menu is still there but it won't change the mode) | |||
### TinySawish | |||
RODENTMODULES MuO. Mods: graphics, smaller panel size. | |||
V 0.5.4 Added dc blocker code, modified a bit the internal parameters. | |||
V 0.5.5 Extendend the freq range 1 octave below. | |||
V 0.5.7 Module size reduced to 4HP | |||
### TinySine | |||
VCV tutorial module. Mods: graphics, proper sine wave. | |||
V 0.5.7 Module size reduced to 4HP | |||
### TriLFO | |||
Fundamental LFO module. Mods:graphics, controls stripped to the basics but you get 3 LFOS on the same space. | |||
### AtNuVrTr Dual attenuverter module | |||
Just like Befaco Attenuverter module but with added cv inputs to modulate both Attenueverter and Offset parameters. | |||
V 0.6.1: First relase of this module. | |||
### Triggers REMOVED | |||
A couple of manual trigger buttons, one ON/OFF, one temporary, both with 4 trigger outputs, trigger volts knob going from 1 to 10 v output. | |||
(NOTICE: Triggers MKI will supersede Triggers, so Triggers will be removed from the plugin by v0.6 but you have time now to replace it on your current patches and keep everything working fine). | |||
### Triggers MKI | |||
A manual CV signal trigger module with latch and temporary triggers, volts knob lets you adjust the range from -10v to 10v output. | |||
V 0.5.7: First relase of this module. | |||
V 0.6.1: Changed the volts range to -10v +10v and now the display shows positive values in green, and negative values in red. | |||
### Triggers MKII | |||
A manual CV signal temporary trigger module with labeling integrated, so you remember where the signal is going. | |||
The labels list includes: | |||
"------", "MUTE"," SOLO"," RESET"," DRUMS"," KICK"," SNARE"," HIHAT"," CLAP"," PERC","BASS 1","BASS 2"," GTR 1", | |||
" GTR 2","LEAD 1","LEAD 2"," PAD 1"," PAD 2","CHORDS"," FX 1"," FX 2"," SEQ 1"," SEQ 2"," MIX 1"," MIX 2", | |||
" AUX 1"," AUX 2"," ON"," OFF"," START"," STOP"," PAUSE"," UP"," DOWN"," LEFT"," RIGHT", "RUN" | |||
V 0.5.7: First relase of this module. | |||
V 0.6.5: Added "RUN" label at the end of the list. | |||
### Steps | |||
Strum's Mental VCV Counters module. Mods: graphics, 3 counters, up to 64 steps each, added reset lights to the buttons. | |||
V 0.5.4: First relase of this module. | |||
V 0.5.5: code tweaks. | |||
### Launch Gate | |||
Delay the start of a flow of signals by a set number of clock ticks (TAOS request). | |||
V 0.5.5: First relase of this module. | |||
V 0.6.5: Now it features soft mute, so you can use it both for audio and cv signals without any switching noise. | |||
### Kill Gate | |||
Cut the flow of signals after a set number of clock ticks (TAOS request). | |||
V 0.5.6: First relase of this module. | |||
V 0.6.5: Now it features soft mute, so you can use it both for audio and cv signals without any switching noise. | |||
### Flow | |||
Cut the flow of signals with a switch or a cv signal (TAOS request). | |||
V 0.6.0: First relase of this module. | |||
V 0.6.5: Now it features soft mute, so you can use it both for audio and cv signals without any switching noise. | |||
### Signal Delay | |||
Delay the incomming CV signal by set milliseconds, with signal thru and delayed output. You can chain several Signal Delay modules together for unlimited length of delays. (TAOS request). | |||
V 0.5.5: First relase of this module. | |||
### CV 2 T | |||
CV to Trigger module. Feed a midi signal to the CV inputs and it will output one trigger signal when the incoming signal rises above 0v, and another trigger signal when the incoming signal returns to 0v. Useful to use your external hardware controller/keyboard as a trigger. | |||
V 0.6.7: First relase of this module. | |||
### Delay Plus | |||
Fundamental Delay module. Mods: graphics, digital display to show delay time in MS , wet signal send & return, bypass switch. | |||
V 0.5.4: Updated look. | |||
V 0.5.5 CHanged the time knob reading from exponential to linear, now you can set any value precisely at the whole 1 to 10k ms range. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise. | |||
### Delay Plus Stereo | |||
Stereo version of the Delay Plus module, with link switches for Feedback and Color parameters. If the respective switch is active, the left knob controls the changes for both left and right channels. | |||
V 0.6.7: First relase of this module. | |||
### Phaser | |||
Autodafe's Phaser Fx module. Mods: graphics, bypass switch. | |||
V 0.5.4: Added CV inputs for each parameter, updated look. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise. | |||
### SuperDrive | |||
Overdrive/clipping Fx module with DRIVE, TONE and GAIN parameters, to get those acid bass lines we all love!. | |||
V 0.5.4: First relase of this module. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise(Results may change according to signal levels). | |||
### Reverb | |||
Reverb Fx module based on ML_modules reverb and Freeverb code, with DECAY, DAMP and BLEND parameters, a little bit tamed Reverb with mixed output signal. | |||
0.5.4: First relase of this module. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise. | |||
### Reverb Stereo | |||
Stereo version of the Reverb module, BLEND is replaced with a DRY /WET knob, to work better when used with a mixer send/return ports. | |||
V 0.6.7: First relase of this module. | |||
### Tremolo | |||
Tremolo Fx module with SHAPE, SPEED and BLEND parameters, and a phase switch (set your effect, duplicate the module and invert the phase for stereo tremolo setup)your Tremolo to go!. | |||
0.5.6: First relase of this module. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise. | |||
### Tremolo Stereo | |||
Stereo version of the Tremolo module, use the phase switch to change from synced L and R channels to inverted phase, to get stereo panning effect. | |||
V 0.6.7: First relase of this module. | |||
### WaveShaper | |||
HetrickCV Wave Shaper module. Mods: graphics, bypass switch. | |||
V 0.5.2: added back the voltage range switch. | |||
V 0.5.4: Updated look. | |||
V 0.6.3: bypass CV input added. | |||
V 0.6.5: Now it features soft bypass to avoid switching noise. | |||
### Blank Panel | |||
Blank panels in 4, 6 & 8 HP. | |||
New special "blank" panel 8 HP added for v0.6.0. | |||
### Have fun! |
@@ -0,0 +1,452 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="120" | |||
height="380" | |||
viewBox="0 0 31.75 100.54166" | |||
version="1.1" | |||
id="svg8033" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="ADSR.svg"> | |||
<defs | |||
id="defs8027" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="2.9710526" | |||
inkscape:cx="92.311767" | |||
inkscape:cy="136.14704" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer2" | |||
showgrid="false" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="0" | |||
inkscape:window-width="1243" | |||
inkscape:window-height="1384" | |||
inkscape:window-x="116" | |||
inkscape:window-y="5" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
showguides="true" | |||
inkscape:guide-bbox="true" /> | |||
<metadata | |||
id="metadata8030"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<g | |||
inkscape:groupmode="layer" | |||
id="layer2" | |||
inkscape:label="background" | |||
transform="translate(0,-8.0744425e-6)"> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#44423e;fill-opacity:1;stroke:none;stroke-width:0.25762081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1709" | |||
width="31.75" | |||
height="100.54166" | |||
x="3.6811375e-06" | |||
y="8.0744421e-06" /> | |||
<g | |||
transform="matrix(2.0981223,0,0,2.0981223,-109.95818,-706.23)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /> | |||
</g> | |||
</g> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.25762081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1759" | |||
width="31.75" | |||
height="3.96875" | |||
x="3.6811375e-06" | |||
y="96.572922" /> | |||
<rect | |||
y="8.0744421e-06" | |||
x="3.6811375e-06" | |||
height="3.96875" | |||
width="31.75" | |||
id="rect1806" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.25762081;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,3.6811375e-6,8.0744425e-6)" | |||
id="g1810"> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 18.51,2.7999981 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 A 5,5 0 0 1 26.88,12.239998 H 18.51 A 5,5 0 0 1 13.25,7.5199981 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect861" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 18.51,368.28 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.72 H 18.51 A 5,5 0 0 1 13.24,373 v 0 a 5,5 0 0 1 5.27,-4.72 z" | |||
class="cls-3" | |||
id="rect863" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,3.6811375e-6,8.0744425e-6)" | |||
id="g1814"> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 93.31,2.7999981 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.7199999 H 93.31 A 5,5 0 0 1 88.05,7.5199981 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect1497" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 93.31,368.28 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.72 H 93.31 A 5,5 0 0 1 88.05,373 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect1499" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<circle | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.19682446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="path1686" | |||
cx="15.875004" | |||
cy="95.218742" | |||
r="4" /> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_2-2" | |||
data-name="Layer 2" | |||
transform="matrix(0.17622025,0,0,0.17622025,5.3063379,31.483553)"> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_1-2-6" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path8-4-6" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
</g> | |||
<g | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(-84.642804,-25.235125)"> | |||
<g | |||
id="g1684" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(0,-2.2168714)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9367" | |||
d="m 88.394439,108.58996 c 0.185455,0 0.336405,-0.0647 0.444225,-0.13801 0.05175,-0.0302 0.07763,-0.0776 0.07763,-0.13801 v -0.3364 c 0,-0.0604 -0.04744,-0.11214 -0.112133,-0.11214 H 88.45482 c -0.05175,0 -0.0992,0.0431 -0.0992,0.0992 0,0.0518 0.04744,0.0949 0.0992,0.0949 h 0.250145 v 0.2329 c -0.07763,0.0604 -0.185452,0.0949 -0.306213,0.0949 -0.25446,0 -0.426974,-0.18977 -0.426974,-0.44854 0,-0.24152 0.176826,-0.44423 0.409723,-0.44423 0.133699,0 0.224269,0.0388 0.3019,0.0992 0.02156,0.0129 0.04313,0.0259 0.06901,0.0259 0.06038,0 0.112136,-0.0517 0.112136,-0.11213 0,-0.0431 -0.02588,-0.0733 -0.04744,-0.0906 -0.112136,-0.0819 -0.241522,-0.12508 -0.426974,-0.12508 -0.379534,0 -0.64693,0.29759 -0.64693,0.64693 v 0.004 c 0,0.3666 0.254458,0.64693 0.651243,0.64693 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9363" | |||
d="m 89.154246,108.47352 c 0,0.0604 0.04744,0.1035 0.10351,0.1035 0.04744,0 0.08626,-0.0259 0.103508,-0.069 l 0.103507,-0.24152 H 90.0772 l 0.10351,0.2329 c 0.01725,0.0474 0.05175,0.0776 0.10782,0.0776 0.05607,0 0.103511,-0.0474 0.103511,-0.10351 0,-0.0173 -0.0043,-0.0345 -0.01294,-0.0474 l -0.465791,-1.04371 c -0.02588,-0.0518 -0.06901,-0.0863 -0.1337,-0.0863 h -0.0086 c -0.06469,0 -0.107823,0.0345 -0.133699,0.0863 l -0.465791,1.04371 c -0.0086,0.0173 -0.01725,0.0345 -0.01725,0.0474 z m 0.396785,-0.40541 0.219956,-0.50461 0.219956,0.50461 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9359" | |||
d="m 90.833858,108.4692 c 0,0.0604 0.05175,0.10782 0.112133,0.10782 0.06038,0 0.112136,-0.0474 0.112136,-0.10782 v -0.95314 h 0.306213 c 0.05607,0 0.0992,-0.0474 0.0992,-0.0992 0,-0.0561 -0.04313,-0.10351 -0.0992,-0.10351 h -0.836698 c -0.05607,0 -0.09919,0.0474 -0.09919,0.10351 0,0.0517 0.04313,0.0992 0.09919,0.0992 h 0.306216 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9355" | |||
d="m 91.840407,108.5684 h 0.741815 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0517 -0.04744,-0.0992 -0.09919,-0.0992 H 91.95254 v -0.33641 h 0.53911 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.1035 -0.0992,-0.1035 h -0.53911 v -0.32347 h 0.621054 c 0.05175,0 0.09489,-0.0431 0.09489,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09489,-0.0992 h -0.733187 c -0.06038,0 -0.112136,0.0474 -0.112136,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112136,0.11213 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
</g> | |||
<g | |||
id="g1692" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(0,-2.2168714)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9335" | |||
d="m 97.094056,108.4692 c 0,0.0604 0.05175,0.10782 0.112136,0.10782 0.06038,0 0.112133,-0.0474 0.112133,-0.10782 v -0.34071 h 0.276024 l 0.306215,0.39247 c 0.02588,0.0345 0.05607,0.0561 0.107821,0.0561 0.05175,0 0.10351,-0.0388 0.10351,-0.10351 0,-0.0345 -0.01294,-0.0561 -0.0345,-0.0819 l -0.24152,-0.3019 c 0.168201,-0.0561 0.284649,-0.17683 0.284649,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.10351,-0.27171 -0.07763,-0.0776 -0.202703,-0.12508 -0.362281,-0.12508 h -0.448537 c -0.06038,0 -0.112136,0.0474 -0.112136,0.11214 z m 0.224269,-0.53479 v -0.42267 h 0.319153 c 0.163889,0 0.258773,0.0733 0.258773,0.21134 0,0.12938 -0.0992,0.21133 -0.258773,0.21133 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9331" | |||
d="m 98.5667,108.5684 h 0.741815 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0517 -0.04744,-0.0992 -0.09919,-0.0992 h -0.629682 v -0.33641 h 0.53911 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.1035 -0.0992,-0.1035 h -0.53911 v -0.32347 h 0.621054 c 0.05175,0 0.09488,-0.0431 0.09488,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09488,-0.0992 H 98.5667 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112135,0.11213 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9327" | |||
d="m 100.03716,108.4692 c 0,0.0604 0.0517,0.10782 0.11213,0.10782 0.0604,0 0.11213,-0.0474 0.11213,-0.10782 v -0.95314 h 0.30622 c 0.0561,0 0.0992,-0.0474 0.0992,-0.0992 0,-0.0561 -0.0431,-0.10351 -0.0992,-0.10351 h -0.836699 c -0.05607,0 -0.09919,0.0474 -0.09919,0.10351 0,0.0517 0.04313,0.0992 0.09919,0.0992 h 0.306219 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9323" | |||
d="m 100.9314,108.4692 c 0,0.0604 0.0517,0.10782 0.11214,0.10782 0.0604,0 0.11213,-0.0474 0.11213,-0.10782 v -0.34071 h 0.27602 l 0.30622,0.39247 c 0.0259,0.0345 0.0561,0.0561 0.10782,0.0561 0.0517,0 0.10351,-0.0388 0.10351,-0.10351 0,-0.0345 -0.0129,-0.0561 -0.0345,-0.0819 l -0.24152,-0.3019 c 0.1682,-0.0561 0.28465,-0.17683 0.28465,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.10351,-0.27171 -0.0776,-0.0776 -0.2027,-0.12508 -0.36228,-0.12508 h -0.44854 c -0.0604,0 -0.11213,0.0474 -0.11213,0.11214 z m 0.22427,-0.53479 v -0.42267 h 0.31915 c 0.16389,0 0.25878,0.0733 0.25878,0.21134 0,0.12938 -0.0992,0.21133 -0.25878,0.21133 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9319" | |||
d="m 102.29892,108.4692 c 0,0.0604 0.0517,0.10782 0.11213,0.10782 0.0604,0 0.11214,-0.0474 0.11214,-0.10782 v -1.05665 c 0,-0.0604 -0.0518,-0.10782 -0.11214,-0.10782 -0.0604,0 -0.11213,0.0474 -0.11213,0.10782 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9315" | |||
d="m 103.50159,108.58996 c 0.18545,0 0.3364,-0.0647 0.44422,-0.13801 0.0517,-0.0302 0.0776,-0.0776 0.0776,-0.13801 v -0.3364 c 0,-0.0604 -0.0474,-0.11214 -0.11213,-0.11214 h -0.34934 c -0.0518,0 -0.0992,0.0431 -0.0992,0.0992 0,0.0518 0.0474,0.0949 0.0992,0.0949 h 0.25014 v 0.2329 c -0.0776,0.0604 -0.18545,0.0949 -0.30621,0.0949 -0.25446,0 -0.42698,-0.18977 -0.42698,-0.44854 0,-0.24152 0.17683,-0.44423 0.40973,-0.44423 0.1337,0 0.22427,0.0388 0.3019,0.0992 0.0216,0.0129 0.0431,0.0259 0.069,0.0259 0.0604,0 0.11213,-0.0517 0.11213,-0.11213 0,-0.0431 -0.0259,-0.0733 -0.0474,-0.0906 -0.11213,-0.0819 -0.24152,-0.12508 -0.42697,-0.12508 -0.37953,0 -0.64693,0.29759 -0.64693,0.64693 v 0.004 c 0,0.3666 0.25446,0.64693 0.65124,0.64693 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
</g> | |||
<g | |||
id="g1626" | |||
transform="translate(0,-8.1434476)"> | |||
<g | |||
transform="translate(-15.483406,12.082115)" | |||
id="g1710"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 103.55021,37.705675 c 0,0.07332 0.0517,0.129387 0.12507,0.129387 0.0561,0 0.10351,-0.0345 0.12507,-0.08626 l 0.12939,-0.301901 h 0.75044 l 0.12507,0.293275 c 0.0259,0.05607 0.069,0.09488 0.1337,0.09488 0.0733,0 0.12939,-0.06038 0.12939,-0.133699 0,-0.01725 -0.004,-0.0345 -0.0173,-0.05607 l -0.57361,-1.280923 c -0.0302,-0.06901 -0.082,-0.112134 -0.15958,-0.112134 h -0.0129 c -0.0776,0 -0.1337,0.04313 -0.16389,0.112134 l -0.57361,1.280923 c -0.0129,0.02156 -0.0172,0.04313 -0.0172,0.06038 z m 0.48304,-0.49598 0.27171,-0.625366 0.27171,0.625366 z m 0,0" | |||
id="path8947" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 105.59003,37.69705 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 0.0733,0 0.13801,-0.06038 0.13801,-0.138012 v -1.168788 h 0.37522 c 0.069,0 0.12507,-0.05607 0.12507,-0.125074 0,-0.06901 -0.0561,-0.125073 -0.12507,-0.125073 h -1.02646 c -0.069,0 -0.12508,0.05607 -0.12508,0.125073 0,0.06901 0.0561,0.125074 0.12508,0.125074 h 0.37522 z m 0,0" | |||
id="path8943" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 107.11235,37.69705 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 0.0733,0 0.13802,-0.06038 0.13802,-0.138012 v -1.168788 h 0.37522 c 0.069,0 0.12507,-0.05607 0.12507,-0.125074 0,-0.06901 -0.0561,-0.125073 -0.12507,-0.125073 h -1.02647 c -0.069,0 -0.12507,0.05607 -0.12507,0.125073 0,0.06901 0.0561,0.125074 0.12507,0.125074 h 0.37522 z m 0,0" | |||
id="path8939" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="translate(-8.553806,-5.7047685)" | |||
id="g1715"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 103.46161,55.466665 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 h 0.43991 c 0.48304,0 0.81945,-0.336404 0.81945,-0.772004 v -0.0043 c 0,-0.4356 -0.33641,-0.767692 -0.81945,-0.767692 h -0.43991 c -0.0776,0 -0.13801,0.05607 -0.13801,0.1337 z m 0.27171,-0.107823 v -1.05234 h 0.30621 c 0.32347,0 0.5348,0.224271 0.5348,0.526171 v 0.0043 c 0,0.3019 -0.21133,0.521856 -0.5348,0.521856 z m 0,0" | |||
id="path8935" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 105.37433,55.604677 h 0.91002 c 0.0647,0 0.12076,-0.05175 0.12076,-0.120761 0,-0.06901 -0.0561,-0.120758 -0.12076,-0.120758 h -0.77632 v -0.418349 h 0.66418 c 0.069,0 0.12077,-0.05175 0.12077,-0.116448 0,-0.06901 -0.0518,-0.125074 -0.12077,-0.125074 h -0.66418 v -0.401098 h 0.76338 c 0.069,0 0.12076,-0.05175 0.12076,-0.120758 0,-0.06901 -0.0517,-0.120762 -0.12076,-0.120762 h -0.89708 c -0.0776,0 -0.13801,0.05607 -0.13801,0.1337 v 1.272296 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 z m 0,0" | |||
id="path8931" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 107.44279,55.630554 c 0.25015,0 0.41835,-0.07763 0.56499,-0.207018 0.0216,-0.02156 0.0431,-0.05607 0.0431,-0.09919 0,-0.06469 -0.0604,-0.125074 -0.12939,-0.125074 -0.0345,0 -0.0604,0.01294 -0.0819,0.03019 -0.11213,0.09488 -0.22427,0.15095 -0.38384,0.15095 -0.29759,0 -0.51324,-0.245834 -0.51324,-0.547735 v -0.0043 c 0,-0.301901 0.21565,-0.547735 0.51324,-0.547735 0.14663,0 0.25877,0.05607 0.36659,0.142324 0.0173,0.01294 0.0431,0.02588 0.0819,0.02588 0.0733,0 0.1337,-0.06038 0.1337,-0.133696 0,-0.04744 -0.0216,-0.08626 -0.0517,-0.107823 -0.1337,-0.103508 -0.29327,-0.176829 -0.53048,-0.176829 -0.4701,0 -0.79788,0.362283 -0.79788,0.802195 v 0.0043 c 0,0.444225 0.3364,0.793568 0.78494,0.793568 z m 0,0" | |||
id="path8927" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="translate(-1.704666,-23.310614)" | |||
id="g1720"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 104.14855,73.229933 c 0.32346,0 0.55205,-0.172514 0.55205,-0.461476 v -0.0043 c 0,-0.254461 -0.1682,-0.370909 -0.49598,-0.452853 -0.29759,-0.06901 -0.37091,-0.125074 -0.37091,-0.24152 v -0.0043 c 0,-0.10351 0.0949,-0.185454 0.25446,-0.185454 0.12076,0 0.23289,0.04313 0.35366,0.116448 0.0216,0.01294 0.0431,0.02156 0.0733,0.02156 0.069,0 0.12507,-0.05607 0.12507,-0.125074 0,-0.05175 -0.0259,-0.09057 -0.0604,-0.10782 -0.13801,-0.09489 -0.29328,-0.146638 -0.48735,-0.146638 -0.30622,0 -0.53049,0.185452 -0.53049,0.448538 v 0.0043 c 0,0.284649 0.18546,0.383847 0.51755,0.461478 0.28465,0.06901 0.34934,0.129384 0.34934,0.237207 v 0.0043 c 0,0.116448 -0.10782,0.194079 -0.27602,0.194079 -0.16821,0 -0.30622,-0.05607 -0.43129,-0.159575 -0.0173,-0.01294 -0.0431,-0.02156 -0.082,-0.02156 -0.069,0 -0.12507,0.05607 -0.12507,0.125074 0,0.04313 0.0216,0.08194 0.0517,0.103511 0.17251,0.129383 0.37091,0.194077 0.58224,0.194077 z m 0,0" | |||
id="path8923" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 105.70536,73.234246 c 0.40541,0 0.66418,-0.232894 0.66418,-0.694373 v -0.75475 c 0,-0.07332 -0.0604,-0.133699 -0.13369,-0.133699 -0.0776,0 -0.13802,0.06038 -0.13802,0.133699 v 0.767691 c 0,0.284649 -0.14664,0.426974 -0.38816,0.426974 -0.24151,0 -0.39247,-0.15095 -0.39247,-0.439915 v -0.75475 c 0,-0.07332 -0.0561,-0.133699 -0.1337,-0.133699 -0.0776,0 -0.13801,0.06038 -0.13801,0.133699 v 0.767691 c 0,0.448538 0.25877,0.681432 0.65987,0.681432 z m 0,0" | |||
id="path8919" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 107.34137,73.229933 c 0.32347,0 0.55205,-0.172514 0.55205,-0.461476 v -0.0043 c 0,-0.254461 -0.1682,-0.370909 -0.49598,-0.452853 -0.29759,-0.06901 -0.37091,-0.125074 -0.37091,-0.24152 v -0.0043 c 0,-0.10351 0.0949,-0.185454 0.25446,-0.185454 0.12076,0 0.2329,0.04313 0.35366,0.116448 0.0216,0.01294 0.0431,0.02156 0.0733,0.02156 0.069,0 0.12507,-0.05607 0.12507,-0.125074 0,-0.05175 -0.0259,-0.09057 -0.0604,-0.10782 -0.13801,-0.09489 -0.29327,-0.146638 -0.48735,-0.146638 -0.30622,0 -0.53049,0.185452 -0.53049,0.448538 v 0.0043 c 0,0.284649 0.18546,0.383847 0.51755,0.461478 0.28465,0.06901 0.34934,0.129384 0.34934,0.237207 v 0.0043 c 0,0.116448 -0.10782,0.194079 -0.27602,0.194079 -0.1682,0 -0.30622,-0.05607 -0.43129,-0.159575 -0.0173,-0.01294 -0.0431,-0.02156 -0.082,-0.02156 -0.069,0 -0.12507,0.05607 -0.12507,0.125074 0,0.04313 0.0216,0.08194 0.0517,0.103511 0.17252,0.129383 0.37091,0.194077 0.58224,0.194077 z m 0,0" | |||
id="path8915" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="translate(5.131964,-40.914302)" | |||
id="g1725"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 103.63384,90.686993 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 0.0733,0 0.1337,-0.06038 0.1337,-0.138012 v -0.414036 h 0.34071 l 0.37522,0.478729 c 0.0345,0.04313 0.0733,0.07332 0.1337,0.07332 0.069,0 0.12939,-0.05175 0.12939,-0.129386 0,-0.03881 -0.0172,-0.06901 -0.0431,-0.103508 l -0.29328,-0.370906 c 0.20702,-0.06469 0.34935,-0.215646 0.34935,-0.461478 v -0.0043 c 0,-0.133699 -0.0474,-0.250148 -0.12939,-0.336405 -0.0992,-0.09488 -0.25015,-0.15095 -0.44423,-0.15095 h -0.55204 c -0.0776,0 -0.13802,0.05607 -0.13802,0.1337 z m 0.27171,-0.655555 v -0.517546 h 0.39678 c 0.19839,0 0.31915,0.09057 0.31915,0.25446 v 0.0043 c 0,0.159575 -0.12507,0.258773 -0.31915,0.258773 z m 0,0" | |||
id="path8911" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 105.42954,90.812067 h 0.91002 c 0.0647,0 0.12076,-0.05175 0.12076,-0.120761 0,-0.06901 -0.0561,-0.120759 -0.12076,-0.120759 h -0.77632 v -0.418348 h 0.66418 c 0.069,0 0.12076,-0.05175 0.12076,-0.116449 0,-0.06901 -0.0517,-0.125073 -0.12076,-0.125073 h -0.66418 v -0.401098 h 0.76338 c 0.069,0 0.12076,-0.05175 0.12076,-0.120759 0,-0.06901 -0.0517,-0.120761 -0.12076,-0.120761 h -0.89708 c -0.0776,0 -0.13801,0.05607 -0.13801,0.1337 v 1.272296 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 z m 0,0" | |||
id="path8907" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 106.81739,90.674055 c 0,0.07763 0.0604,0.138012 0.13801,0.138012 h 0.83239 c 0.069,0 0.12507,-0.05607 0.12507,-0.125074 0,-0.06901 -0.0561,-0.120761 -0.12507,-0.120761 H 107.0891 V 89.38882 c 0,-0.07332 -0.0604,-0.133699 -0.1337,-0.133699 -0.0776,0 -0.13801,0.06038 -0.13801,0.133699 z m 0,0" | |||
id="path8903" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</g> | |||
<g | |||
id="g1503" | |||
transform="matrix(0.90584922,0,0,0.9908646,9.4528518,3.8571261)" /> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,90.588027,19.654788)" | |||
id="g52" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 36.62,70.19 a 0.73,0.73 0 0 1 -0.27,0.57 0.91,0.91 0 0 1 -0.62,0.23 0.81,0.81 0 0 1 -0.43,-0.13 0.79,0.79 0 0 1 -0.31,-0.38 l -0.64,-1.42 h -4.06 l -0.64,1.42 A 0.81,0.81 0 0 1 29.34,70.86 0.8,0.8 0 0 1 28.9,70.99 0.94,0.94 0 0 1 28.28,70.76 0.72,0.72 0 0 1 28,70.19 1,1 0 0 1 28.1,69.81 L 31.34,63 a 0.94,0.94 0 0 1 0.4,-0.44 1.14,1.14 0 0 1 1.14,0 1.06,1.06 0 0 1 0.41,0.43 l 3.24,6.8 a 1,1 0 0 1 0.09,0.4 z m -5.7,-2.53 h 2.8 l -1.39,-3.12 z" | |||
transform="translate(-7.25,-14.98)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path44" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 37.88,70.72 a 0.88,0.88 0 0 1 -0.23,-0.65 v -6.71 a 0.79,0.79 0 0 1 0.88,-0.88 h 2.41 a 5.21,5.21 0 0 1 2.38,0.5 3.52,3.52 0 0 1 1.52,1.45 4.59,4.59 0 0 1 0.53,2.27 4.67,4.67 0 0 1 -0.52,2.3 3.48,3.48 0 0 1 -1.52,1.46 5.24,5.24 0 0 1 -2.39,0.5 h -2.41 a 0.88,0.88 0 0 1 -0.65,-0.24 z m 2.93,-1.28 a 2.4,2.4 0 0 0 2.7,-2.72 2.39,2.39 0 0 0 -2.7,-2.72 h -1.28 v 5.44 z" | |||
transform="translate(-7.25,-14.98)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path46" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 48.1,70.83 a 3.68,3.68 0 0 1 -1.33,-0.63 0.84,0.84 0 0 1 -0.26,-0.28 0.81,0.81 0 0 1 -0.08,-0.38 0.82,0.82 0 0 1 0.19,-0.53 0.54,0.54 0 0 1 0.43,-0.23 0.81,0.81 0 0 1 0.26,0 1.63,1.63 0 0 1 0.31,0.15 4,4 0 0 0 1,0.47 4.25,4.25 0 0 0 1.16,0.15 A 2.29,2.29 0 0 0 51,69.34 0.84,0.84 0 0 0 51.42,68.58 0.68,0.68 0 0 0 51.03,67.98 5,5 0 0 0 49.64,67.55 7.66,7.66 0 0 1 47.89,67 2.31,2.31 0 0 1 46.89,66.2 2.11,2.11 0 0 1 46.61,65 2.27,2.27 0 0 1 47,63.67 2.9,2.9 0 0 1 48.21,62.72 4.27,4.27 0 0 1 50,62.38 a 4.46,4.46 0 0 1 2.81,0.85 0.94,0.94 0 0 1 0.26,0.29 0.78,0.78 0 0 1 0.08,0.37 0.81,0.81 0 0 1 -0.19,0.53 0.54,0.54 0 0 1 -0.43,0.23 0.81,0.81 0 0 1 -0.25,0 1.69,1.69 0 0 1 -0.32,-0.16 5.07,5.07 0 0 0 -0.91,-0.47 3,3 0 0 0 -1,-0.16 2,2 0 0 0 -1.15,0.28 0.89,0.89 0 0 0 -0.42,0.77 0.7,0.7 0 0 0 0.16,0.47 1.35,1.35 0 0 0 0.54,0.33 8.31,8.31 0 0 0 1.07,0.3 6,6 0 0 1 2.35,0.92 1.86,1.86 0 0 1 0.71,1.55 2.25,2.25 0 0 1 -0.43,1.36 2.75,2.75 0 0 1 -1.2,0.91 4.62,4.62 0 0 1 -1.79,0.32 6.7,6.7 0 0 1 -1.79,-0.24 z" | |||
transform="translate(-7.25,-14.98)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path48" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 61.74,70.27 A 0.67,0.67 0 0 1 61.47,70.82 1,1 0 0 1 60.4,70.93 0.89,0.89 0 0 1 60,70.6 L 58.42,68.25 A 1.42,1.42 0 0 0 58,67.8 1.1,1.1 0 0 0 57.42,67.66 h -1 v 2.42 a 0.94,0.94 0 0 1 -0.25,0.68 0.89,0.89 0 0 1 -0.67,0.25 0.87,0.87 0 0 1 -0.94,-0.94 v -6.71 a 0.8,0.8 0 0 1 0.88,-0.88 h 3 a 3.37,3.37 0 0 1 2.25,0.65 2.35,2.35 0 0 1 0.83,1.87 2.45,2.45 0 0 1 -0.52,1.65 2.59,2.59 0 0 1 -1.52,0.85 1.58,1.58 0 0 1 0.64,0.28 2.45,2.45 0 0 1 0.55,0.61 l 0.91,1.37 a 0.92,0.92 0 0 1 0.16,0.51 z M 59.4,66 a 1.27,1.27 0 0 0 0,-1.77 1.93,1.93 0 0 0 -1.16,-0.28 h -1.79 v 2.33 h 1.79 A 1.9,1.9 0 0 0 59.4,66 Z" | |||
transform="translate(-7.25,-14.98)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path50" /> | |||
</g> | |||
<g | |||
id="g1026" | |||
transform="translate(88.358096,22.5893)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path25377" | |||
d="m 26.368901,82.091199 c 0,-0.43021 -0.352577,-0.78171 -0.782785,-0.78171 h -6.009987 c -0.430208,0 -0.782787,0.3515 -0.782787,0.78171 v 9.13358 c 0,0.43022 0.352579,0.78279 0.782787,0.78279 h 6.009987 c 0.430208,0 0.782785,-0.35257 0.782785,-0.78279 z m 0,0" | |||
style="display:inline;fill:#202020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2330292" /> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 21.263285,83.746531 c 0.388158,0 0.672808,-0.29328 0.672808,-0.651251 0,-0.357971 -0.280336,-0.64693 -0.668494,-0.64693 -0.388159,0 -0.668497,0.29328 -0.668497,0.64693 v 0.004 c 0,0.35796 0.280338,0.64693 0.664183,0.64693 z m 0.0043,-0.254461 c -0.219955,0 -0.37953,-0.181141 -0.37953,-0.39679 0,-0.215641 0.15526,-0.39247 0.375218,-0.39247 0.22427,0 0.383847,0.176829 0.383847,0.39247 v 0.004 c 0,0.215638 -0.155263,0.39247 -0.379535,0.39247 z m 0,0" | |||
id="path12074" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 22.762883,83.746531 c 0.340719,0 0.552048,-0.18977 0.552048,-0.569302 V 82.59499 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07763,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59518 c 0,0.19839 -0.103509,0.3019 -0.271709,0.3019 -0.168204,0 -0.271713,-0.10782 -0.271713,-0.310531 V 82.59499 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07332,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59087 c 0,0.370901 0.207018,0.560671 0.543422,0.560671 z m 0,0" | |||
id="path12070" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 23.9409,83.595581 c 0,0.0776 0.06038,0.138009 0.138012,0.138009 0.07763,0 0.138012,-0.0604 0.138012,-0.138009 v -0.871202 h 0.263087 c 0.07332,0 0.129386,-0.0561 0.129386,-0.129389 0,-0.069 -0.05607,-0.125071 -0.129386,-0.125071 h -0.806509 c -0.06901,0 -0.125072,0.0561 -0.125072,0.125071 0,0.0733 0.05607,0.129389 0.125072,0.129389 H 23.9409 Z m 0,0" | |||
id="path12066" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="translate(0,5.4055845)" | |||
id="g1664"> | |||
<g | |||
id="g1642" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(-0.017989,-5.2916667)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1638" | |||
d="m 89.599095,93.256455 c 0.202705,0 0.336402,-0.06469 0.45285,-0.168201 0.02156,-0.01725 0.03882,-0.04744 0.03882,-0.07763 0,-0.05607 -0.05175,-0.10351 -0.107823,-0.10351 -0.02588,0 -0.04744,0.0086 -0.06469,0.02588 -0.09057,0.07763 -0.181139,0.120759 -0.314838,0.120759 -0.237209,0 -0.414036,-0.202703 -0.414036,-0.448538 0,-0.245835 0.176827,-0.444225 0.414036,-0.444225 0.120759,0 0.215643,0.04313 0.3019,0.112133 0.01294,0.01294 0.0345,0.02156 0.06469,0.02156 0.06038,0 0.112136,-0.04744 0.112136,-0.107823 0,-0.03882 -0.02156,-0.06901 -0.04313,-0.08626 -0.112136,-0.08626 -0.237207,-0.142325 -0.431287,-0.142325 -0.379534,0 -0.64693,0.293275 -0.64693,0.646931 v 0.0043 c 0,0.362281 0.271709,0.64693 0.638305,0.64693 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1640" | |||
d="m 90.889301,93.252142 h 0.01294 c 0.06038,0 0.103508,-0.0345 0.125071,-0.09057 L 91.47154,92.12217 c 0.0043,-0.01294 0.0086,-0.03019 0.0086,-0.04744 0,-0.05607 -0.04744,-0.103508 -0.107823,-0.103508 -0.05175,0 -0.09057,0.0345 -0.107821,0.06901 l -0.3666,0.914322 -0.362281,-0.905703 c -0.01725,-0.04744 -0.05607,-0.07763 -0.112133,-0.07763 -0.06469,0 -0.112135,0.04744 -0.112135,0.10782 0,0.01725 0.0043,0.0345 0.01294,0.05175 l 0.439914,1.030777 c 0.02156,0.05607 0.06469,0.09057 0.125072,0.09057 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
</g> | |||
<g | |||
id="g1648" | |||
transform="translate(6.882011,-5.2916667)" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 89.599095,93.256455 c 0.202705,0 0.336402,-0.06469 0.45285,-0.168201 0.02156,-0.01725 0.03882,-0.04744 0.03882,-0.07763 0,-0.05607 -0.05175,-0.10351 -0.107823,-0.10351 -0.02588,0 -0.04744,0.0086 -0.06469,0.02588 -0.09057,0.07763 -0.181139,0.120759 -0.314838,0.120759 -0.237209,0 -0.414036,-0.202703 -0.414036,-0.448538 0,-0.245835 0.176827,-0.444225 0.414036,-0.444225 0.120759,0 0.215643,0.04313 0.3019,0.112133 0.01294,0.01294 0.0345,0.02156 0.06469,0.02156 0.06038,0 0.112136,-0.04744 0.112136,-0.107823 0,-0.03882 -0.02156,-0.06901 -0.04313,-0.08626 -0.112136,-0.08626 -0.237207,-0.142325 -0.431287,-0.142325 -0.379534,0 -0.64693,0.293275 -0.64693,0.646931 v 0.0043 c 0,0.362281 0.271709,0.64693 0.638305,0.64693 z m 0,0" | |||
id="path1644" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 90.889301,93.252142 h 0.01294 c 0.06038,0 0.103508,-0.0345 0.125071,-0.09057 L 91.47154,92.12217 c 0.0043,-0.01294 0.0086,-0.03019 0.0086,-0.04744 0,-0.05607 -0.04744,-0.103508 -0.107823,-0.103508 -0.05175,0 -0.09057,0.0345 -0.107821,0.06901 l -0.3666,0.914322 -0.362281,-0.905703 c -0.01725,-0.04744 -0.05607,-0.07763 -0.112133,-0.07763 -0.06469,0 -0.112135,0.04744 -0.112135,0.10782 0,0.01725 0.0043,0.0345 0.01294,0.05175 l 0.439914,1.030777 c 0.02156,0.05607 0.06469,0.09057 0.125072,0.09057 z m 0,0" | |||
id="path1646" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="translate(13.782011,-5.2916667)" | |||
id="g1654" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1650" | |||
d="m 89.599095,93.256455 c 0.202705,0 0.336402,-0.06469 0.45285,-0.168201 0.02156,-0.01725 0.03882,-0.04744 0.03882,-0.07763 0,-0.05607 -0.05175,-0.10351 -0.107823,-0.10351 -0.02588,0 -0.04744,0.0086 -0.06469,0.02588 -0.09057,0.07763 -0.181139,0.120759 -0.314838,0.120759 -0.237209,0 -0.414036,-0.202703 -0.414036,-0.448538 0,-0.245835 0.176827,-0.444225 0.414036,-0.444225 0.120759,0 0.215643,0.04313 0.3019,0.112133 0.01294,0.01294 0.0345,0.02156 0.06469,0.02156 0.06038,0 0.112136,-0.04744 0.112136,-0.107823 0,-0.03882 -0.02156,-0.06901 -0.04313,-0.08626 -0.112136,-0.08626 -0.237207,-0.142325 -0.431287,-0.142325 -0.379534,0 -0.64693,0.293275 -0.64693,0.646931 v 0.0043 c 0,0.362281 0.271709,0.64693 0.638305,0.64693 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1652" | |||
d="m 90.889301,93.252142 h 0.01294 c 0.06038,0 0.103508,-0.0345 0.125071,-0.09057 L 91.47154,92.12217 c 0.0043,-0.01294 0.0086,-0.03019 0.0086,-0.04744 0,-0.05607 -0.04744,-0.103508 -0.107823,-0.103508 -0.05175,0 -0.09057,0.0345 -0.107821,0.06901 l -0.3666,0.914322 -0.362281,-0.905703 c -0.01725,-0.04744 -0.05607,-0.07763 -0.112133,-0.07763 -0.06469,0 -0.112135,0.04744 -0.112135,0.10782 0,0.01725 0.0043,0.0345 0.01294,0.05175 l 0.439914,1.030777 c 0.02156,0.05607 0.06469,0.09057 0.125072,0.09057 z m 0,0" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" /> | |||
</g> | |||
<g | |||
id="g1662" | |||
transform="translate(20.682011,-5.2916667)" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 89.599095,93.256455 c 0.202705,0 0.336402,-0.06469 0.45285,-0.168201 0.02156,-0.01725 0.03882,-0.04744 0.03882,-0.07763 0,-0.05607 -0.05175,-0.10351 -0.107823,-0.10351 -0.02588,0 -0.04744,0.0086 -0.06469,0.02588 -0.09057,0.07763 -0.181139,0.120759 -0.314838,0.120759 -0.237209,0 -0.414036,-0.202703 -0.414036,-0.448538 0,-0.245835 0.176827,-0.444225 0.414036,-0.444225 0.120759,0 0.215643,0.04313 0.3019,0.112133 0.01294,0.01294 0.0345,0.02156 0.06469,0.02156 0.06038,0 0.112136,-0.04744 0.112136,-0.107823 0,-0.03882 -0.02156,-0.06901 -0.04313,-0.08626 -0.112136,-0.08626 -0.237207,-0.142325 -0.431287,-0.142325 -0.379534,0 -0.64693,0.293275 -0.64693,0.646931 v 0.0043 c 0,0.362281 0.271709,0.64693 0.638305,0.64693 z m 0,0" | |||
id="path1656" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||
d="m 90.889301,93.252142 h 0.01294 c 0.06038,0 0.103508,-0.0345 0.125071,-0.09057 L 91.47154,92.12217 c 0.0043,-0.01294 0.0086,-0.03019 0.0086,-0.04744 0,-0.05607 -0.04744,-0.103508 -0.107823,-0.103508 -0.05175,0 -0.09057,0.0345 -0.107821,0.06901 l -0.3666,0.914322 -0.362281,-0.905703 c -0.01725,-0.04744 -0.05607,-0.07763 -0.112133,-0.07763 -0.06469,0 -0.112135,0.04744 -0.112135,0.10782 0,0.01725 0.0043,0.0345 0.01294,0.05175 l 0.439914,1.030777 c 0.02156,0.05607 0.06469,0.09057 0.125072,0.09057 z m 0,0" | |||
id="path1658" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</g> | |||
<g | |||
id="g1675" | |||
transform="matrix(1.0035812,0,0,0.49511921,-0.36055249,48.180225)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1666" | |||
d="m 90.342396,86.336996 v -5.06241" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:#fff7d4;stroke-width:0.22603756;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:#fff7d4;stroke-width:0.22603756;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" | |||
d="m 97.234972,86.336996 v -5.06241" | |||
id="path1669" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1671" | |||
d="m 104.12755,86.336996 v -5.06241" | |||
style="fill:#fff7d4;fill-opacity:1;stroke:#fff7d4;stroke-width:0.22603756;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" /> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1;stroke:#fff7d4;stroke-width:0.22603756;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" | |||
d="m 111.02014,86.336996 v -5.06241" | |||
id="path1673" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</g> | |||
<g | |||
inkscape:groupmode="layer" | |||
id="layer3" | |||
inkscape:label="guides" | |||
transform="translate(0,-8.0744425e-6)" /> | |||
</svg> |
@@ -0,0 +1,440 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="svg8" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="AtNuVrTr.svg" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 75 380" | |||
style="enable-background:new 0 0 75 380;" | |||
xml:space="preserve"><metadata | |||
id="metadata138"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs136" /><style | |||
type="text/css" | |||
id="style2"> | |||
.st0{fill:#44423E;} | |||
.st1{fill:#3C3835;} | |||
.st2{fill:#FFF7D4;} | |||
.st3{fill:#251E1E;} | |||
</style><sodipodi:namedview | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
id="namedview25" | |||
inkscape:current-layer="layer2" | |||
inkscape:cx="-227.24091" | |||
inkscape:cy="185.49058" | |||
inkscape:guide-bbox="true" | |||
inkscape:lockguides="false" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-height="1229" | |||
inkscape:window-maximized="0" | |||
inkscape:window-width="2138" | |||
inkscape:window-x="34" | |||
inkscape:window-y="64" | |||
inkscape:zoom="1.3082204" | |||
objecttolerance="10" | |||
pagecolor="#ffffff" | |||
showgrid="false" | |||
showguides="true" /><title | |||
id="title2">MyModule</title><g | |||
id="layer2" | |||
transform="translate(0,-3.0517578e-5)" | |||
inkscape:groupmode="layer" | |||
inkscape:label="background"><path | |||
style="fill:#44423e;stroke-width:0.91793352" | |||
d="M -0.02545608,3.0517578e-5 V 47.400031 v 3.8 2.9 1.2 265.699999 1.2 57.8 H 74.966115 v -57.7 -1.2 -266.999999 -2.9 -3.8 V 3.0517578e-5 Z" | |||
class="st0" | |||
inkscape:connector-curvature="0" | |||
id="path1784" /><rect | |||
id="rect2016" | |||
x="0" | |||
y="365" | |||
class="st1" | |||
width="75" | |||
height="15" | |||
style="fill:#3c3835;fill-opacity:1" /><circle | |||
id="circle1788" | |||
class="st1" | |||
cx="37.5" | |||
cy="359.9" | |||
r="15.1" | |||
style="fill:#3c3835;fill-opacity:1" /><path | |||
id="path1790" | |||
inkscape:connector-curvature="0" | |||
class="st2" | |||
d="m 45.043324,356.76538 c -0.0666,-0.1332 -0.133206,-0.26641 -0.266412,-0.33301 -0.133206,-0.0666 -0.266411,-0.13321 -0.399617,-0.0666 -0.133206,0.0666 -0.266412,0.1332 -0.333015,0.26641 -0.666029,1.19885 -1.398661,2.3311 -2.197896,3.39675 -0.66603,-1.33206 -1.13225,-2.79733 -1.398662,-4.32919 v -0.26642 l 1.332059,-1.86488 c 0.133205,-0.19981 0.865838,-1.06564 -0.532824,-1.66507 -0.532823,-0.19981 -1.065647,-0.19981 -1.59847,0.0666 -1.531867,0.66603 -1.265456,2.86393 -1.198853,3.19694 0,0.13321 0,0.26641 0.0666,0.39962 l -2.530911,4.12938 c 0,0 0.333014,-2.19789 0.399617,-2.59751 0.0666,-0.46622 -0.199808,-0.99905 -0.732632,-1.06565 0,0 0,0 -0.0666,0 -0.666029,-0.13321 -1.065647,0.0666 -1.531867,1.73168 -0.399618,1.46526 -1.665073,5.06182 -2.597514,5.06182 -0.532824,0 -0.133206,-2.2645 0.46622,-3.92957 0.732632,-1.99809 2.530912,-4.66221 4.528999,-5.86106 0.466221,-0.26641 1.065647,-0.99904 0.466221,-1.73168 -0.799235,-0.86584 -1.665073,-0.19981 -1.998088,0.0666 -0.932441,0.79923 -1.731676,1.79827 -2.331102,2.93052 -0.865839,1.33206 -1.465265,2.73072 -1.864882,4.19599 -0.66603,2.13129 -1.398662,5.66125 0.0666,5.79445 1.998088,0.19981 3.596559,-3.72976 3.596559,-3.72976 0,0 -0.0666,1.99809 0.932441,2.06469 0.999043,0.0666 2.997131,-3.92957 3.596558,-5.26163 0.399617,1.33206 0.932441,2.53091 1.665073,3.66316 0.0666,0.0666 0.0666,0.19981 0.0666,0.26641 -0.199809,0.33302 -2.530911,3.26355 -3.196941,4.99522 -0.0666,0.13321 -0.0666,0.33302 0,0.46622 0.0666,0.13321 0.199809,0.26641 0.333015,0.26641 0.199809,0 0.333015,0 0.46622,-0.0666 0.133206,-0.0666 0.266412,-0.1332 0.466221,-0.26641 3.19694,-1.86488 3.663161,-3.99618 3.463352,-5.66125 0.0666,-0.0666 0.133206,-0.19981 0.199809,-0.26641 0.999044,-1.19885 1.864882,-2.46431 2.597514,-3.86297 0.0666,0.19981 0.133206,0 0.0666,-0.13321 z" | |||
style="fill:#fff7d4;stroke-width:0.66602927" /><rect | |||
id="rect2018" | |||
x="0" | |||
y="0" | |||
class="st1" | |||
width="75" | |||
height="15" | |||
style="fill:#3c3835;fill-opacity:1" /><g | |||
transform="matrix(7.9299111,0,0,7.9299111,-438.08996,-2669.2158)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"><g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"><path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /></g></g></g><g | |||
id="layer1" | |||
transform="translate(0,-3.0517578e-5)" | |||
inkscape:groupmode="layer" | |||
inkscape:label="graphics" /><g | |||
id="g911" | |||
transform="translate(7.8009486)"><path | |||
id="rect861" | |||
class="st3" | |||
d="M10.6,2.8h8.4c2.9,0,5.3,2.1,5.3,4.7v0c0,2.6-2.4,4.7-5.3,4.7h-8.4c-2.9,0-5.3-2.1-5.3-4.7v0 C5.3,4.9,7.7,2.8,10.6,2.8z" /><path | |||
id="rect863" | |||
class="st3" | |||
d="M10.6,368.3h8.4c2.9,0,5.3,2.1,5.3,4.7v0c0,2.6-2.4,4.7-5.3,4.7h-8.4c-2.9,0-5.3-2.1-5.3-4.7v0 C5.3,370.4,7.7,368.3,10.6,368.3z" /></g><g | |||
id="g915" | |||
transform="translate(-7.8009491)"><path | |||
id="rect1497" | |||
class="st3" | |||
d="M56.1,2.8h8.4c2.9,0,5.3,2.1,5.3,4.7v0c0,2.6-2.4,4.7-5.3,4.7h-8.4c-2.9,0-5.3-2.1-5.3-4.7v0 C50.8,4.9,53.2,2.8,56.1,2.8z" /><path | |||
id="rect1499" | |||
class="st3" | |||
d="M56.1,368.3h8.4c2.9,0,5.3,2.1,5.3,4.7v0c0,2.6-2.4,4.7-5.3,4.7h-8.4c-2.9,0-5.3-2.1-5.3-4.7v0 C50.8,370.4,53.2,368.3,56.1,368.3z" /></g><g | |||
transform="translate(-37.931037,-124.95824)" | |||
id="g926" | |||
style="fill:#fff7d4;fill-opacity:1"><g | |||
id="g1713"><g | |||
id="g27" | |||
transform="translate(-167.44921,126.95824)" | |||
style="enable-background:new 0 0 75 380"><path | |||
inkscape:connector-curvature="0" | |||
id="path19" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 46.51,89.72 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.43,-0.29 l -0.5,-1.11 h -2.93 l -0.5,1.11 a 0.48,0.48 0 0 1 -0.18,0.22 0.49,0.49 0 0 1 -0.26,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.51,0.51 0 0 1 0,-0.22 L 43,84.58 a 0.54,0.54 0 0 1 0.23,-0.25 0.66,0.66 0 0 1 0.66,0 0.54,0.54 0 0 1 0.23,0.25 l 2.3,4.92 a 0.51,0.51 0 0 1 0.09,0.22 z m -4,-1.78 h 2.19 l -1.1,-2.46 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path21" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 48.94,90 a 0.52,0.52 0 0 1 -0.15,-0.39 v -4.44 h -1.5 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.09 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 A 0.5,0.5 0 0 1 49.34,90.18 0.53,0.53 0 0 1 48.94,90 Z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path23" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="M 54.86,90 A 0.52,0.52 0 0 1 54.71,89.61 V 85.17 H 53.2 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.1 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 A 0.5,0.5 0 0 1 55.26,90.18 0.53,0.53 0 0 1 54.86,90 Z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path25" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 64.06,84.39 a 0.54,0.54 0 0 1 0.14,0.39 v 4.87 A 0.55,0.55 0 0 1 64.06,90.04 0.48,0.48 0 0 1 63.69,90.19 0.48,0.48 0 0 1 63.28,90 l -3,-3.94 v 3.59 a 0.56,0.56 0 0 1 -0.13,0.39 0.52,0.52 0 0 1 -0.73,0 0.56,0.56 0 0 1 -0.13,-0.39 v -4.87 a 0.53,0.53 0 0 1 0.14,-0.39 0.49,0.49 0 0 1 0.37,-0.15 0.47,0.47 0 0 1 0.4,0.19 l 3,3.93 v -3.58 a 0.54,0.54 0 0 1 0.14,-0.39 0.47,0.47 0 0 1 0.36,-0.15 0.48,0.48 0 0 1 0.36,0.15 z" /></g><g | |||
id="g41" | |||
transform="translate(-166.97094,128.95824)" | |||
style="enable-background:new 0 0 75 380"><path | |||
inkscape:connector-curvature="0" | |||
id="path29" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 35.94,143.72 a 2.44,2.44 0 0 1 -1,-1 3.91,3.91 0 0 1 0,-3.18 2.42,2.42 0 0 1 1,-1 3.2,3.2 0 0 1 3,0 2.43,2.43 0 0 1 1,1 3.91,3.91 0 0 1 0,3.18 2.44,2.44 0 0 1 -1,1 3.17,3.17 0 0 1 -3,0 z m 2.74,-1 a 3,3 0 0 0 0,-3.18 1.72,1.72 0 0 0 -2.52,0 3,3 0 0 0 0,3.18 1.71,1.71 0 0 0 2.52,0 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path31" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 42.26,143.91 a 0.54,0.54 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.91 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.37 v 1.59 h 2.21 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.21 v 2.06 a 0.55,0.55 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.15 0.51,0.51 0 0 1 -0.39,-0.14 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path33" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 47.79,143.91 a 0.54,0.54 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.91 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 H 48.7 v 1.59 h 2.2 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.2 v 2.06 a 0.55,0.55 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.15 0.51,0.51 0 0 1 -0.39,-0.14 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path35" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 53.84,143.91 a 2.65,2.65 0 0 1 -0.92,-0.46 0.46,0.46 0 0 1 -0.19,-0.4 0.47,0.47 0 0 1 0.1,-0.3 0.31,0.31 0 0 1 0.25,-0.13 0.68,0.68 0 0 1 0.34,0.12 2.46,2.46 0 0 0 0.75,0.37 3,3 0 0 0 0.86,0.12 1.7,1.7 0 0 0 0.97,-0.23 0.69,0.69 0 0 0 0.32,-0.62 0.53,0.53 0 0 0 -0.3,-0.49 4,4 0 0 0 -1,-0.33 6,6 0 0 1 -1.19,-0.36 1.68,1.68 0 0 1 -0.69,-0.53 1.37,1.37 0 0 1 -0.23,-0.82 1.54,1.54 0 0 1 0.29,-0.92 1.91,1.91 0 0 1 0.81,-0.63 2.87,2.87 0 0 1 1.17,-0.23 2.9,2.9 0 0 1 1.93,0.63 0.63,0.63 0 0 1 0.15,0.18 0.52,0.52 0 0 1 -0.06,0.52 0.31,0.31 0 0 1 -0.25,0.13 H 56.8 l -0.19,-0.09 a 2.81,2.81 0 0 0 -0.66,-0.37 2.25,2.25 0 0 0 -0.79,-0.12 1.54,1.54 0 0 0 -0.89,0.23 0.73,0.73 0 0 0 -0.33,0.64 0.58,0.58 0 0 0 0.29,0.52 3.4,3.4 0 0 0 1,0.34 6.64,6.64 0 0 1 1.2,0.37 1.79,1.79 0 0 1 0.71,0.52 1.25,1.25 0 0 1 0.24,0.79 1.5,1.5 0 0 1 -0.29,0.91 1.87,1.87 0 0 1 -0.8,0.61 3,3 0 0 1 -1.19,0.22 4.2,4.2 0 0 1 -1.26,-0.19 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path37" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 59.28,143.87 a 0.5,0.5 0 0 1 -0.14,-0.37 v -4.84 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 3 a 0.58,0.58 0 0 1 0.37,0.11 0.38,0.38 0 0 1 0.13,0.31 0.4,0.4 0 0 1 -0.13,0.32 0.56,0.56 0 0 1 -0.37,0.11 h -2.47 v 1.61 h 2.3 a 0.58,0.58 0 0 1 0.37,0.11 0.38,0.38 0 0 1 0.14,0.27 0.38,0.38 0 0 1 -0.13,0.31 0.58,0.58 0 0 1 -0.37,0.11 h -2.3 v 1.71 h 2.46 a 0.56,0.56 0 0 1 0.37,0.11 0.4,0.4 0 0 1 0.13,0.32 0.37,0.37 0 0 1 -0.13,0.31 0.58,0.58 0 0 1 -0.37,0.11 h -3 a 0.52,0.52 0 0 1 -0.38,-0.11 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path39" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 66.4,143.9 a 0.52,0.52 0 0 1 -0.14,-0.39 V 139 h -1.52 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.09 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 a 0.5,0.5 0 0 1 -0.53,0.53 0.53,0.53 0 0 1 -0.39,-0.11 z" /></g><g | |||
transform="translate(-168.97094,124.95824)" | |||
id="g47" | |||
style="enable-background:new 0 0 75 380"><path | |||
inkscape:connector-curvature="0" | |||
id="path43" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 11.38,92.1 a 2,2 0 0 1 -0.82,-0.86 3.12,3.12 0 0 1 0,-2.61 2,2 0 0 1 0.82,-0.85 2.68,2.68 0 0 1 2.77,0.19 0.51,0.51 0 0 1 0.14,0.16 0.45,0.45 0 0 1 0,0.2 0.47,0.47 0 0 1 -0.1,0.3 0.3,0.3 0 0 1 -0.24,0.13 h -0.17 l -0.16,-0.08 a 2.26,2.26 0 0 0 -0.5,-0.25 1.55,1.55 0 0 0 -0.5,-0.08 1.19,1.19 0 0 0 -1,0.4 1.88,1.88 0 0 0 -0.33,1.21 q 0,1.62 1.31,1.62 a 1.42,1.42 0 0 0 0.48,-0.08 3,3 0 0 0 0.52,-0.25 l 0.17,-0.08 h 0.16 a 0.3,0.3 0 0 1 0.24,0.13 0.47,0.47 0 0 1 0.1,0.3 0.45,0.45 0 0 1 0,0.21 0.51,0.51 0 0 1 -0.14,0.16 2.68,2.68 0 0 1 -2.77,0.19 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path45" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 19.29,87.58 a 0.48,0.48 0 0 1 0.26,-0.07 0.56,0.56 0 0 1 0.37,0.14 0.42,0.42 0 0 1 0.16,0.33 0.47,0.47 0 0 1 0,0.2 l -1.84,3.88 a 0.54,0.54 0 0 1 -0.22,0.24 0.67,0.67 0 0 1 -0.65,0 0.54,0.54 0 0 1 -0.22,-0.24 l -1.84,-3.88 a 0.44,0.44 0 0 1 0,-0.2 0.42,0.42 0 0 1 0.17,-0.34 0.6,0.6 0 0 1 0.38,-0.14 0.5,0.5 0 0 1 0.26,0.07 0.44,0.44 0 0 1 0.18,0.21 l 1.35,3.22 1.46,-3.18 a 0.45,0.45 0 0 1 0.18,-0.24 z" /></g><g | |||
transform="translate(-166.95341,132.62126)" | |||
id="g53"><path | |||
inkscape:connector-curvature="0" | |||
id="path49" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 14.39,153.54 a 0.52,0.52 0 0 1 -0.14,-0.39 v -3.81 a 0.51,0.51 0 0 1 0.14,-0.38 0.6,0.6 0 0 1 0.78,0 0.51,0.51 0 0 1 0.14,0.38 v 3.81 a 0.55,0.55 0 0 1 -0.92,0.39 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path51" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 21,149 a 0.53,0.53 0 0 1 0.14,0.38 v 3.81 a 0.53,0.53 0 0 1 -0.14,0.38 0.48,0.48 0 0 1 -0.36,0.15 0.49,0.49 0 0 1 -0.39,-0.18 l -2.28,-2.92 v 2.56 a 0.55,0.55 0 0 1 -0.13,0.38 0.46,0.46 0 0 1 -0.36,0.15 0.47,0.47 0 0 1 -0.36,-0.15 0.54,0.54 0 0 1 -0.14,-0.38 v -3.81 a 0.53,0.53 0 0 1 0.14,-0.38 0.48,0.48 0 0 1 0.36,-0.15 0.46,0.46 0 0 1 0.39,0.18 l 2.28,2.9 v -2.55 a 0.53,0.53 0 0 1 0.14,-0.38 0.46,0.46 0 0 1 0.35,-0.15 A 0.48,0.48 0 0 1 21,149 Z" /></g><g | |||
transform="translate(-168.95341,132.95824)" | |||
id="g61"><path | |||
inkscape:connector-curvature="0" | |||
id="path55" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 50.78,153.11 a 2,2 0 0 1 -0.81,-0.86 3.11,3.11 0 0 1 0,-2.6 2,2 0 0 1 0.81,-0.85 2.73,2.73 0 0 1 2.48,0 2,2 0 0 1 0.81,0.85 3.11,3.11 0 0 1 0,2.6 2,2 0 0 1 -0.81,0.86 2.7,2.7 0 0 1 -2.48,0 z m 2.18,-0.94 a 2.33,2.33 0 0 0 0,-2.43 1.27,1.27 0 0 0 -1.89,0 2.35,2.35 0 0 0 0,2.43 1.26,1.26 0 0 0 1.88,0 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path57" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 56.35,152.89 a 2,2 0 0 1 -0.53,-1.52 V 149 a 0.49,0.49 0 0 1 0.52,-0.52 0.5,0.5 0 0 1 0.38,0.14 0.52,0.52 0 0 1 0.14,0.38 v 2.37 a 1.28,1.28 0 0 0 0.26,0.87 1.11,1.11 0 0 0 1.52,0 1.27,1.27 0 0 0 0.27,-0.87 V 149 a 0.52,0.52 0 0 1 0.14,-0.38 0.51,0.51 0 0 1 0.38,-0.14 0.49,0.49 0 0 1 0.52,0.52 v 2.33 a 2,2 0 0 1 -0.53,1.52 2.52,2.52 0 0 1 -3.07,0 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path59-3" | |||
style="fill:#fff7d4" | |||
transform="translate(204.6)" | |||
d="m 62.81,153.24 a 0.51,0.51 0 0 1 -0.15,-0.38 v -3.44 h -1.1 c -0.33,0 -0.5,-0.14 -0.5,-0.44 0,-0.3 0.17,-0.43 0.5,-0.43 h 3.26 q 0.5,0 0.5,0.43 c 0,0.29 -0.17,0.44 -0.5,0.44 h -1.1 v 3.44 a 0.51,0.51 0 0 1 -0.14,0.38 0.59,0.59 0 0 1 -0.77,0 z" /></g><path | |||
transform="translate(37.931037,124.95824)" | |||
id="path1139" | |||
d="m 25.77802,62.870005 h 13.6" | |||
style="enable-background:new 0 0 75 380;fill:#fff7d4;stroke:#fff7d4;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" | |||
inkscape:connector-curvature="0" /><path | |||
id="path1139-2" | |||
data-name="path1139" | |||
d="m 63.709057,243.19824 h 13.6" | |||
style="fill:#fff7d4;stroke:#fff7d4;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" | |||
inkscape:connector-curvature="0" /><circle | |||
transform="translate(37.931037,124.95824)" | |||
r="1.4387163" | |||
cy="40.5" | |||
cx="52.5" | |||
id="path1635" | |||
style="enable-background:new 0 0 75 380;opacity:1;vector-effect:none;fill:#fff7d4;fill-opacity:1;stroke:#ffffff;stroke-width:0.12256749;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /><circle | |||
transform="translate(37.931037,124.95824)" | |||
style="enable-background:new 0 0 75 380;opacity:1;vector-effect:none;fill:#fff7d4;fill-opacity:1;stroke:#ffffff;stroke-width:0.12256749;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
id="circle1637" | |||
cx="52.5" | |||
cy="95.5" | |||
r="1.4387163" /><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(4)" | |||
id="g87-0"><path | |||
d="m 4,206.19 q 0,-0.4 0.48,-0.4 h 1.35 q 0.48,0 0.48,0.4 c 0,0.27 -0.16,0.4 -0.48,0.4 H 4.5 c -0.32,0 -0.5,-0.13 -0.5,-0.4 z" | |||
transform="translate(60)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path83-1" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 11.28,207.58 q 0,0.43 -0.5,0.43 H 8.46 q -0.5,0 -0.5,-0.43 0,-0.43 0.5,-0.42 h 0.63 v -2.78 l -0.6,0.36 A 0.39,0.39 0 0 1 8.29,204.8 0.36,0.36 0 0 1 8,204.66 0.49,0.49 0 0 1 7.88,204.34 0.39,0.39 0 0 1 8.09,203.98 l 1.07,-0.65 a 0.92,0.92 0 0 1 0.48,-0.14 0.49,0.49 0 0 1 0.51,0.52 v 3.45 h 0.63 q 0.5,0 0.5,0.42 z" | |||
transform="translate(60)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path85-9" | |||
inkscape:connector-curvature="0" /></g><path | |||
d="m 108.8,207.58 c 0,0.29 -0.17,0.43 -0.5,0.43 H 106 q -0.5,0 -0.5,-0.43 0,-0.43 0.5,-0.42 h 0.63 v -2.78 l -0.6,0.36 a 0.39,0.39 0 0 1 -0.2,0.06 0.36,0.36 0 0 1 -0.29,-0.14 0.49,0.49 0 0 1 -0.12,-0.32 0.39,0.39 0 0 1 0.21,-0.36 l 1.07,-0.65 a 0.92,0.92 0 0 1 0.48,-0.14 0.48,0.48 0 0 1 0.51,0.52 v 3.45 h 0.63 c 0.31,0 0.48,0.14 0.48,0.42 z" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path89-5" | |||
inkscape:connector-curvature="0" /></g><g | |||
id="g1775" | |||
transform="translate(0,160)"><g | |||
transform="translate(-167.44921,126.95824)" | |||
id="g1723"><path | |||
d="m 46.51,89.72 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.43,-0.29 l -0.5,-1.11 h -2.93 l -0.5,1.11 a 0.48,0.48 0 0 1 -0.18,0.22 0.49,0.49 0 0 1 -0.26,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.51,0.51 0 0 1 0,-0.22 L 43,84.58 a 0.54,0.54 0 0 1 0.23,-0.25 0.66,0.66 0 0 1 0.66,0 0.54,0.54 0 0 1 0.23,0.25 l 2.3,4.92 a 0.51,0.51 0 0 1 0.09,0.22 z m -4,-1.78 h 2.19 l -1.1,-2.46 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1715" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 48.94,90 a 0.52,0.52 0 0 1 -0.15,-0.39 v -4.44 h -1.5 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.09 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 A 0.5,0.5 0 0 1 49.34,90.18 0.53,0.53 0 0 1 48.94,90 Z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1717" | |||
inkscape:connector-curvature="0" /><path | |||
d="M 54.86,90 A 0.52,0.52 0 0 1 54.71,89.61 V 85.17 H 53.2 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.1 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 A 0.5,0.5 0 0 1 55.26,90.18 0.53,0.53 0 0 1 54.86,90 Z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1719" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 64.06,84.39 a 0.54,0.54 0 0 1 0.14,0.39 v 4.87 A 0.55,0.55 0 0 1 64.06,90.04 0.48,0.48 0 0 1 63.69,90.19 0.48,0.48 0 0 1 63.28,90 l -3,-3.94 v 3.59 a 0.56,0.56 0 0 1 -0.13,0.39 0.52,0.52 0 0 1 -0.73,0 0.56,0.56 0 0 1 -0.13,-0.39 v -4.87 a 0.53,0.53 0 0 1 0.14,-0.39 0.49,0.49 0 0 1 0.37,-0.15 0.47,0.47 0 0 1 0.4,0.19 l 3,3.93 v -3.58 a 0.54,0.54 0 0 1 0.14,-0.39 0.47,0.47 0 0 1 0.36,-0.15 0.48,0.48 0 0 1 0.36,0.15 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1721" | |||
inkscape:connector-curvature="0" /></g><g | |||
transform="translate(-166.97094,128.95824)" | |||
id="g1737"><path | |||
d="m 35.94,143.72 a 2.44,2.44 0 0 1 -1,-1 3.91,3.91 0 0 1 0,-3.18 2.42,2.42 0 0 1 1,-1 3.2,3.2 0 0 1 3,0 2.43,2.43 0 0 1 1,1 3.91,3.91 0 0 1 0,3.18 2.44,2.44 0 0 1 -1,1 3.17,3.17 0 0 1 -3,0 z m 2.74,-1 a 3,3 0 0 0 0,-3.18 1.72,1.72 0 0 0 -2.52,0 3,3 0 0 0 0,3.18 1.71,1.71 0 0 0 2.52,0 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1725" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 42.26,143.91 a 0.54,0.54 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.91 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.37 v 1.59 h 2.21 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.21 v 2.06 a 0.55,0.55 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.15 0.51,0.51 0 0 1 -0.39,-0.14 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1727" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 47.79,143.91 a 0.54,0.54 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.91 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 H 48.7 v 1.59 h 2.2 q 0.51,0 0.51,0.43 0,0.43 -0.51,0.42 h -2.2 v 2.06 a 0.55,0.55 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.15 0.51,0.51 0 0 1 -0.39,-0.14 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1729" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 53.84,143.91 a 2.65,2.65 0 0 1 -0.92,-0.46 0.46,0.46 0 0 1 -0.19,-0.4 0.47,0.47 0 0 1 0.1,-0.3 0.31,0.31 0 0 1 0.25,-0.13 0.68,0.68 0 0 1 0.34,0.12 2.46,2.46 0 0 0 0.75,0.37 3,3 0 0 0 0.86,0.12 1.7,1.7 0 0 0 0.97,-0.23 0.69,0.69 0 0 0 0.32,-0.62 0.53,0.53 0 0 0 -0.3,-0.49 4,4 0 0 0 -1,-0.33 6,6 0 0 1 -1.19,-0.36 1.68,1.68 0 0 1 -0.69,-0.53 1.37,1.37 0 0 1 -0.23,-0.82 1.54,1.54 0 0 1 0.29,-0.92 1.91,1.91 0 0 1 0.81,-0.63 2.87,2.87 0 0 1 1.17,-0.23 2.9,2.9 0 0 1 1.93,0.63 0.63,0.63 0 0 1 0.15,0.18 0.52,0.52 0 0 1 -0.06,0.52 0.31,0.31 0 0 1 -0.25,0.13 H 56.8 l -0.19,-0.09 a 2.81,2.81 0 0 0 -0.66,-0.37 2.25,2.25 0 0 0 -0.79,-0.12 1.54,1.54 0 0 0 -0.89,0.23 0.73,0.73 0 0 0 -0.33,0.64 0.58,0.58 0 0 0 0.29,0.52 3.4,3.4 0 0 0 1,0.34 6.64,6.64 0 0 1 1.2,0.37 1.79,1.79 0 0 1 0.71,0.52 1.25,1.25 0 0 1 0.24,0.79 1.5,1.5 0 0 1 -0.29,0.91 1.87,1.87 0 0 1 -0.8,0.61 3,3 0 0 1 -1.19,0.22 4.2,4.2 0 0 1 -1.26,-0.19 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1731" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 59.28,143.87 a 0.5,0.5 0 0 1 -0.14,-0.37 v -4.84 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 3 a 0.58,0.58 0 0 1 0.37,0.11 0.38,0.38 0 0 1 0.13,0.31 0.4,0.4 0 0 1 -0.13,0.32 0.56,0.56 0 0 1 -0.37,0.11 h -2.47 v 1.61 h 2.3 a 0.58,0.58 0 0 1 0.37,0.11 0.38,0.38 0 0 1 0.14,0.27 0.38,0.38 0 0 1 -0.13,0.31 0.58,0.58 0 0 1 -0.37,0.11 h -2.3 v 1.71 h 2.46 a 0.56,0.56 0 0 1 0.37,0.11 0.4,0.4 0 0 1 0.13,0.32 0.37,0.37 0 0 1 -0.13,0.31 0.58,0.58 0 0 1 -0.37,0.11 h -3 a 0.52,0.52 0 0 1 -0.38,-0.11 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1733" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 66.4,143.9 a 0.52,0.52 0 0 1 -0.14,-0.39 V 139 h -1.52 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4.09 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.51 v 4.48 a 0.5,0.5 0 0 1 -0.53,0.53 0.53,0.53 0 0 1 -0.39,-0.11 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1735" | |||
inkscape:connector-curvature="0" /></g><g | |||
id="g1743" | |||
transform="translate(-168.97094,124.95824)"><path | |||
d="m 11.38,92.1 a 2,2 0 0 1 -0.82,-0.86 3.12,3.12 0 0 1 0,-2.61 2,2 0 0 1 0.82,-0.85 2.68,2.68 0 0 1 2.77,0.19 0.51,0.51 0 0 1 0.14,0.16 0.45,0.45 0 0 1 0,0.2 0.47,0.47 0 0 1 -0.1,0.3 0.3,0.3 0 0 1 -0.24,0.13 h -0.17 l -0.16,-0.08 a 2.26,2.26 0 0 0 -0.5,-0.25 1.55,1.55 0 0 0 -0.5,-0.08 1.19,1.19 0 0 0 -1,0.4 1.88,1.88 0 0 0 -0.33,1.21 q 0,1.62 1.31,1.62 a 1.42,1.42 0 0 0 0.48,-0.08 3,3 0 0 0 0.52,-0.25 l 0.17,-0.08 h 0.16 a 0.3,0.3 0 0 1 0.24,0.13 0.47,0.47 0 0 1 0.1,0.3 0.45,0.45 0 0 1 0,0.21 0.51,0.51 0 0 1 -0.14,0.16 2.68,2.68 0 0 1 -2.77,0.19 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1739" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 19.29,87.58 a 0.48,0.48 0 0 1 0.26,-0.07 0.56,0.56 0 0 1 0.37,0.14 0.42,0.42 0 0 1 0.16,0.33 0.47,0.47 0 0 1 0,0.2 l -1.84,3.88 a 0.54,0.54 0 0 1 -0.22,0.24 0.67,0.67 0 0 1 -0.65,0 0.54,0.54 0 0 1 -0.22,-0.24 l -1.84,-3.88 a 0.44,0.44 0 0 1 0,-0.2 0.42,0.42 0 0 1 0.17,-0.34 0.6,0.6 0 0 1 0.38,-0.14 0.5,0.5 0 0 1 0.26,0.07 0.44,0.44 0 0 1 0.18,0.21 l 1.35,3.22 1.46,-3.18 a 0.45,0.45 0 0 1 0.18,-0.24 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1741" | |||
inkscape:connector-curvature="0" /></g><g | |||
id="g1749" | |||
transform="translate(-166.95341,132.62126)"><path | |||
d="m 14.39,153.54 a 0.52,0.52 0 0 1 -0.14,-0.39 v -3.81 a 0.51,0.51 0 0 1 0.14,-0.38 0.6,0.6 0 0 1 0.78,0 0.51,0.51 0 0 1 0.14,0.38 v 3.81 a 0.55,0.55 0 0 1 -0.92,0.39 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1745" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 21,149 a 0.53,0.53 0 0 1 0.14,0.38 v 3.81 a 0.53,0.53 0 0 1 -0.14,0.38 0.48,0.48 0 0 1 -0.36,0.15 0.49,0.49 0 0 1 -0.39,-0.18 l -2.28,-2.92 v 2.56 a 0.55,0.55 0 0 1 -0.13,0.38 0.46,0.46 0 0 1 -0.36,0.15 0.47,0.47 0 0 1 -0.36,-0.15 0.54,0.54 0 0 1 -0.14,-0.38 v -3.81 a 0.53,0.53 0 0 1 0.14,-0.38 0.48,0.48 0 0 1 0.36,-0.15 0.46,0.46 0 0 1 0.39,0.18 l 2.28,2.9 v -2.55 a 0.53,0.53 0 0 1 0.14,-0.38 0.46,0.46 0 0 1 0.35,-0.15 A 0.48,0.48 0 0 1 21,149 Z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1747" | |||
inkscape:connector-curvature="0" /></g><g | |||
id="g1757" | |||
transform="translate(-168.95341,132.95824)"><path | |||
d="m 50.78,153.11 a 2,2 0 0 1 -0.81,-0.86 3.11,3.11 0 0 1 0,-2.6 2,2 0 0 1 0.81,-0.85 2.73,2.73 0 0 1 2.48,0 2,2 0 0 1 0.81,0.85 3.11,3.11 0 0 1 0,2.6 2,2 0 0 1 -0.81,0.86 2.7,2.7 0 0 1 -2.48,0 z m 2.18,-0.94 a 2.33,2.33 0 0 0 0,-2.43 1.27,1.27 0 0 0 -1.89,0 2.35,2.35 0 0 0 0,2.43 1.26,1.26 0 0 0 1.88,0 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1751" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 56.35,152.89 a 2,2 0 0 1 -0.53,-1.52 V 149 a 0.49,0.49 0 0 1 0.52,-0.52 0.5,0.5 0 0 1 0.38,0.14 0.52,0.52 0 0 1 0.14,0.38 v 2.37 a 1.28,1.28 0 0 0 0.26,0.87 1.11,1.11 0 0 0 1.52,0 1.27,1.27 0 0 0 0.27,-0.87 V 149 a 0.52,0.52 0 0 1 0.14,-0.38 0.51,0.51 0 0 1 0.38,-0.14 0.49,0.49 0 0 1 0.52,0.52 v 2.33 a 2,2 0 0 1 -0.53,1.52 2.52,2.52 0 0 1 -3.07,0 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1753" | |||
inkscape:connector-curvature="0" /><path | |||
d="m 62.81,153.24 a 0.51,0.51 0 0 1 -0.15,-0.38 v -3.44 h -1.1 c -0.33,0 -0.5,-0.14 -0.5,-0.44 0,-0.3 0.17,-0.43 0.5,-0.43 h 3.26 q 0.5,0 0.5,0.43 c 0,0.29 -0.17,0.44 -0.5,0.44 h -1.1 v 3.44 a 0.51,0.51 0 0 1 -0.14,0.38 0.59,0.59 0 0 1 -0.77,0 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path1755" | |||
inkscape:connector-curvature="0" /></g><path | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;stroke:#fff7d4;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" | |||
d="m 25.77802,62.870005 h 13.6" | |||
id="path1759" | |||
transform="translate(37.931037,124.95824)" /><path | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;stroke:#fff7d4;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" | |||
d="m 63.709057,243.19824 h 13.6" | |||
data-name="path1139" | |||
id="path1761" /><circle | |||
style="opacity:1;vector-effect:none;fill:#fff7d4;fill-opacity:1;stroke:#ffffff;stroke-width:0.12256749;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
id="circle1763" | |||
cx="52.5" | |||
cy="40.5" | |||
r="1.4387163" | |||
transform="translate(37.931037,124.95824)" /><circle | |||
r="1.4387163" | |||
cy="95.5" | |||
cx="52.5" | |||
id="circle1765" | |||
style="opacity:1;vector-effect:none;fill:#fff7d4;fill-opacity:1;stroke:#ffffff;stroke-width:0.12256749;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
transform="translate(37.931037,124.95824)" /><g | |||
id="g1771" | |||
transform="translate(4)" | |||
style="fill:#fff7d4;fill-opacity:1"><path | |||
inkscape:connector-curvature="0" | |||
id="path1767" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(60)" | |||
d="m 4,206.19 q 0,-0.4 0.48,-0.4 h 1.35 q 0.48,0 0.48,0.4 c 0,0.27 -0.16,0.4 -0.48,0.4 H 4.5 c -0.32,0 -0.5,-0.13 -0.5,-0.4 z" /><path | |||
inkscape:connector-curvature="0" | |||
id="path1769" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(60)" | |||
d="m 11.28,207.58 q 0,0.43 -0.5,0.43 H 8.46 q -0.5,0 -0.5,-0.43 0,-0.43 0.5,-0.42 h 0.63 v -2.78 l -0.6,0.36 A 0.39,0.39 0 0 1 8.29,204.8 0.36,0.36 0 0 1 8,204.66 0.49,0.49 0 0 1 7.88,204.34 0.39,0.39 0 0 1 8.09,203.98 l 1.07,-0.65 a 0.92,0.92 0 0 1 0.48,-0.14 0.49,0.49 0 0 1 0.51,0.52 v 3.45 h 0.63 q 0.5,0 0.5,0.42 z" /></g><path | |||
inkscape:connector-curvature="0" | |||
id="path1773" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
d="m 108.8,207.58 c 0,0.29 -0.17,0.43 -0.5,0.43 H 106 q -0.5,0 -0.5,-0.43 0,-0.43 0.5,-0.42 h 0.63 v -2.78 l -0.6,0.36 a 0.39,0.39 0 0 1 -0.2,0.06 0.36,0.36 0 0 1 -0.29,-0.14 0.49,0.49 0 0 1 -0.12,-0.32 0.39,0.39 0 0 1 0.21,-0.36 l 1.07,-0.65 a 0.92,0.92 0 0 1 0.48,-0.14 0.48,0.48 0 0 1 0.51,0.52 v 3.45 h 0.63 c 0.31,0 0.48,0.14 0.48,0.42 z" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(-166.78045,127.9574)" | |||
id="g135"><path | |||
inkscape:connector-curvature="0" | |||
d="M 18.55,31.13 A 0.73,0.73 0 0 1 18.28,31.7 0.91,0.91 0 0 1 17.66,31.93 0.81,0.81 0 0 1 17.23,31.8 0.79,0.79 0 0 1 16.92,31.42 L 16.28,30 h -4.07 l -0.64,1.42 a 0.81,0.81 0 0 1 -0.31,0.38 0.8,0.8 0 0 1 -0.44,0.13 0.94,0.94 0 0 1 -0.62,-0.23 0.72,0.72 0 0 1 -0.28,-0.57 1,1 0 0 1 0.1,-0.38 l 3.24,-6.8 a 0.94,0.94 0 0 1 0.4,-0.44 1.14,1.14 0 0 1 1.14,0 1.06,1.06 0 0 1 0.41,0.43 l 3.24,6.8 a 1,1 0 0 1 0.1,0.39 z m -5.7,-2.53 h 2.8 l -1.39,-3.12 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path119" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 23.3,30.81 a 0.67,0.67 0 0 1 -0.11,1 1.28,1.28 0 0 1 -0.79,0.14 h -0.34 a 2,2 0 0 1 -2.1,-2.2 v -2.41 h -0.48 a 0.9,0.9 0 0 1 -0.6,-0.17 0.62,0.62 0 0 1 -0.2,-0.5 0.63,0.63 0 0 1 0.2,-0.51 0.9,0.9 0 0 1 0.6,-0.17 H 20 v -0.94 a 0.81,0.81 0 0 1 0.25,-0.62 0.94,0.94 0 0 1 0.67,-0.23 0.92,0.92 0 0 1 0.66,0.23 0.82,0.82 0 0 1 0.24,0.62 V 26 h 0.84 q 0.82,0 0.82,0.68 a 0.62,0.62 0 0 1 -0.2,0.5 0.92,0.92 0 0 1 -0.61,0.17 h -0.84 v 2.51 a 0.79,0.79 0 0 0 0.17,0.55 0.7,0.7 0 0 0 0.49,0.21 h 0.34 a 0.85,0.85 0 0 1 0.47,0.19 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path121" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 31.62,23.62 a 0.93,0.93 0 0 1 0.25,0.67 V 31 A 0.94,0.94 0 0 1 31.62,31.68 0.85,0.85 0 0 1 31,32 0.86,0.86 0 0 1 30.3,31.69 l -4,-5.15 V 31 A 1,1 0 0 1 26.07,31.68 0.81,0.81 0 0 1 25.44,31.94 0.83,0.83 0 0 1 24.8,31.68 1,1 0 0 1 24.56,31 v -6.72 a 0.93,0.93 0 0 1 0.25,-0.67 0.85,0.85 0 0 1 0.64,-0.26 0.81,0.81 0 0 1 0.68,0.31 l 4,5.11 v -4.5 a 0.94,0.94 0 0 1 0.24,-0.67 0.81,0.81 0 0 1 0.62,-0.26 0.85,0.85 0 0 1 0.63,0.28 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path123" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 39.07,26.1 a 0.81,0.81 0 0 1 0.25,0.62 v 4.4 a 0.76,0.76 0 0 1 -0.26,0.6 1,1 0 0 1 -0.67,0.23 0.85,0.85 0 0 1 -0.61,-0.22 0.76,0.76 0 0 1 -0.23,-0.58 V 31 a 1.86,1.86 0 0 1 -0.73,0.7 2.43,2.43 0 0 1 -2.68,-0.38 2.75,2.75 0 0 1 -0.55,-1.87 v -2.73 a 0.81,0.81 0 0 1 0.25,-0.62 0.94,0.94 0 0 1 0.67,-0.23 0.92,0.92 0 0 1 0.66,0.23 0.82,0.82 0 0 1 0.24,0.62 v 2.81 a 1.16,1.16 0 0 0 0.22,0.78 0.86,0.86 0 0 0 0.68,0.25 1.11,1.11 0 0 0 0.86,-0.36 1.35,1.35 0 0 0 0.33,-0.95 v -2.53 a 0.82,0.82 0 0 1 0.24,-0.62 0.92,0.92 0 0 1 0.66,-0.23 0.94,0.94 0 0 1 0.67,0.23 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path125" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 47.52,23.48 a 0.85,0.85 0 0 1 0.46,-0.13 1,1 0 0 1 0.65,0.24 0.74,0.74 0 0 1 0.29,0.59 0.85,0.85 0 0 1 -0.08,0.36 l -3.24,6.84 a 0.94,0.94 0 0 1 -0.4,0.43 1.18,1.18 0 0 1 -1.15,0 0.94,0.94 0 0 1 -0.4,-0.43 l -3.24,-6.84 a 0.77,0.77 0 0 1 -0.08,-0.35 0.74,0.74 0 0 1 0.3,-0.6 1,1 0 0 1 0.67,-0.24 0.88,0.88 0 0 1 0.46,0.13 0.79,0.79 0 0 1 0.32,0.38 l 2.57,5.62 2.57,-5.62 a 0.8,0.8 0 0 1 0.3,-0.38 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path127" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 53.29,26 a 0.71,0.71 0 0 1 0.21,0.56 0.8,0.8 0 0 1 -0.19,0.59 1.12,1.12 0 0 1 -0.68,0.24 h -0.36 a 1.37,1.37 0 0 0 -1,0.43 1.42,1.42 0 0 0 -0.29,0.92 v 2.36 a 0.78,0.78 0 0 1 -0.26,0.64 1,1 0 0 1 -0.64,0.22 1,1 0 0 1 -0.65,-0.22 0.78,0.78 0 0 1 -0.26,-0.64 v -4.4 a 0.75,0.75 0 0 1 0.26,-0.61 1,1 0 0 1 0.64,-0.22 0.88,0.88 0 0 1 0.6,0.21 0.73,0.73 0 0 1 0.24,0.58 V 27 a 1.67,1.67 0 0 1 0.65,-0.79 2,2 0 0 1 1,-0.31 h 0.17 a 0.75,0.75 0 0 1 0.56,0.1 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path129" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 56.62,31.69 a 0.89,0.89 0 0 1 -0.26,-0.67 v -6.08 h -1.95 q -0.89,0 -0.89,-0.77 0,-0.77 0.89,-0.76 h 5.76 q 0.89,0 0.89,0.76 0,0.76 -0.89,0.77 H 58.23 V 31 a 0.91,0.91 0 0 1 -0.25,0.67 1,1 0 0 1 -1.36,0 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path131" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 65.09,26 a 0.71,0.71 0 0 1 0.21,0.56 0.8,0.8 0 0 1 -0.19,0.59 1.12,1.12 0 0 1 -0.68,0.24 h -0.36 a 1.37,1.37 0 0 0 -1,0.43 1.42,1.42 0 0 0 -0.29,0.92 V 31.1 A 0.78,0.78 0 0 1 62.52,31.74 1,1 0 0 1 61.88,31.96 1,1 0 0 1 61.23,31.74 0.78,0.78 0 0 1 61,31.1 v -4.4 a 0.75,0.75 0 0 1 0.26,-0.61 1,1 0 0 1 0.64,-0.22 0.88,0.88 0 0 1 0.6,0.21 0.73,0.73 0 0 1 0.24,0.58 V 27 a 1.67,1.67 0 0 1 0.65,-0.79 2,2 0 0 1 1,-0.31 h 0.17 a 0.75,0.75 0 0 1 0.53,0.1 z" | |||
transform="translate(204.6)" | |||
style="fill:#fff7d4" | |||
id="path133" /></g></g></svg> |
@@ -0,0 +1,702 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
id="svg4541" | |||
x="0px" | |||
y="0px" | |||
viewBox="0 0 300 380" | |||
xml:space="preserve" | |||
sodipodi:docname="BPMCalc.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
width="300" | |||
height="380"><metadata | |||
id="metadata61"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>BPMCalc</dc:title></cc:Work></rdf:RDF></metadata><defs | |||
id="defs59" /><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1922" | |||
inkscape:window-height="1380" | |||
id="namedview57" | |||
showgrid="false" | |||
inkscape:zoom="3.0341834" | |||
inkscape:cx="96.491764" | |||
inkscape:cy="202.49872" | |||
inkscape:window-x="187" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg4541" /><style | |||
type="text/css" | |||
id="style2"> | |||
.st0{fill:#44423E;} | |||
.st1{fill:#3C3835;} | |||
.st2{fill:#141414;} | |||
.st3{fill:#FFF7D4;} | |||
.st4{fill:#141414;stroke:#000000;stroke-width:0.75;stroke-miterlimit:10;} | |||
</style><title | |||
id="title4">BPMCalc</title><polygon | |||
class="st0" | |||
points="0,297.8 0,380 150,380 150,293 150,291.5 150,287.6 150,286.2 150,272.4 150,31.8 150,31.5 150,30 150,26.1 150,24.7 150,16.5 150,0 0,0 0,24.7 0,26.1 0,30 0,31.8 0,286.2 0,287.6 0,291.5 0,293 " | |||
id="polygon6" | |||
style="fill:#44423e;fill-opacity:1" | |||
transform="scale(2,1)" /><g | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1" | |||
transform="translate(29.999957)"><g | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"><path | |||
id="path1657" | |||
class="st1" | |||
d="m 164.9,161.8 c -0.5,-1.8 -1.7,-3.3 -3.2,-4.2 -1.5,-1 -3.4,-1.3 -5.1,-0.8 -1.8,0.5 -3.3,1.7 -4.2,3.2 -7.8,14 -16.7,27.5 -26.4,40.3 -8.2,-16.1 -13.7,-33.3 -16.5,-51.2 V 146 l 15.9,-22.3 c 1.9,-2.7 10,-12.4 -6.2,-19.4 -6.1,-2.2 -12.8,-2 -18.7,0.6 -18.4,7.9 -15.2,33.8 -14.7,38 0,1.7 0.2,3.3 0.7,4.9 l -30,49.3 c 0,0 3.9,-25.9 4.6,-30.5 1.2,-5.8 -2.6,-11.5 -8.5,-12.7 0,0 0,0 0,0 l -0.4,-0.1 c -7.9,-1.9 -12.8,0.5 -18,21 -4.4,17.4 -20.1,60.6 -30.6,60.3 -6.2,0 -1.9,-27 5.4,-46.6 8.9,-23.4 30,-55.5 53.8,-70 5.5,-3.4 12.7,-11.9 5.2,-20.3 -9.4,-10.6 -19.5,-2.2 -23.8,1 -11.3,9.6 -20.7,21.3 -27.7,34.5 -9.9,15.6 -17.4,32.5 -22.3,50.3 -7.9,25.8 -16.4,67.7 0.8,69.3 23.8,2.1 42.7,-44.1 42.7,-44.1 0,0 -1,24.2 11.1,24.8 12.1,0.6 35.8,-46.8 42.5,-62.8 4.6,15.5 11.2,30.3 19.8,44 0.4,1 0.8,2 1.1,3.1 -2.7,3.7 -29.9,38.5 -37.8,59.5 -0.9,1.8 -0.9,3.9 0,5.7 0.8,1.6 2.2,2.9 4,3.3 2,0.4 4.1,0 5.9,-1 1.8,-0.8 3.6,-1.7 5.2,-2.8 38.3,-22 43.8,-47.6 41,-67.2 0.6,-1.1 1.3,-2.2 2.1,-3.2 11.5,-14.4 21.8,-29.7 30.9,-45.8 1.2,-1.3 1.8,-3.2 1.4,-5 z" | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" /></g></g><rect | |||
id="rect1806" | |||
class="st1" | |||
width="300" | |||
height="15" | |||
style="fill:#3c3835;fill-opacity:1;stroke-width:1.2247448" | |||
x="0" | |||
y="0" /><rect | |||
id="rect1982" | |||
y="365" | |||
class="st1" | |||
width="300" | |||
height="15" | |||
style="fill:#3c3835;fill-opacity:1;stroke-width:1.2247448" | |||
x="0" /><g | |||
id="g1553"><path | |||
style="fill:#141414" | |||
inkscape:connector-curvature="0" | |||
d="m 18.5,2.8 h 8.4 c 2.8,-0.1 5.1,2 5.3,4.7 v 0 c -0.2,2.8 -2.5,4.9 -5.3,4.7 h -8.4 c -2.8,0.1 -5.1,-2 -5.3,-4.7 v 0 c 0.2,-2.7 2.6,-4.8 5.3,-4.7 z" | |||
class="st2" | |||
id="rect861" /><path | |||
style="fill:#141414" | |||
inkscape:connector-curvature="0" | |||
d="m 18.5,368.3 h 8.4 c 2.8,-0.1 5.1,2 5.3,4.7 v 0 c -0.2,2.8 -2.5,4.9 -5.3,4.7 h -8.4 c -2.8,0.2 -5.1,-2 -5.3,-4.7 0,0 0,0 0,0 v 0 c 0.2,-2.8 2.5,-4.9 5.3,-4.7 0,0 0,0 0,0 z" | |||
class="st2" | |||
id="rect863" /></g><circle | |||
id="path1686" | |||
class="st1" | |||
cx="150" | |||
cy="359.89999" | |||
r="15.1" | |||
style="fill:#3c3835;fill-opacity:1" /><g | |||
id="Layer_2-2" | |||
transform="translate(74.944853)"><path | |||
style="fill:#fff7d4;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 82.6,356.8 c 0,-0.1 -0.1,-0.3 -0.3,-0.4 -0.1,-0.1 -0.3,-0.1 -0.4,-0.1 -0.1,0 -0.3,0.1 -0.3,0.3 -0.7,1.2 -1.4,2.3 -2.2,3.4 -0.7,-1.4 -1.2,-2.8 -1.4,-4.3 v -0.3 l 1.3,-1.9 c 0.2,-0.2 0.8,-1 -0.5,-1.6 -0.5,-0.2 -1.1,-0.2 -1.6,0 -1.6,0.7 -1.3,2.8 -1.2,3.2 0,0.1 0,0.3 0.1,0.4 l -2.5,4.1 0.4,-2.6 c 0.1,-0.5 -0.2,-1 -0.7,-1.1 v 0 c -0.7,-0.2 -1.1,0 -1.5,1.8 -0.4,1.5 -1.7,5.1 -2.6,5.1 -0.5,0 -0.2,-2.3 0.4,-3.9 0.9,-2.3 2.5,-4.4 4.5,-5.8 0.5,-0.3 1.1,-1 0.4,-1.7 -0.8,-0.9 -1.6,-0.2 -2,0.1 -1,0.8 -1.7,1.8 -2.3,2.9 -0.8,1.3 -1.5,2.7 -1.9,4.2 -0.7,2.2 -1.4,5.7 0.1,5.8 2,0.2 3.6,-3.7 3.6,-3.7 0,0 -0.1,2 0.9,2.1 1,0.1 3,-3.9 3.6,-5.3 0.4,1.3 0.9,2.5 1.7,3.7 0,0.1 0.1,0.2 0.1,0.3 -1.2,1.5 -2.3,3.2 -3.2,5 -0.1,0.2 -0.1,0.3 0,0.5 0.1,0.1 0.2,0.2 0.3,0.3 0.2,0 0.3,0 0.5,-0.1 0.2,-0.1 0.3,-0.1 0.4,-0.2 3.2,-1.9 3.7,-4 3.4,-5.6 0,-0.1 0.1,-0.2 0.2,-0.3 1,-1.2 1.8,-2.5 2.6,-3.8 0.1,-0.2 0.1,-0.4 0.1,-0.5 z" | |||
class="st3" | |||
id="path8-4-6" /></g><g | |||
id="g1986" | |||
transform="translate(150)"><path | |||
id="path1191" | |||
class="st2" | |||
d="m 122.2,2.8 c -2.8,-0.1 -5.1,2 -5.2,4.7 0.2,2.8 2.5,4.9 5.3,4.7 h 8.4 c 2.8,0.1 5.1,-2 5.3,-4.7 -0.2,-2.8 -2.5,-4.9 -5.3,-4.7 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#141414" /><path | |||
id="rect865" | |||
class="st2" | |||
d="m 122.2,368.3 c -2.6,-0.3 -4.9,1.6 -5.2,4.2 -0.3,2.6 1.6,4.9 4.2,5.2 0.3,0 0.6,0 1,0 h 8.4 c 2.6,0.3 4.9,-1.6 5.2,-4.2 0.3,-2.6 -1.6,-4.9 -4.2,-5.2 -0.3,0 -0.6,0 -1,0 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#141414" /></g><g | |||
id="g901" | |||
transform="translate(29.55,-9.55)"><path | |||
class="st3" | |||
d="m 26.7,40.9 c 0.3,0.4 0.4,0.8 0.4,1.3 0,0.7 -0.3,1.3 -0.8,1.7 -0.5,0.4 -1.2,0.6 -2.2,0.6 H 21 c -0.3,0 -0.5,-0.1 -0.6,-0.2 -0.1,-0.1 -0.2,-0.4 -0.2,-0.6 V 37 c 0,-0.3 0.1,-0.5 0.2,-0.6 0.1,-0.1 0.4,-0.2 0.6,-0.2 h 3 c 0.9,0 1.6,0.2 2.1,0.6 0.5,0.4 0.8,0.9 0.8,1.6 0,0.4 -0.1,0.8 -0.4,1.2 -0.3,0.4 -0.6,0.6 -1,0.7 0.5,0 0.9,0.2 1.2,0.6 z m -4.8,-1.4 h 1.8 c 0.5,0 0.8,-0.1 1.1,-0.2 0.2,-0.2 0.3,-0.4 0.3,-0.8 0,-0.4 -0.1,-0.6 -0.3,-0.8 -0.2,-0.2 -0.6,-0.2 -1.1,-0.2 h -1.8 z m 3.1,3.3 c 0.2,-0.2 0.3,-0.4 0.3,-0.8 0,-0.4 -0.1,-0.7 -0.3,-0.8 -0.2,-0.2 -0.6,-0.3 -1.1,-0.3 h -2 v 2.2 h 2 c 0.5,0 0.9,-0.1 1.1,-0.3 z" | |||
id="path24" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 28.9,44.3 c -0.2,-0.2 -0.3,-0.4 -0.3,-0.7 v -6.7 c 0,-0.3 0.1,-0.5 0.2,-0.6 0.1,-0.1 0.4,-0.2 0.6,-0.2 h 3 c 0.9,0 1.6,0.2 2.1,0.7 0.5,0.5 0.8,1.1 0.8,1.9 0,0.8 -0.3,1.5 -0.8,1.9 -0.5,0.5 -1.2,0.7 -2.1,0.7 h -2 v 2.3 c 0,0.3 -0.1,0.5 -0.3,0.7 -0.2,0.2 -0.4,0.3 -0.7,0.3 -0.3,0 -0.4,-0.1 -0.5,-0.3 z m 3.4,-4.4 c 0.9,0 1.4,-0.4 1.4,-1.2 0,-0.8 -0.5,-1.2 -1.4,-1.2 h -1.8 v 2.4 z" | |||
id="path26" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 45,36.3 c 0.2,0.2 0.2,0.4 0.2,0.7 v 6.8 c 0,0.3 -0.1,0.5 -0.2,0.6 -0.2,0.2 -0.4,0.2 -0.6,0.2 -0.2,0 -0.4,-0.1 -0.6,-0.2 -0.2,-0.2 -0.2,-0.4 -0.2,-0.6 v -4.2 l -1.7,3.2 c -0.1,0.2 -0.2,0.4 -0.4,0.5 -0.1,0.1 -0.3,0.1 -0.5,0.1 -0.2,0 -0.3,0 -0.5,-0.1 -0.1,-0.1 -0.3,-0.2 -0.4,-0.5 l -1.7,-3.1 v 4.2 c 0,0.3 -0.1,0.5 -0.2,0.6 -0.2,0.2 -0.4,0.2 -0.6,0.2 -0.2,0 -0.4,-0.1 -0.6,-0.2 -0.2,-0.2 -0.2,-0.4 -0.2,-0.6 v -6.8 c 0,-0.3 0.1,-0.5 0.2,-0.7 0.2,-0.2 0.4,-0.3 0.6,-0.3 0.4,0 0.7,0.2 0.9,0.6 l 2.4,4.6 2.4,-4.6 c 0.2,-0.4 0.5,-0.6 0.9,-0.6 0.4,-0.1 0.6,0 0.8,0.2 z" | |||
id="path28" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="M 51,44.3 C 50.8,44.1 50.8,43.9 50.8,43.7 V 37 c 0,-0.3 0.1,-0.5 0.2,-0.6 0.1,-0.1 0.4,-0.2 0.6,-0.2 H 54 c 0.9,0 1.7,0.2 2.4,0.5 0.7,0.3 1.2,0.8 1.5,1.5 0.3,0.7 0.5,1.4 0.5,2.3 0,0.9 -0.2,1.6 -0.5,2.3 -0.3,0.6 -0.9,1.1 -1.5,1.5 -0.6,0.4 -1.5,0.5 -2.4,0.5 H 51.6 C 51.4,44.5 51.2,44.4 51,44.3 Z M 53.9,43 c 1.8,0 2.7,-0.9 2.7,-2.7 0,-1.8 -0.9,-2.7 -2.7,-2.7 H 52.6 V 43 Z" | |||
id="path30" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 65.2,43 c 0.1,0.1 0.1,0.3 0.1,0.5 0,0.1 0,0.3 -0.1,0.4 -0.1,0.1 -0.2,0.2 -0.3,0.3 -0.3,0.1 -0.6,0.3 -0.9,0.4 -0.3,0.1 -0.7,0.1 -1,0.1 -0.6,0 -1.2,-0.1 -1.7,-0.4 -0.5,-0.2 -0.8,-0.6 -1.1,-1.1 -0.3,-0.5 -0.4,-1 -0.4,-1.6 0,-0.6 0.1,-1.1 0.4,-1.6 0.2,-0.5 0.6,-0.8 1,-1.1 0.4,-0.3 0.9,-0.4 1.5,-0.4 0.5,0 1,0.1 1.4,0.4 0.4,0.2 0.7,0.6 0.9,1 0.2,0.4 0.3,0.9 0.3,1.5 0,0.2 0,0.3 -0.1,0.4 -0.1,0.1 -0.2,0.1 -0.4,0.1 h -3.4 c 0.1,0.5 0.2,0.8 0.4,1 0.2,0.2 0.6,0.3 1,0.3 0.2,0 0.4,0 0.6,-0.1 0.2,-0.1 0.4,-0.1 0.6,-0.2 0.1,0 0.2,-0.1 0.3,-0.1 0.1,0 0.2,-0.1 0.3,-0.1 0.3,0.1 0.5,0.1 0.6,0.3 z m -3.3,-2.9 c -0.2,0.2 -0.3,0.5 -0.4,1 h 2.3 c 0,-0.4 -0.1,-0.7 -0.3,-1 -0.2,-0.2 -0.5,-0.3 -0.8,-0.3 -0.3,-0.1 -0.6,0 -0.8,0.3 z" | |||
id="path32" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="M 66.9,44.4 C 66.7,44.3 66.6,44 66.6,43.8 v -6.9 c 0,-0.3 0.1,-0.5 0.3,-0.6 0.2,-0.1 0.4,-0.2 0.7,-0.2 0.3,0 0.5,0.1 0.6,0.2 0.2,0.1 0.3,0.4 0.3,0.6 v 6.9 c 0,0.3 -0.1,0.5 -0.3,0.6 -0.2,0.1 -0.4,0.2 -0.6,0.2 -0.3,0 -0.5,-0.1 -0.7,-0.2 z" | |||
id="path34" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 74.7,39.1 c 0.4,0.4 0.6,1.1 0.6,1.9 v 2.7 c 0,0.3 -0.1,0.5 -0.2,0.6 -0.2,0.1 -0.4,0.2 -0.6,0.2 -0.3,0 -0.5,-0.1 -0.6,-0.2 -0.2,-0.2 -0.2,-0.4 -0.2,-0.6 v -0.1 c -0.1,0.3 -0.3,0.5 -0.6,0.7 -0.3,0.2 -0.6,0.3 -1,0.3 -0.4,0 -0.8,-0.1 -1.1,-0.2 -0.3,-0.2 -0.6,-0.4 -0.8,-0.7 -0.2,-0.3 -0.3,-0.6 -0.3,-1 0,-0.4 0.1,-0.8 0.3,-1 0.2,-0.2 0.6,-0.4 1.1,-0.5 0.5,-0.1 1.2,-0.2 2,-0.2 h 0.3 v -0.2 c 0,-0.3 -0.1,-0.6 -0.2,-0.7 -0.1,-0.2 -0.4,-0.2 -0.7,-0.2 -0.3,0 -0.8,0.1 -1.5,0.4 -0.2,0.1 -0.3,0.1 -0.5,0.1 -0.2,0 -0.3,-0.1 -0.4,-0.2 -0.1,-0.1 -0.2,-0.3 -0.2,-0.5 0,-0.2 0,-0.3 0.1,-0.4 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.3,-0.2 0.6,-0.3 1,-0.4 0.4,-0.1 0.8,-0.1 1.2,-0.1 0.9,0 1.6,0.2 2,0.6 z M 73.3,43 c 0.2,-0.2 0.3,-0.5 0.3,-0.9 v -0.2 h -0.2 c -0.6,0 -1.1,0.1 -1.4,0.2 -0.3,0.1 -0.4,0.3 -0.4,0.6 0,0.2 0.1,0.4 0.2,0.5 0.1,0.1 0.3,0.2 0.6,0.2 0.4,0 0.7,-0.2 0.9,-0.4 z" | |||
id="path36" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 81.2,38.7 c 0.1,-0.1 0.3,-0.1 0.4,-0.1 0.2,0 0.4,0.1 0.6,0.2 0.2,0.1 0.3,0.3 0.3,0.5 0,0.1 0,0.2 -0.1,0.3 l -3.2,6.6 c -0.1,0.2 -0.2,0.3 -0.3,0.4 -0.1,0.1 -0.3,0.1 -0.4,0.1 -0.2,0 -0.4,-0.1 -0.6,-0.2 -0.2,-0.1 -0.3,-0.3 -0.3,-0.5 0,-0.1 0,-0.2 0.1,-0.4 L 78.5,44 76.4,39.6 c 0,-0.1 -0.1,-0.2 -0.1,-0.3 0,-0.2 0.1,-0.4 0.3,-0.6 0.2,-0.2 0.4,-0.2 0.6,-0.2 0.2,0 0.3,0 0.4,0.1 0.1,0.1 0.2,0.2 0.3,0.4 l 1.5,3.2 1.5,-3.2 c 0.1,-0.1 0.2,-0.3 0.3,-0.3 z" | |||
id="path38" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 83.6,45.3 c -0.1,0.1 -0.3,0.1 -0.4,0.1 -0.2,0 -0.3,-0.1 -0.5,-0.2 -0.1,-0.1 -0.2,-0.3 -0.2,-0.5 0,-0.1 0,-0.2 0,-0.3 l 2.7,-8.6 c 0.1,-0.2 0.1,-0.3 0.3,-0.4 0.2,-0.1 0.3,-0.1 0.4,-0.1 0.2,0 0.4,0.1 0.5,0.2 0.1,0.1 0.2,0.3 0.2,0.5 0,0.1 0,0.2 0,0.3 l -2.8,8.6 c 0.1,0.2 0,0.3 -0.2,0.4 z" | |||
id="path40" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 95,36.3 c 0.2,0.2 0.3,0.4 0.3,0.7 v 6.7 c 0,0.3 -0.1,0.5 -0.3,0.7 -0.2,0.2 -0.4,0.3 -0.7,0.3 -0.3,0 -0.5,-0.1 -0.7,-0.3 C 93.4,44.2 93.4,44 93.4,43.7 V 41 h -3.9 v 2.7 c 0,0.3 -0.1,0.5 -0.3,0.7 -0.2,0.2 -0.4,0.3 -0.7,0.3 -0.3,0 -0.5,-0.1 -0.7,-0.3 C 87.6,44.2 87.5,44 87.5,43.7 V 37 c 0,-0.3 0.1,-0.5 0.3,-0.7 0.2,-0.2 0.4,-0.3 0.7,-0.3 0.3,0 0.5,0.1 0.7,0.3 0.2,0.2 0.2,0.4 0.2,0.7 v 2.6 h 3.9 V 37 c 0,-0.3 0.1,-0.5 0.2,-0.7 0.1,-0.2 0.5,-0.3 0.8,-0.3 0.3,0 0.5,0.1 0.7,0.3 z" | |||
id="path42" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 102.3,43.8 c 0,0.4 -0.3,0.7 -0.8,0.7 h -3.9 c -0.2,0 -0.4,-0.1 -0.6,-0.2 -0.2,-0.2 -0.2,-0.3 -0.2,-0.5 0,-0.2 0.1,-0.4 0.3,-0.6 l 2.8,-3.1 h -2.3 c -0.5,0 -0.8,-0.2 -0.8,-0.7 0,-0.5 0.3,-0.7 0.8,-0.7 h 3.7 c 0.2,0 0.4,0.1 0.6,0.2 0.1,0.2 0.2,0.3 0.2,0.6 0,0.2 -0.1,0.4 -0.3,0.6 L 99,43.2 h 2.4 c 0.6,0 0.9,0.2 0.9,0.6 z" | |||
id="path44" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 108.9,44.1 c -0.6,-0.4 -1.1,-0.9 -1.4,-1.5 -0.3,-0.7 -0.5,-1.4 -0.5,-2.3 0,-0.9 0.2,-1.6 0.5,-2.3 0.3,-0.7 0.8,-1.2 1.4,-1.5 0.6,-0.3 1.4,-0.5 2.2,-0.5 1,0 2,0.3 2.7,0.9 0.1,0.1 0.2,0.2 0.3,0.3 0.1,0.1 0.1,0.2 0.1,0.4 0,0.2 -0.1,0.4 -0.2,0.5 -0.1,0.1 -0.3,0.2 -0.4,0.2 -0.1,0 -0.2,0 -0.3,0 -0.1,0 -0.2,-0.1 -0.3,-0.2 -0.3,-0.2 -0.6,-0.4 -0.9,-0.4 -0.3,-0.1 -0.6,-0.1 -0.9,-0.1 -0.8,0 -1.3,0.2 -1.7,0.7 -0.4,0.5 -0.6,1.2 -0.6,2.1 0,1.9 0.8,2.9 2.3,2.9 0.3,0 0.6,0 0.8,-0.1 0.3,-0.1 0.6,-0.2 0.9,-0.4 0.1,-0.1 0.2,-0.1 0.3,-0.2 0.1,0 0.2,0 0.3,0 0.2,0 0.3,0.1 0.4,0.2 0.1,0.1 0.2,0.3 0.2,0.5 0,0.1 0,0.3 -0.1,0.4 -0.1,0.1 -0.1,0.2 -0.2,0.3 -0.8,0.6 -1.7,0.9 -2.7,0.9 -0.9,-0.3 -1.6,-0.4 -2.2,-0.8 z" | |||
id="path46" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 119.8,39.1 c 0.4,0.4 0.6,1.1 0.6,1.9 v 2.7 c 0,0.3 -0.1,0.5 -0.2,0.6 -0.2,0.1 -0.4,0.2 -0.6,0.2 -0.3,0 -0.5,-0.1 -0.6,-0.2 -0.2,-0.2 -0.2,-0.4 -0.2,-0.6 v -0.1 c -0.1,0.3 -0.3,0.5 -0.6,0.7 -0.3,0.2 -0.6,0.3 -1,0.3 -0.4,0 -0.8,-0.1 -1.1,-0.2 -0.3,-0.2 -0.6,-0.4 -0.8,-0.7 -0.2,-0.3 -0.3,-0.6 -0.3,-1 0,-0.4 0.1,-0.8 0.3,-1 0.2,-0.2 0.6,-0.4 1.1,-0.5 0.5,-0.1 1.2,-0.2 2,-0.2 h 0.3 v -0.2 c 0,-0.3 -0.1,-0.6 -0.2,-0.7 -0.1,-0.2 -0.4,-0.2 -0.7,-0.2 -0.3,0 -0.8,0.1 -1.5,0.4 -0.2,0.1 -0.3,0.1 -0.5,0.1 -0.2,0 -0.3,-0.1 -0.4,-0.2 -0.1,-0.1 -0.2,-0.3 -0.2,-0.5 0,-0.2 0,-0.3 0.1,-0.4 0.1,-0.1 0.2,-0.2 0.3,-0.3 0.3,-0.2 0.6,-0.3 1,-0.4 0.4,-0.1 0.8,-0.1 1.2,-0.1 1,0 1.6,0.2 2,0.6 z m -1.4,3.9 c 0.2,-0.2 0.3,-0.5 0.3,-0.9 v -0.2 h -0.2 c -0.6,0 -1.1,0.1 -1.4,0.2 -0.3,0.1 -0.4,0.3 -0.4,0.6 0,0.2 0.1,0.4 0.2,0.5 0.1,0.1 0.3,0.2 0.6,0.2 0.4,0 0.7,-0.2 0.9,-0.4 z" | |||
id="path48" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="M 122.3,44.4 C 122.1,44.3 122,44 122,43.8 v -6.9 c 0,-0.3 0.1,-0.5 0.3,-0.6 0.2,-0.1 0.4,-0.2 0.7,-0.2 0.3,0 0.5,0.1 0.6,0.2 0.2,0.1 0.3,0.4 0.3,0.6 v 6.9 c 0,0.3 -0.1,0.5 -0.3,0.6 -0.2,0.1 -0.4,0.2 -0.6,0.2 -0.3,0 -0.5,-0.1 -0.7,-0.2 z" | |||
id="path50" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /><path | |||
class="st3" | |||
d="m 126.6,44.2 c -0.5,-0.2 -0.8,-0.6 -1,-1.1 -0.2,-0.5 -0.4,-1 -0.4,-1.6 0,-0.6 0.1,-1.2 0.4,-1.6 0.3,-0.5 0.6,-0.8 1.1,-1.1 0.5,-0.3 1,-0.4 1.6,-0.4 0.3,0 0.6,0 1,0.1 0.4,0.1 0.6,0.2 0.9,0.4 0.2,0.2 0.4,0.4 0.4,0.7 0,0.2 0,0.4 -0.1,0.5 -0.1,0.1 -0.2,0.2 -0.4,0.2 -0.1,0 -0.2,0 -0.3,-0.1 -0.1,-0.1 -0.2,-0.1 -0.4,-0.2 -0.2,-0.1 -0.3,-0.2 -0.4,-0.2 -0.1,0 -0.3,-0.1 -0.5,-0.1 -0.4,0 -0.8,0.1 -1,0.4 -0.2,0.3 -0.4,0.7 -0.4,1.2 0,0.5 0.1,1 0.4,1.2 0.3,0.2 0.6,0.4 1,0.4 0.2,0 0.3,0 0.4,-0.1 0.1,-0.1 0.3,-0.1 0.5,-0.2 0.2,-0.1 0.3,-0.1 0.4,-0.2 0.1,0 0.2,-0.1 0.3,-0.1 0.2,0 0.3,0.1 0.4,0.2 0.1,0.1 0.2,0.3 0.2,0.5 0,0.3 -0.1,0.5 -0.4,0.7 -0.3,0.2 -0.6,0.3 -0.9,0.4 -0.3,0.1 -0.7,0.1 -1.1,0.1 -0.7,0.4 -1.2,0.3 -1.7,0 z" | |||
id="path52" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /></g><g | |||
style="display:inline" | |||
id="g938" | |||
transform="matrix(0.56228326,0,0,0.56228326,-52.085636,-11.020274)"><path | |||
id="path922" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 21.14,21.46 a 2.12,2.12 0 0 1 0.4,1.31 2,2 0 0 1 -0.79,1.69 3.4,3.4 0 0 1 -2.17,0.62 H 15.45 A 0.79,0.79 0 0 1 14.57,24.2 v -6.69 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.38,3.38 0 0 1 2.09,0.59 1.91,1.91 0 0 1 0.77,1.61 A 2,2 0 0 1 21,20 a 2,2 0 0 1 -1,0.73 2.12,2.12 0 0 1 1.14,0.73 z M 16.4,20.08 h 1.76 a 1.83,1.83 0 0 0 1.06,-0.25 0.86,0.86 0 0 0 0.34,-0.75 0.89,0.89 0 0 0 -0.34,-0.77 1.84,1.84 0 0 0 -1.06,-0.25 H 16.4 Z m 3.06,3.34 A 1,1 0 0 0 19.8,22.6 1,1 0 0 0 19.46,21.77 1.76,1.76 0 0 0 18.38,21.51 h -2 v 2.16 h 2 a 1.82,1.82 0 0 0 1.08,-0.26 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path924" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 23.33,24.91 a 0.92,0.92 0 0 1 -0.25,-0.68 v -6.72 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.09,3.09 0 0 1 2.15,0.7 2.49,2.49 0 0 1 0.77,1.94 2.49,2.49 0 0 1 -0.77,1.94 3.09,3.09 0 0 1 -2.15,0.7 H 25 v 2.32 a 1,1 0 0 1 -1.62,0.68 z m 3.4,-4.42 q 1.4,0 1.4,-1.21 0,-1.21 -1.4,-1.22 H 25 v 2.44 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path926" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 39.49,16.83 a 0.93,0.93 0 0 1 0.25,0.67 v 6.82 a 0.84,0.84 0 0 1 -0.23,0.62 0.81,0.81 0 0 1 -0.6,0.23 0.8,0.8 0 0 1 -0.59,-0.23 0.84,0.84 0 0 1 -0.23,-0.62 v -4.24 l -1.7,3.2 a 1.34,1.34 0 0 1 -0.37,0.46 0.84,0.84 0 0 1 -0.94,0 1.3,1.3 0 0 1 -0.37,-0.46 L 33,20.14 v 4.18 a 0.85,0.85 0 0 1 -0.23,0.62 0.88,0.88 0 0 1 -1.19,0 0.84,0.84 0 0 1 -0.23,-0.62 V 17.5 a 0.93,0.93 0 0 1 0.25,-0.67 0.85,0.85 0 0 1 0.64,-0.26 1,1 0 0 1 0.88,0.61 L 35.56,21.8 38,17.18 a 1,1 0 0 1 0.86,-0.61 0.85,0.85 0 0 1 0.63,0.26 z" | |||
inkscape:connector-curvature="0" /></g><rect | |||
style="opacity:1;vector-effect:none;fill:#181414;fill-opacity:1;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
id="rect1555" | |||
width="196" | |||
height="236" | |||
x="7" | |||
y="103.625" | |||
rx="6" | |||
ry="6" /><g | |||
aria-label="NOTE" | |||
transform="translate(235.77148,24.571781)" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.66666698px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';letter-spacing:0px;word-spacing:0px;fill:#fff7d4;fill-opacity:1;stroke:none" | |||
id="flowRoot1557"><path | |||
d="m -206.65039,67.770558 2.23047,3.375 v -3.40625 q 0,-0.332031 0.14062,-0.496094 0.14453,-0.167968 0.38672,-0.167968 0.25,0 0.39453,0.167968 0.14453,0.164063 0.14453,0.496094 v 4.503906 q 0,0.753907 -0.625,0.753907 -0.15625,0 -0.28125,-0.04687 -0.125,-0.04297 -0.23437,-0.140625 -0.10938,-0.09766 -0.20313,-0.226563 -0.0937,-0.132812 -0.1875,-0.269531 l -2.17578,-3.335938 v 3.355469 q 0,0.328125 -0.15234,0.496094 -0.15234,0.167969 -0.39063,0.167969 -0.24609,0 -0.39453,-0.167969 -0.14843,-0.171875 -0.14843,-0.496094 v -4.417969 q 0,-0.28125 0.0625,-0.441406 0.0742,-0.175781 0.24609,-0.285156 0.17187,-0.113281 0.37109,-0.113281 0.15625,0 0.26563,0.05078 0.11328,0.05078 0.19531,0.136719 0.0859,0.08594 0.17188,0.222656 0.0898,0.136719 0.18359,0.285156 z" | |||
style="font-size:8px;fill:#fff7d4;fill-opacity:1" | |||
id="path1581" | |||
inkscape:connector-curvature="0" /><path | |||
d="m -199.56445,67.075246 q 0.89062,0 1.52734,0.363281 0.64063,0.359375 0.96875,1.027344 0.32813,0.664062 0.32813,1.5625 0,0.664062 -0.17969,1.207031 -0.17969,0.542969 -0.53906,0.941406 -0.35938,0.398438 -0.88282,0.609375 -0.52343,0.210938 -1.19922,0.210938 -0.67187,0 -1.20312,-0.214844 -0.53125,-0.21875 -0.88672,-0.613281 -0.35547,-0.394532 -0.53906,-0.949219 -0.17969,-0.554688 -0.17969,-1.199219 0,-0.660156 0.1875,-1.210937 0.19141,-0.550782 0.55078,-0.9375 0.35938,-0.386719 0.875,-0.589844 0.51563,-0.207031 1.17188,-0.207031 z m 1.64843,2.945312 q 0,-0.628906 -0.20312,-1.089844 -0.20313,-0.460937 -0.58203,-0.695312 -0.375,-0.238281 -0.86328,-0.238281 -0.34766,0 -0.64453,0.132812 -0.29297,0.128906 -0.50782,0.378906 -0.21093,0.25 -0.33593,0.640625 -0.1211,0.386719 -0.1211,0.871094 0,0.488281 0.1211,0.882813 0.125,0.394531 0.34765,0.65625 0.22656,0.257812 0.51563,0.386718 0.29297,0.128907 0.64062,0.128907 0.44531,0 0.81641,-0.222657 0.375,-0.222656 0.59375,-0.6875 0.22265,-0.464843 0.22265,-1.144531 z" | |||
style="font-size:8px;fill:#fff7d4;fill-opacity:1" | |||
id="path1583" | |||
inkscape:connector-curvature="0" /><path | |||
d="m -192.31055,68.129933 h -1.26562 v 4.160156 q 0,0.359375 -0.16016,0.535157 -0.16015,0.171875 -0.41406,0.171875 -0.25781,0 -0.42188,-0.175782 -0.16015,-0.175781 -0.16015,-0.53125 v -4.160156 h -1.26563 q -0.29687,0 -0.4414,-0.128906 -0.14453,-0.132813 -0.14453,-0.347656 0,-0.222657 0.14843,-0.351563 0.15235,-0.128906 0.4375,-0.128906 h 3.6875 q 0.30078,0 0.44532,0.132812 0.14843,0.132813 0.14843,0.347657 0,0.214843 -0.14843,0.347656 -0.14844,0.128906 -0.44532,0.128906 z" | |||
style="font-size:8px;fill:#fff7d4;fill-opacity:1" | |||
id="path1585" | |||
inkscape:connector-curvature="0" /><path | |||
d="m -187.24805,68.067433 h -2.61328 v 1.40625 h 2.40625 q 0.26563,0 0.39453,0.121094 0.13282,0.117187 0.13282,0.3125 0,0.195312 -0.12891,0.320312 -0.12891,0.121094 -0.39844,0.121094 h -2.40625 v 1.628906 h 2.70313 q 0.27343,0 0.41015,0.128907 0.14063,0.125 0.14063,0.335937 0,0.203125 -0.14063,0.332031 -0.13672,0.125 -0.41015,0.125 h -3.15235 q -0.3789,0 -0.54687,-0.167968 -0.16406,-0.167969 -0.16406,-0.542969 v -4.304688 q 0,-0.25 0.0742,-0.40625 0.0742,-0.160156 0.23047,-0.230468 0.16016,-0.07422 0.40625,-0.07422 h 3.0625 q 0.27735,0 0.41016,0.125 0.13672,0.121094 0.13672,0.320312 0,0.203125 -0.13672,0.328125 -0.13281,0.121094 -0.41016,0.121094 z" | |||
style="font-size:8px;fill:#fff7d4;fill-opacity:1" | |||
id="path1587" | |||
inkscape:connector-curvature="0" /></g><g | |||
aria-label="MS" | |||
transform="translate(292.43359,24.571781)" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.66666698px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';letter-spacing:0px;word-spacing:0px;fill:#fff7d4;fill-opacity:1;stroke:none" | |||
id="flowRoot1571"><path | |||
d="m -206.22852,72.036183 -0.91796,-3.648437 v 3.953125 q 0,0.328125 -0.14844,0.492187 -0.14453,0.164063 -0.38672,0.164063 -0.23438,0 -0.38281,-0.160157 -0.14844,-0.164062 -0.14844,-0.496093 v -4.53125 q 0,-0.375 0.19531,-0.503907 0.19531,-0.132812 0.52735,-0.132812 h 0.35937 q 0.32422,0 0.46875,0.05859 0.14844,0.05859 0.21875,0.210937 0.0703,0.152344 0.16016,0.496094 l 0.83203,3.136719 0.83203,-3.136719 q 0.0898,-0.34375 0.16016,-0.496094 0.0703,-0.152344 0.21484,-0.210937 0.14844,-0.05859 0.47266,-0.05859 h 0.35937 q 0.33203,0 0.52734,0.132812 0.19532,0.128907 0.19532,0.503907 v 4.53125 q 0,0.328125 -0.14844,0.492187 -0.14453,0.164063 -0.39063,0.164063 -0.23046,0 -0.3789,-0.164063 -0.14844,-0.164062 -0.14844,-0.492187 v -3.953125 l -0.91797,3.648437 q -0.0898,0.355469 -0.14844,0.523438 -0.0547,0.164062 -0.20703,0.300781 -0.15234,0.136719 -0.42187,0.136719 -0.20313,0 -0.34375,-0.08984 -0.14063,-0.08594 -0.21875,-0.222656 -0.0781,-0.136719 -0.125,-0.300782 -0.043,-0.167968 -0.0899,-0.347656 z" | |||
style="font-size:8px" | |||
id="path1590" | |||
inkscape:connector-curvature="0" /><path | |||
d="m -197.13867,71.180714 q 0,0.519532 -0.26953,0.933594 -0.26563,0.414063 -0.78125,0.648438 -0.51563,0.234375 -1.22266,0.234375 -0.84766,0 -1.39844,-0.320313 -0.39062,-0.230469 -0.63672,-0.613281 -0.24218,-0.386719 -0.24218,-0.75 0,-0.210938 0.14453,-0.359375 0.14844,-0.152344 0.375,-0.152344 0.18359,0 0.30859,0.117188 0.12891,0.117187 0.21875,0.347656 0.10938,0.273437 0.23438,0.457031 0.1289,0.183594 0.35937,0.304688 0.23047,0.117187 0.60547,0.117187 0.51563,0 0.83594,-0.238281 0.32422,-0.242188 0.32422,-0.601563 0,-0.285156 -0.17578,-0.460937 -0.17188,-0.179688 -0.44922,-0.273438 -0.27344,-0.09375 -0.73438,-0.199218 -0.61719,-0.144532 -1.03515,-0.335938 -0.41407,-0.195312 -0.66016,-0.527344 -0.24219,-0.335937 -0.24219,-0.832031 0,-0.472656 0.25781,-0.839844 0.25782,-0.367187 0.7461,-0.5625 0.48828,-0.199218 1.14844,-0.199218 0.52734,0 0.91015,0.132812 0.38672,0.128906 0.64063,0.347656 0.2539,0.214844 0.37109,0.453125 0.11719,0.238282 0.11719,0.464844 0,0.207031 -0.14844,0.375 -0.14453,0.164063 -0.36328,0.164063 -0.19922,0 -0.30469,-0.09766 -0.10156,-0.101562 -0.22265,-0.328125 -0.15625,-0.324218 -0.375,-0.503906 -0.21875,-0.183594 -0.70313,-0.183594 -0.44922,0 -0.72656,0.199219 -0.27344,0.195313 -0.27344,0.472656 0,0.171875 0.0937,0.296875 0.0937,0.125 0.25781,0.214844 0.16407,0.08984 0.33203,0.140625 0.16797,0.05078 0.55469,0.148438 0.48438,0.113281 0.875,0.25 0.39453,0.136718 0.66797,0.332031 0.27734,0.195312 0.42969,0.496094 0.15625,0.296875 0.15625,0.730468 z" | |||
style="font-size:8px" | |||
id="path1592" | |||
inkscape:connector-curvature="0" /></g><g | |||
aria-label="HZ" | |||
transform="translate(365.5213,24.571781)" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.66666698px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';letter-spacing:0px;word-spacing:0px;fill:#fff7d4;fill-opacity:1;stroke:none" | |||
id="flowRoot1579"><path | |||
d="m -206.99414,67.778371 v 1.640625 h 2.50391 v -1.640625 q 0,-0.351563 0.15625,-0.527344 0.16015,-0.175781 0.41796,-0.175781 0.26172,0 0.42188,0.175781 0.16406,0.171875 0.16406,0.527344 v 4.511718 q 0,0.355469 -0.16406,0.53125 -0.16406,0.175782 -0.42188,0.175782 -0.26171,0 -0.41796,-0.175782 -0.15625,-0.179687 -0.15625,-0.53125 v -1.925781 h -2.50391 v 1.925781 q 0,0.355469 -0.16406,0.53125 -0.16407,0.175782 -0.42188,0.175782 -0.26172,0 -0.41797,-0.175782 -0.15625,-0.179687 -0.15625,-0.53125 v -4.511718 q 0,-0.351563 0.15235,-0.527344 0.15625,-0.175781 0.42187,-0.175781 0.26172,0 0.42188,0.175781 0.16406,0.171875 0.16406,0.527344 z" | |||
style="font-size:8px" | |||
id="path1595" | |||
inkscape:connector-curvature="0" /><path | |||
d="m -202.23633,71.563527 2.94141,-3.519531 h -2.52735 q -0.26562,0 -0.40234,-0.117188 -0.13281,-0.117187 -0.13281,-0.308594 0,-0.199218 0.13281,-0.320312 0.13672,-0.125 0.40234,-0.125 h 3.25782 q 0.63281,0 0.63281,0.589844 0,0.28125 -0.10547,0.449218 -0.10547,0.167969 -0.42578,0.542969 l -2.75,3.273438 h 3.03125 q 0.26953,0 0.40234,0.113281 0.13282,0.109375 0.13282,0.308594 0,0.207031 -0.13282,0.328125 -0.13281,0.121093 -0.40234,0.121093 h -3.71875 q -0.37891,0 -0.57031,-0.167968 -0.19141,-0.171875 -0.19141,-0.457032 0,-0.09766 0.0312,-0.179687 0.0312,-0.08203 0.082,-0.152344 0.0547,-0.07422 0.14844,-0.183594 0.0937,-0.113281 0.16406,-0.195312 z" | |||
style="font-size:8px" | |||
id="path1597" | |||
inkscape:connector-curvature="0" /></g><g | |||
transform="matrix(0.96635726,0,0,0.96635726,43.771026,-15.972118)" | |||
id="g57"><path | |||
inkscape:connector-curvature="0" | |||
d="M 7.15,66.79 A 0.6,0.6 0 0 1 7,66.35 v -3.74 a 0.54,0.54 0 0 1 0.59,-0.6 H 10 a 0.71,0.71 0 0 1 0.46,0.13 0.44,0.44 0 0 1 0.15,0.36 Q 10.61,63 10,63 H 8.25 v 0.94 h 1.63 q 0.61,0 0.61,0.5 A 0.44,0.44 0 0 1 10.34,64.8 0.7,0.7 0 0 1 9.89,64.93 H 8.25 v 1 H 10 q 0.61,0 0.61,0.5 A 0.44,0.44 0 0 1 10.46,66.79 0.71,0.71 0 0 1 10,66.92 H 7.59 A 0.6,0.6 0 0 1 7.15,66.79 Z" | |||
transform="translate(0,18.75)" | |||
style="fill:#fff7d4" | |||
id="path51" /><path | |||
inkscape:connector-curvature="0" | |||
d="M 16,66.4 A 0.56,0.56 0 0 1 15.81,66.82 0.59,0.59 0 0 1 15.39,67 0.55,0.55 0 0 1 14.96,66.79 l -1.2,-1.44 -1.23,1.44 a 0.54,0.54 0 0 1 -0.42,0.21 0.58,0.58 0 0 1 -0.42,-0.18 0.56,0.56 0 0 1 0,-0.8 l 1.34,-1.55 -1.31,-1.52 a 0.58,0.58 0 0 1 -0.15,-0.38 0.56,0.56 0 0 1 0.19,-0.42 0.59,0.59 0 0 1 0.44,-0.15 0.55,0.55 0 0 1 0.43,0.21 l 1.18,1.4 1.19,-1.43 a 0.51,0.51 0 0 1 0.4,-0.18 0.59,0.59 0 0 1 0.42,0.18 0.56,0.56 0 0 1 0.19,0.42 0.58,0.58 0 0 1 -0.15,0.38 L 14.55,64.5 15.89,66 A 0.57,0.57 0 0 1 16,66.4 Z" | |||
transform="translate(0,18.75)" | |||
style="fill:#fff7d4" | |||
id="path53" /><path | |||
inkscape:connector-curvature="0" | |||
d="m 18.64,66.81 a 0.61,0.61 0 0 1 -0.18,-0.46 v -3.3 h -1 A 0.69,0.69 0 0 1 17,62.92 0.49,0.49 0 0 1 16.85,62.52 0.48,0.48 0 0 1 17,62.13 0.7,0.7 0 0 1 17.46,62 h 3.28 a 0.7,0.7 0 0 1 0.46,0.13 0.48,0.48 0 0 1 0.15,0.39 0.49,0.49 0 0 1 -0.15,0.4 0.69,0.69 0 0 1 -0.46,0.13 h -1 v 3.3 a 0.61,0.61 0 0 1 -0.18,0.46 0.74,0.74 0 0 1 -0.95,0 z" | |||
transform="translate(0,18.75)" | |||
style="fill:#fff7d4" | |||
id="path55" /></g><g | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
inkscape:label="Layer 1" | |||
style="display:none" | |||
sodipodi:insensitive="true"><rect | |||
style="opacity:1;vector-effect:none;fill:#cccec9;fill-opacity:1;stroke:none;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
id="rect874" | |||
width="0.98805201" | |||
height="18.608313" | |||
x="104.50597" | |||
y="61.129848" /></g><g | |||
transform="translate(226.66624,-137.88551)" | |||
id="g160" | |||
style="fill:#fff7d4;fill-opacity:1"><path | |||
inkscape:connector-curvature="0" | |||
d="m -265.56,167.93 a 0.63,0.63 0 0 1 0.17,0.46 v 3.81 a 0.57,0.57 0 0 1 -0.15,0.42 0.55,0.55 0 0 1 -0.41,0.15 0.55,0.55 0 0 1 -0.4,-0.15 0.56,0.56 0 0 1 -0.16,-0.42 v -2.06 l -0.8,1.47 a 0.91,0.91 0 0 1 -0.25,0.32 0.53,0.53 0 0 1 -0.32,0.09 0.53,0.53 0 0 1 -0.31,-0.09 0.91,0.91 0 0 1 -0.25,-0.32 l -0.79,-1.43 v 2 a 0.56,0.56 0 0 1 -0.16,0.42 0.55,0.55 0 0 1 -0.41,0.16 0.55,0.55 0 0 1 -0.4,-0.15 0.56,0.56 0 0 1 -0.16,-0.42 v -3.81 a 0.62,0.62 0 0 1 0.17,-0.46 0.59,0.59 0 0 1 0.44,-0.18 0.58,0.58 0 0 1 0.34,0.11 0.85,0.85 0 0 1 0.26,0.31 l 1.29,2.42 1.28,-2.42 a 0.66,0.66 0 0 1 0.59,-0.42 0.58,0.58 0 0 1 0.43,0.19 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path142" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -263,172.66 a 2.38,2.38 0 0 1 -0.79,-0.34 0.6,0.6 0 0 1 -0.17,-0.19 0.53,0.53 0 0 1 -0.05,-0.25 0.56,0.56 0 0 1 0.13,-0.36 0.37,0.37 0 0 1 0.29,-0.15 h 0.18 l 0.21,0.1 a 2.28,2.28 0 0 0 0.57,0.23 2.67,2.67 0 0 0 0.64,0.07 1.28,1.28 0 0 0 0.63,-0.12 0.39,0.39 0 0 0 0.21,-0.36 0.33,0.33 0 0 0 -0.2,-0.28 2.82,2.82 0 0 0 -0.76,-0.23 4.38,4.38 0 0 1 -1.08,-0.35 1.28,1.28 0 0 1 -0.55,-0.48 1.33,1.33 0 0 1 -0.16,-0.67 1.35,1.35 0 0 1 0.27,-0.81 1.77,1.77 0 0 1 0.73,-0.57 2.55,2.55 0 0 1 1,-0.21 3.39,3.39 0 0 1 0.91,0.11 2.28,2.28 0 0 1 0.73,0.35 0.57,0.57 0 0 1 0.18,0.19 0.53,0.53 0 0 1 0.05,0.25 0.57,0.57 0 0 1 -0.12,0.36 0.36,0.36 0 0 1 -0.29,0.15 h -0.17 l -0.22,-0.11 -0.2,-0.11 a 1.61,1.61 0 0 0 -0.38,-0.14 2.06,2.06 0 0 0 -0.48,-0.05 1.07,1.07 0 0 0 -0.57,0.14 0.41,0.41 0 0 0 -0.22,0.36 0.31,0.31 0 0 0 0.08,0.22 0.78,0.78 0 0 0 0.29,0.16 4.21,4.21 0 0 0 0.62,0.16 4.17,4.17 0 0 1 1.06,0.35 1.35,1.35 0 0 1 0.55,0.48 1.24,1.24 0 0 1 0.16,0.64 1.34,1.34 0 0 1 -0.26,0.82 1.66,1.66 0 0 1 -0.72,0.55 2.81,2.81 0 0 1 -1.08,0.19 4.19,4.19 0 0 1 -1.02,-0.1 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path144" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -254.7,172.47 a 2.12,2.12 0 0 1 -0.86,-0.88 2.83,2.83 0 0 1 -0.3,-1.34 2.83,2.83 0 0 1 0.3,-1.34 2.1,2.1 0 0 1 0.86,-0.88 2.67,2.67 0 0 1 1.31,-0.31 2.67,2.67 0 0 1 1.31,0.31 2.08,2.08 0 0 1 0.85,0.88 2.86,2.86 0 0 1 0.3,1.34 2.83,2.83 0 0 1 -0.3,1.34 2.12,2.12 0 0 1 -0.86,0.88 2.63,2.63 0 0 1 -1.31,0.31 2.65,2.65 0 0 1 -1.3,-0.31 z m 2.19,-1.07 a 1.82,1.82 0 0 0 0.31,-1.15 1.79,1.79 0 0 0 -0.32,-1.15 1.06,1.06 0 0 0 -0.87,-0.39 1.06,1.06 0 0 0 -0.87,0.39 1.8,1.8 0 0 0 -0.31,1.15 1.81,1.81 0 0 0 0.31,1.16 1.06,1.06 0 0 0 0.88,0.39 1.06,1.06 0 0 0 0.86,-0.4 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path146" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -248.94,172.24 a 2.14,2.14 0 0 1 -0.56,-1.6 v -2.26 a 0.62,0.62 0 0 1 0.17,-0.46 0.62,0.62 0 0 1 0.46,-0.17 0.62,0.62 0 0 1 0.46,0.17 0.62,0.62 0 0 1 0.17,0.46 v 2.31 a 1.25,1.25 0 0 0 0.24,0.82 0.84,0.84 0 0 0 0.69,0.29 0.84,0.84 0 0 0 0.69,-0.29 1.25,1.25 0 0 0 0.24,-0.82 v -2.31 a 0.62,0.62 0 0 1 0.17,-0.46 0.62,0.62 0 0 1 0.46,-0.17 0.63,0.63 0 0 1 0.46,0.17 0.61,0.61 0 0 1 0.17,0.46 v 2.26 a 2.13,2.13 0 0 1 -0.56,1.59 2.24,2.24 0 0 1 -1.63,0.55 2.23,2.23 0 0 1 -1.63,-0.54 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path148" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -242.26,172.58 a 0.61,0.61 0 0 1 -0.18,-0.46 v -3.3 h -1 a 0.69,0.69 0 0 1 -0.46,-0.13 0.49,0.49 0 0 1 -0.15,-0.4 0.48,0.48 0 0 1 0.15,-0.39 0.7,0.7 0 0 1 0.46,-0.13 h 3.28 a 0.7,0.7 0 0 1 0.46,0.13 0.48,0.48 0 0 1 0.15,0.39 0.49,0.49 0 0 1 -0.15,0.4 0.69,0.69 0 0 1 -0.46,0.13 h -1 v 3.3 a 0.61,0.61 0 0 1 -0.18,0.46 0.65,0.65 0 0 1 -0.47,0.17 0.65,0.65 0 0 1 -0.45,-0.17 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path150" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -238.25,172.59 a 0.63,0.63 0 0 1 -0.17,-0.47 v -3.74 a 0.6,0.6 0 0 1 0.15,-0.44 0.59,0.59 0 0 1 0.44,-0.15 h 1.83 a 1.82,1.82 0 0 1 1.27,0.42 1.49,1.49 0 0 1 0.46,1.16 1.49,1.49 0 0 1 -0.46,1.15 1.81,1.81 0 0 1 -1.27,0.42 h -1.1 v 1.19 a 0.62,0.62 0 0 1 -0.17,0.47 0.65,0.65 0 0 1 -0.48,0.17 0.63,0.63 0 0 1 -0.5,-0.18 z m 2,-2.62 a 0.8,0.8 0 0 0 0.53,-0.15 0.57,0.57 0 0 0 0.17,-0.46 q 0,-0.61 -0.7,-0.61 h -0.92 V 170 Z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path152" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -232.46,172.24 a 2.14,2.14 0 0 1 -0.56,-1.6 v -2.26 a 0.62,0.62 0 0 1 0.17,-0.46 0.62,0.62 0 0 1 0.46,-0.17 0.62,0.62 0 0 1 0.46,0.17 0.62,0.62 0 0 1 0.17,0.46 v 2.31 a 1.25,1.25 0 0 0 0.24,0.82 0.84,0.84 0 0 0 0.69,0.29 0.84,0.84 0 0 0 0.69,-0.29 1.25,1.25 0 0 0 0.24,-0.82 v -2.31 a 0.62,0.62 0 0 1 0.17,-0.46 0.62,0.62 0 0 1 0.46,-0.17 0.63,0.63 0 0 1 0.46,0.17 0.61,0.61 0 0 1 0.17,0.46 v 2.26 a 2.13,2.13 0 0 1 -0.56,1.59 2.24,2.24 0 0 1 -1.63,0.55 2.23,2.23 0 0 1 -1.63,-0.54 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path154" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -225.78,172.58 a 0.61,0.61 0 0 1 -0.18,-0.46 v -3.3 h -1 a 0.69,0.69 0 0 1 -0.46,-0.13 0.49,0.49 0 0 1 -0.15,-0.4 0.48,0.48 0 0 1 0.15,-0.39 0.7,0.7 0 0 1 0.46,-0.13 h 3.28 a 0.7,0.7 0 0 1 0.46,0.13 0.48,0.48 0 0 1 0.15,0.39 0.49,0.49 0 0 1 -0.15,0.4 0.69,0.69 0 0 1 -0.46,0.13 h -1 v 3.3 a 0.61,0.61 0 0 1 -0.18,0.46 0.65,0.65 0 0 1 -0.47,0.17 0.65,0.65 0 0 1 -0.45,-0.17 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path156" /><path | |||
inkscape:connector-curvature="0" | |||
d="m -221.26,172.66 a 2.38,2.38 0 0 1 -0.79,-0.34 0.6,0.6 0 0 1 -0.17,-0.19 0.53,0.53 0 0 1 -0.05,-0.25 0.56,0.56 0 0 1 0.13,-0.36 0.37,0.37 0 0 1 0.29,-0.15 h 0.18 l 0.21,0.1 a 2.28,2.28 0 0 0 0.57,0.23 2.67,2.67 0 0 0 0.64,0.07 1.28,1.28 0 0 0 0.63,-0.12 0.39,0.39 0 0 0 0.21,-0.36 0.33,0.33 0 0 0 -0.2,-0.28 2.82,2.82 0 0 0 -0.76,-0.23 4.38,4.38 0 0 1 -1.08,-0.35 1.28,1.28 0 0 1 -0.55,-0.43 1.33,1.33 0 0 1 -0.16,-0.67 1.35,1.35 0 0 1 0.27,-0.81 1.77,1.77 0 0 1 0.73,-0.57 2.55,2.55 0 0 1 1,-0.21 3.39,3.39 0 0 1 0.91,0.11 2.28,2.28 0 0 1 0.73,0.35 0.57,0.57 0 0 1 0.18,0.19 0.53,0.53 0 0 1 0.05,0.25 0.57,0.57 0 0 1 -0.12,0.36 0.36,0.36 0 0 1 -0.29,0.15 h -0.17 l -0.22,-0.11 -0.2,-0.11 a 1.61,1.61 0 0 0 -0.38,-0.14 2.06,2.06 0 0 0 -0.48,-0.05 1.07,1.07 0 0 0 -0.57,0.14 0.41,0.41 0 0 0 -0.22,0.36 0.31,0.31 0 0 0 0.08,0.22 0.78,0.78 0 0 0 0.29,0.16 4.21,4.21 0 0 0 0.62,0.16 4.17,4.17 0 0 1 1.06,0.35 1.35,1.35 0 0 1 0.55,0.48 1.24,1.24 0 0 1 0.16,0.64 1.34,1.34 0 0 1 -0.26,0.82 1.66,1.66 0 0 1 -0.72,0.55 2.81,2.81 0 0 1 -1.08,0.19 4.19,4.19 0 0 1 -1.02,-0.15 z" | |||
transform="translate(270.37)" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="path158" /></g><g | |||
id="g2120"><g | |||
id="g2871"><g | |||
id="g2790"><path | |||
id="path162" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
d="m 234.49277,44.629962 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.57 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.15 z" | |||
inkscape:connector-curvature="0" /><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g180" | |||
transform="translate(186.29265,-131.91619)"><path | |||
id="path174" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,216.4 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path176" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.53,217.77 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path178" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,216.39 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.15,1.15 0 0 0 -0.37,0.06 3.38,3.38 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.36,0.36 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.46,0.46 0 0 1 0.17,-0.18 2.73,2.73 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.36,1.36 0 0 1 0.61,0.49 1.28,1.28 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.29,3.29 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.72,0.72 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g200" | |||
transform="translate(188.29342,-113.67209)"><path | |||
id="path192" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -233.29,238.21 a 1.26,1.26 0 0 1 -0.47,-0.45 1.19,1.19 0 0 1 -0.17,-0.63 1.2,1.2 0 0 1 0.16,-0.61 1.27,1.27 0 0 1 0.46,-0.46 1.23,1.23 0 0 1 0.65,-0.18 1.25,1.25 0 0 1 0.63,0.17 1.27,1.27 0 0 1 0.47,0.45 1.18,1.18 0 0 1 0.18,0.63 1.18,1.18 0 0 1 -0.17,0.62 1.29,1.29 0 0 1 -0.46,0.45 1.24,1.24 0 0 1 -0.63,0.17 1.27,1.27 0 0 1 -0.65,-0.16 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path194" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,238.09 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 H -229 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.09 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.3 h 0.57 a 0.7,0.7 0 0 1 0.5,0.09 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path196" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,239.46 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path198" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -217.87,237.66 q 0,0.5 -0.61,0.5 h -0.15 v 0.24 a 0.62,0.62 0 0 1 -0.18,0.48 0.64,0.64 0 0 1 -0.46,0.16 0.63,0.63 0 0 1 -0.45,-0.16 0.62,0.62 0 0 1 -0.17,-0.48 v -0.24 h -1.56 a 0.53,0.53 0 0 1 -0.4,-0.15 0.54,0.54 0 0 1 -0.15,-0.38 0.78,0.78 0 0 1 0.15,-0.46 l 2,-2.86 a 0.65,0.65 0 0 1 0.25,-0.21 0.69,0.69 0 0 1 0.31,-0.07 0.66,0.66 0 0 1 0.46,0.17 0.6,0.6 0 0 1 0.19,0.47 v 2.53 h 0.15 q 0.62,-0.02 0.62,0.46 z m -2.86,-0.48 h 0.84 V 236 Z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g218" | |||
transform="translate(188.23337,-95.437984)"><path | |||
id="path210" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -230.79,260.26 a 0.4,0.4 0 0 1 -0.19,0.36 0.91,0.91 0 0 1 -0.54,0.1 h -0.2 a 1.44,1.44 0 0 1 -1,-0.38 1.27,1.27 0 0 1 -0.33,-0.93 v -1.24 h -0.2 q -0.56,0 -0.56,-0.46 0,-0.46 0.56,-0.46 h 0.2 v -0.46 a 0.55,0.55 0 0 1 0.17,-0.42 0.64,0.64 0 0 1 0.46,-0.16 0.64,0.64 0 0 1 0.46,0.16 0.55,0.55 0 0 1 0.17,0.42 v 0.46 h 0.38 q 0.56,0 0.56,0.46 0,0.46 -0.56,0.46 h -0.38 v 1.34 a 0.33,0.33 0 0 0 0.08,0.22 0.29,0.29 0 0 0 0.21,0.1 h 0.2 c 0.36,0.03 0.51,0.17 0.51,0.43 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path212" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,259.79 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 H -229 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path214" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,261.16 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path216" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -217.87,259.35 q 0,0.5 -0.61,0.5 h -0.15 v 0.24 a 0.62,0.62 0 0 1 -0.18,0.48 0.64,0.64 0 0 1 -0.46,0.16 0.63,0.63 0 0 1 -0.45,-0.16 0.62,0.62 0 0 1 -0.17,-0.48 v -0.24 h -1.56 a 0.53,0.53 0 0 1 -0.4,-0.15 0.54,0.54 0 0 1 -0.15,-0.38 0.78,0.78 0 0 1 0.15,-0.46 l 2,-2.86 a 0.65,0.65 0 0 1 0.25,-0.21 0.69,0.69 0 0 1 0.31,-0.07 0.66,0.66 0 0 1 0.46,0.17 0.6,0.6 0 0 1 0.19,0.47 v 2.53 h 0.15 q 0.62,-0.02 0.62,0.46 z m -2.86,-0.48 h 0.84 v -1.21 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g236" | |||
transform="translate(186.26821,-77.203824)"><path | |||
id="path230" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,281.48 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path232" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,282.86 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path234" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.26,280.27 a 1.22,1.22 0 0 1 0.23,0.75 1.21,1.21 0 0 1 -0.52,1 2.4,2.4 0 0 1 -1.42,0.38 2.4,2.4 0 0 1 -1.42,-0.37 1.21,1.21 0 0 1 -0.52,-1 1.23,1.23 0 0 1 0.23,-0.77 1.17,1.17 0 0 1 0.66,-0.42 1.15,1.15 0 0 1 -0.56,-0.43 1.19,1.19 0 0 1 -0.2,-0.68 1.16,1.16 0 0 1 0.49,-1 2.19,2.19 0 0 1 1.32,-0.36 2.18,2.18 0 0 1 1.33,0.36 1.16,1.16 0 0 1 0.49,1 1.21,1.21 0 0 1 -0.2,0.7 1.05,1.05 0 0 1 -0.55,0.41 1.21,1.21 0 0 1 0.64,0.43 z m -1,0.65 q 0,-0.55 -0.76,-0.55 -0.76,0 -0.76,0.55 0,0.55 0.76,0.55 0.76,0 0.8,-0.55 z m -1.23,-2.44 a 0.48,0.48 0 0 0 -0.15,0.4 0.49,0.49 0 0 0 0.15,0.4 0.73,0.73 0 0 0 0.47,0.13 0.73,0.73 0 0 0 0.47,-0.13 0.49,0.49 0 0 0 0.15,-0.4 0.48,0.48 0 0 0 -0.15,-0.4 0.75,0.75 0 0 0 -0.47,-0.12 0.75,0.75 0 0 0 -0.43,0.12 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g258" | |||
transform="translate(190.8481,-58.959707)"><path | |||
id="path248" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -238.19,303.29 a 1.25,1.25 0 0 1 -0.47,-0.45 1.19,1.19 0 0 1 -0.17,-0.63 1.2,1.2 0 0 1 0.16,-0.61 1.26,1.26 0 0 1 0.46,-0.46 1.23,1.23 0 0 1 0.65,-0.18 1.25,1.25 0 0 1 0.63,0.16 1.28,1.28 0 0 1 0.47,0.45 1.18,1.18 0 0 1 0.18,0.63 1.17,1.17 0 0 1 -0.17,0.62 1.27,1.27 0 0 1 -0.46,0.45 1.23,1.23 0 0 1 -0.63,0.17 1.27,1.27 0 0 1 -0.65,-0.15 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path250" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,303.18 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.61,0.61 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path252" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.42,304.55 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.53,0.53 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path254" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -222.93,303.18 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.61,0.61 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path256" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.8,301 a 1.45,1.45 0 0 1 0.53,0.57 1.77,1.77 0 0 1 0.19,0.83 1.75,1.75 0 0 1 -0.22,0.88 1.56,1.56 0 0 1 -0.61,0.61 1.81,1.81 0 0 1 -0.89,0.22 1.88,1.88 0 0 1 -1.53,-0.64 2.78,2.78 0 0 1 -0.54,-1.83 3.39,3.39 0 0 1 0.26,-1.37 2,2 0 0 1 0.72,-0.9 1.89,1.89 0 0 1 1.09,-0.31 2.72,2.72 0 0 1 0.8,0.13 2.23,2.23 0 0 1 0.7,0.35 0.61,0.61 0 0 1 0.17,0.19 0.52,0.52 0 0 1 0.05,0.25 0.56,0.56 0 0 1 -0.12,0.37 0.37,0.37 0 0 1 -0.3,0.15 0.47,0.47 0 0 1 -0.17,0 l -0.21,-0.1 -0.15,-0.08 -0.38,-0.17 a 0.94,0.94 0 0 0 -0.32,-0.05 0.67,0.67 0 0 0 -0.58,0.32 1.86,1.86 0 0 0 -0.26,0.91 1.12,1.12 0 0 1 0.43,-0.35 1.35,1.35 0 0 1 0.59,-0.13 1.41,1.41 0 0 1 0.75,0.15 z m -0.64,1.94 a 0.7,0.7 0 0 0 0.16,-0.48 0.71,0.71 0 0 0 -0.16,-0.49 0.55,0.55 0 0 0 -0.44,-0.18 0.56,0.56 0 0 0 -0.44,0.18 0.69,0.69 0 0 0 -0.16,0.48 0.69,0.69 0 0 0 0.17,0.48 0.56,0.56 0 0 0 0.43,0.19 0.55,0.55 0 0 0 0.43,-0.12 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g280" | |||
transform="translate(190.78804,-40.725606)"><path | |||
id="path270" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -235.69,325.34 a 0.4,0.4 0 0 1 -0.19,0.36 0.91,0.91 0 0 1 -0.54,0.1 h -0.2 a 1.44,1.44 0 0 1 -1,-0.38 1.27,1.27 0 0 1 -0.33,-0.93 v -1.24 h -0.2 q -0.56,0 -0.56,-0.46 0,-0.46 0.56,-0.46 h 0.2 v -0.46 a 0.55,0.55 0 0 1 0.17,-0.42 0.64,0.64 0 0 1 0.46,-0.16 0.64,0.64 0 0 1 0.46,0.16 0.55,0.55 0 0 1 0.17,0.42 v 0.46 h 0.38 q 0.56,0 0.56,0.46 0,0.46 -0.56,0.46 h -0.38 v 1.34 a 0.33,0.33 0 0 0 0.08,0.22 0.29,0.29 0 0 0 0.21,0.1 h 0.2 c 0.36,0.03 0.51,0.17 0.51,0.43 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path272" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,324.88 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path274" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.42,326.25 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path276" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -222.93,324.88 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path278" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.8,322.73 a 1.45,1.45 0 0 1 0.53,0.57 1.77,1.77 0 0 1 0.19,0.83 1.75,1.75 0 0 1 -0.22,0.88 1.56,1.56 0 0 1 -0.61,0.61 1.81,1.81 0 0 1 -0.89,0.22 1.88,1.88 0 0 1 -1.53,-0.64 2.78,2.78 0 0 1 -0.54,-1.83 3.4,3.4 0 0 1 0.26,-1.37 2,2 0 0 1 0.72,-0.9 1.89,1.89 0 0 1 1.09,-0.31 2.72,2.72 0 0 1 0.8,0.13 2.23,2.23 0 0 1 0.7,0.35 0.61,0.61 0 0 1 0.17,0.19 0.52,0.52 0 0 1 0.05,0.25 0.56,0.56 0 0 1 -0.12,0.37 0.37,0.37 0 0 1 -0.3,0.15 0.47,0.47 0 0 1 -0.17,0 l -0.21,-0.1 -0.12,-0.13 -0.38,-0.17 a 0.94,0.94 0 0 0 -0.32,-0.06 0.67,0.67 0 0 0 -0.58,0.33 1.85,1.85 0 0 0 -0.26,0.91 1.12,1.12 0 0 1 0.43,-0.35 1.35,1.35 0 0 1 0.59,-0.13 1.41,1.41 0 0 1 0.72,0.2 z m -0.64,1.94 a 0.7,0.7 0 0 0 0.16,-0.48 0.71,0.71 0 0 0 -0.16,-0.49 0.56,0.56 0 0 0 -0.44,-0.18 0.56,0.56 0 0 0 -0.44,0.18 0.69,0.69 0 0 0 -0.16,0.48 0.69,0.69 0 0 0 0.17,0.48 0.56,0.56 0 0 0 0.43,0.19 0.55,0.55 0 0 0 0.43,-0.18 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g302" | |||
transform="translate(188.73765,-22.48147)"><path | |||
id="path294" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,346.57 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 h -2.43 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path296" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.43,347.94 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path298" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -223.35,345.36 a 1.24,1.24 0 0 1 0.23,0.76 1.22,1.22 0 0 1 -0.23,0.74 1.47,1.47 0 0 1 -0.65,0.49 2.63,2.63 0 0 1 -1,0.17 3.09,3.09 0 0 1 -0.87,-0.12 2.23,2.23 0 0 1 -0.73,-0.35 0.55,0.55 0 0 1 -0.17,-0.19 0.55,0.55 0 0 1 0,-0.24 0.58,0.58 0 0 1 0.12,-0.37 0.36,0.36 0 0 1 0.29,-0.15 0.45,0.45 0 0 1 0.18,0 l 0.21,0.1 h 0.07 0.09 a 3.14,3.14 0 0 0 0.4,0.17 1.29,1.29 0 0 0 0.4,0.06 1,1 0 0 0 0.56,-0.13 0.49,0.49 0 0 0 0.17,-0.42 0.44,0.44 0 0 0 -0.17,-0.39 1.06,1.06 0 0 0 -0.57,-0.12 h -0.43 a 0.4,0.4 0 0 1 -0.33,-0.15 0.54,0.54 0 0 1 -0.22,-0.22 0.54,0.54 0 0 1 0.12,-0.35 0.4,0.4 0 0 1 0.33,-0.15 h 0.31 a 1.08,1.08 0 0 0 0.56,-0.11 0.39,0.39 0 0 0 0.17,-0.36 0.52,0.52 0 0 0 -0.15,-0.4 0.6,0.6 0 0 0 -0.43,-0.14 1.06,1.06 0 0 0 -0.37,0.06 l -0.38,0.17 -0.15,0.07 -0.21,0.1 a 0.45,0.45 0 0 1 -0.17,0 0.36,0.36 0 0 1 -0.29,-0.15 0.57,0.57 0 0 1 -0.12,-0.37 0.55,0.55 0 0 1 0,-0.25 0.56,0.56 0 0 1 0.17,-0.19 2.32,2.32 0 0 1 0.71,-0.35 2.8,2.8 0 0 1 0.83,-0.13 2.33,2.33 0 0 1 0.91,0.17 1.38,1.38 0 0 1 0.61,0.48 1.22,1.22 0 0 1 0.21,0.71 1.16,1.16 0 0 1 -0.2,0.68 1.13,1.13 0 0 1 -0.56,0.42 1.2,1.2 0 0 1 0.75,0.45 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path300" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,346.57 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.15,1.15 0 0 0 -0.37,0.06 3.38,3.38 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.36,0.36 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.46,0.46 0 0 1 0.17,-0.18 2.73,2.73 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.36,1.36 0 0 1 0.61,0.49 1.28,1.28 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.29,3.29 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.72,0.72 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g></g><g | |||
id="g2752"><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g172" | |||
transform="translate(226.70212,-161.00033)"><path | |||
id="path164" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -233.29,205.67 a 1.24,1.24 0 0 1 -0.47,-0.45 1.19,1.19 0 0 1 -0.17,-0.63 1.2,1.2 0 0 1 0.16,-0.61 1.27,1.27 0 0 1 0.46,-0.46 1.23,1.23 0 0 1 0.65,-0.17 1.25,1.25 0 0 1 0.63,0.16 1.28,1.28 0 0 1 0.47,0.45 1.18,1.18 0 0 1 0.18,0.63 1.17,1.17 0 0 1 -0.17,0.62 1.27,1.27 0 0 1 -0.46,0.45 1.24,1.24 0 0 1 -0.63,0.17 1.27,1.27 0 0 1 -0.65,-0.16 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path166" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,205.55 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.52 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.1 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path168" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.53,206.92 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path170" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,205.55 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.15,1.15 0 0 0 -0.37,0.06 3.38,3.38 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.36,0.36 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.46,0.46 0 0 1 0.17,-0.18 2.73,2.73 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.36,1.36 0 0 1 0.61,0.49 1.28,1.28 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.29,3.29 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.72,0.72 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g190" | |||
transform="translate(226.64206,-142.76619)"><path | |||
id="path182" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -230.79,227.71 a 0.4,0.4 0 0 1 -0.19,0.36 0.91,0.91 0 0 1 -0.54,0.1 h -0.2 a 1.45,1.45 0 0 1 -1,-0.38 1.27,1.27 0 0 1 -0.33,-0.93 v -1.24 h -0.2 q -0.56,0 -0.56,-0.46 0,-0.46 0.56,-0.46 h 0.2 v -0.46 a 0.55,0.55 0 0 1 0.17,-0.42 0.64,0.64 0 0 1 0.46,-0.16 0.64,0.64 0 0 1 0.46,0.16 0.55,0.55 0 0 1 0.17,0.42 v 0.46 h 0.38 q 0.56,0 0.56,0.46 0,0.46 -0.56,0.46 h -0.38 V 227 a 0.32,0.32 0 0 0 0.08,0.22 0.29,0.29 0 0 0 0.21,0.1 h 0.2 q 0.51,0 0.51,0.39 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path184" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,227.25 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path186" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.53,228.62 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path188" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,227.24 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.15,1.15 0 0 0 -0.37,0.06 3.38,3.38 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.36,0.36 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.46,0.46 0 0 1 0.17,-0.18 2.73,2.73 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.36,1.36 0 0 1 0.61,0.49 1.28,1.28 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.29,3.29 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.72,0.72 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g208" | |||
transform="translate(224.49293,-124.52209)"><path | |||
id="path202" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,248.94 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 H -229 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path204" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,250.31 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path206" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -217.87,248.51 q 0,0.5 -0.61,0.5 h -0.15 v 0.24 a 0.62,0.62 0 0 1 -0.18,0.48 0.64,0.64 0 0 1 -0.46,0.16 0.63,0.63 0 0 1 -0.45,-0.16 0.62,0.62 0 0 1 -0.17,-0.48 V 249 h -1.56 a 0.53,0.53 0 0 1 -0.4,-0.15 0.54,0.54 0 0 1 -0.15,-0.38 0.78,0.78 0 0 1 0.15,-0.46 l 2,-2.86 a 0.65,0.65 0 0 1 0.25,-0.21 0.69,0.69 0 0 1 0.31,-0.07 0.66,0.66 0 0 1 0.46,0.17 0.6,0.6 0 0 1 0.19,0.47 V 248 h 0.15 q 0.62,0 0.62,0.51 z m -2.86,-0.48 h 0.84 v -1.21 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g228" | |||
transform="translate(226.67768,-106.27796)"><path | |||
id="path220" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -233.29,270.75 a 1.24,1.24 0 0 1 -0.47,-0.45 1.19,1.19 0 0 1 -0.17,-0.63 1.2,1.2 0 0 1 0.16,-0.61 1.27,1.27 0 0 1 0.46,-0.46 1.23,1.23 0 0 1 0.65,-0.17 1.25,1.25 0 0 1 0.63,0.16 1.28,1.28 0 0 1 0.47,0.45 1.18,1.18 0 0 1 0.18,0.63 1.17,1.17 0 0 1 -0.17,0.62 1.27,1.27 0 0 1 -0.46,0.45 1.24,1.24 0 0 1 -0.63,0.17 1.27,1.27 0 0 1 -0.65,-0.16 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path222" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,270.64 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 V 268 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.09 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path224" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,272 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path226" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.26,269.42 a 1.22,1.22 0 0 1 0.23,0.75 1.21,1.21 0 0 1 -0.52,1 2.4,2.4 0 0 1 -1.42,0.38 2.4,2.4 0 0 1 -1.42,-0.37 1.21,1.21 0 0 1 -0.52,-1 1.23,1.23 0 0 1 0.23,-0.77 1.17,1.17 0 0 1 0.68,-0.41 1.15,1.15 0 0 1 -0.56,-0.43 1.19,1.19 0 0 1 -0.2,-0.68 1.16,1.16 0 0 1 0.49,-1 2.19,2.19 0 0 1 1.32,-0.36 2.18,2.18 0 0 1 1.33,0.36 1.16,1.16 0 0 1 0.49,1 1.21,1.21 0 0 1 -0.2,0.7 1.05,1.05 0 0 1 -0.55,0.41 1.21,1.21 0 0 1 0.62,0.42 z m -1,0.65 q 0,-0.55 -0.76,-0.55 -0.76,0 -0.76,0.55 0,0.55 0.76,0.55 0.76,0 0.8,-0.55 z m -1.23,-2.44 a 0.48,0.48 0 0 0 -0.15,0.4 0.49,0.49 0 0 0 0.15,0.4 0.73,0.73 0 0 0 0.47,0.13 0.73,0.73 0 0 0 0.47,-0.13 0.49,0.49 0 0 0 0.15,-0.4 0.48,0.48 0 0 0 -0.15,-0.4 0.75,0.75 0 0 0 -0.47,-0.12 0.75,0.75 0 0 0 -0.43,0.12 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g246" | |||
transform="translate(226.61762,-88.043824)"><path | |||
id="path238" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -230.79,292.8 a 0.4,0.4 0 0 1 -0.19,0.36 0.91,0.91 0 0 1 -0.54,0.1 h -0.2 a 1.45,1.45 0 0 1 -1,-0.38 1.27,1.27 0 0 1 -0.33,-0.93 v -1.25 h -0.2 q -0.56,0 -0.56,-0.46 0,-0.46 0.56,-0.46 h 0.2 v -0.46 a 0.55,0.55 0 0 1 0.17,-0.42 0.64,0.64 0 0 1 0.46,-0.16 0.64,0.64 0 0 1 0.46,0.16 0.55,0.55 0 0 1 0.17,0.42 v 0.46 h 0.38 q 0.56,0 0.56,0.46 0,0.46 -0.56,0.46 h -0.38 v 1.3 a 0.32,0.32 0 0 0 0.08,0.22 0.29,0.29 0 0 0 0.21,0.1 h 0.2 q 0.51,0.09 0.51,0.48 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path240" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -226.08,292.33 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 H -229 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.5,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path242" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -224.52,293.7 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path244" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.26,291.12 a 1.22,1.22 0 0 1 0.23,0.75 1.21,1.21 0 0 1 -0.52,1 2.4,2.4 0 0 1 -1.42,0.38 2.4,2.4 0 0 1 -1.42,-0.37 1.21,1.21 0 0 1 -0.52,-1 1.23,1.23 0 0 1 0.23,-0.77 1.17,1.17 0 0 1 0.66,-0.42 1.15,1.15 0 0 1 -0.56,-0.43 1.19,1.19 0 0 1 -0.2,-0.68 1.16,1.16 0 0 1 0.49,-1 2.19,2.19 0 0 1 1.32,-0.36 2.18,2.18 0 0 1 1.33,0.36 1.16,1.16 0 0 1 0.49,1 1.21,1.21 0 0 1 -0.2,0.7 1.05,1.05 0 0 1 -0.55,0.41 1.21,1.21 0 0 1 0.64,0.43 z m -1,0.65 q 0,-0.55 -0.76,-0.55 -0.76,0 -0.76,0.55 0,0.55 0.76,0.55 0.76,0 0.8,-0.56 z m -1.23,-2.44 a 0.48,0.48 0 0 0 -0.15,0.4 0.49,0.49 0 0 0 0.15,0.4 0.73,0.73 0 0 0 0.47,0.13 0.73,0.73 0 0 0 0.47,-0.13 0.49,0.49 0 0 0 0.15,-0.4 0.48,0.48 0 0 0 -0.15,-0.4 0.75,0.75 0 0 0 -0.47,-0.12 0.75,0.75 0 0 0 -0.43,0.12 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g268" | |||
transform="translate(227.0426,-69.809727)"><path | |||
id="path260" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,314 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 A 0.7,0.7 0 0 1 -231,314 Z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path262" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.42,315.4 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path264" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -222.93,314 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path266" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.8,311.88 a 1.45,1.45 0 0 1 0.53,0.57 1.77,1.77 0 0 1 0.19,0.83 1.75,1.75 0 0 1 -0.22,0.88 1.56,1.56 0 0 1 -0.61,0.61 1.81,1.81 0 0 1 -0.89,0.22 1.88,1.88 0 0 1 -1.53,-0.64 2.78,2.78 0 0 1 -0.54,-1.83 3.4,3.4 0 0 1 0.26,-1.37 2,2 0 0 1 0.72,-0.9 1.89,1.89 0 0 1 1.09,-0.31 2.72,2.72 0 0 1 0.8,0.13 2.23,2.23 0 0 1 0.7,0.35 0.61,0.61 0 0 1 0.17,0.19 0.52,0.52 0 0 1 0.05,0.25 0.56,0.56 0 0 1 -0.12,0.37 0.37,0.37 0 0 1 -0.3,0.15 0.47,0.47 0 0 1 -0.17,0 l -0.21,-0.1 -0.15,-0.08 -0.38,-0.17 a 0.94,0.94 0 0 0 -0.32,-0.06 0.67,0.67 0 0 0 -0.58,0.33 1.85,1.85 0 0 0 -0.26,0.91 1.12,1.12 0 0 1 0.43,-0.35 1.35,1.35 0 0 1 0.59,-0.13 1.41,1.41 0 0 1 0.75,0.15 z m -0.64,1.94 a 0.7,0.7 0 0 0 0.16,-0.48 0.71,0.71 0 0 0 -0.16,-0.49 0.56,0.56 0 0 0 -0.44,-0.18 0.56,0.56 0 0 0 -0.44,0.18 0.69,0.69 0 0 0 -0.16,0.48 0.69,0.69 0 0 0 0.17,0.48 0.56,0.56 0 0 0 0.43,0.19 0.55,0.55 0 0 0 0.43,-0.18 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g292" | |||
transform="translate(229.15212,-51.565606)"><path | |||
id="path282" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -238.19,335.84 a 1.26,1.26 0 0 1 -0.47,-0.45 1.19,1.19 0 0 1 -0.17,-0.63 1.2,1.2 0 0 1 0.16,-0.61 1.27,1.27 0 0 1 0.46,-0.46 1.23,1.23 0 0 1 0.65,-0.18 1.25,1.25 0 0 1 0.63,0.17 1.27,1.27 0 0 1 0.47,0.45 1.18,1.18 0 0 1 0.18,0.63 1.18,1.18 0 0 1 -0.17,0.62 1.29,1.29 0 0 1 -0.46,0.45 1.24,1.24 0 0 1 -0.63,0.17 1.27,1.27 0 0 1 -0.65,-0.16 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path284" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,335.72 a 0.47,0.47 0 0 1 0.15,0.38 q 0,0.52 -0.61,0.52 h -2.43 q -0.61,0 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.48,0.48 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.18,1.18 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path286" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.43,337.09 a 0.47,0.47 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.46,0.46 0 0 1 0,-0.16 l 1.59,-5 a 0.47,0.47 0 0 1 0.18,-0.25 0.46,0.46 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.77,0.77 0 0 1 0,0.15 l -1.59,5 a 0.47,0.47 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path288" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -223.35,334.51 a 1.24,1.24 0 0 1 0.23,0.76 1.22,1.22 0 0 1 -0.23,0.74 1.47,1.47 0 0 1 -0.65,0.49 2.61,2.61 0 0 1 -1,0.17 3.13,3.13 0 0 1 -0.87,-0.12 2.27,2.27 0 0 1 -0.73,-0.35 0.55,0.55 0 0 1 -0.17,-0.19 0.55,0.55 0 0 1 0,-0.24 0.57,0.57 0 0 1 0.12,-0.37 0.36,0.36 0 0 1 0.29,-0.15 0.47,0.47 0 0 1 0.18,0 l 0.21,0.1 h 0.07 0.09 a 3.12,3.12 0 0 0 0.4,0.17 1.26,1.26 0 0 0 0.4,0.06 1,1 0 0 0 0.56,-0.13 0.49,0.49 0 0 0 0.17,-0.42 0.44,0.44 0 0 0 -0.17,-0.39 1.06,1.06 0 0 0 -0.57,-0.12 h -0.43 a 0.4,0.4 0 0 1 -0.33,-0.15 0.54,0.54 0 0 1 -0.12,-0.35 0.54,0.54 0 0 1 0.12,-0.35 0.4,0.4 0 0 1 0.33,-0.15 h 0.31 a 1.07,1.07 0 0 0 0.56,-0.11 0.39,0.39 0 0 0 0.17,-0.36 0.52,0.52 0 0 0 -0.15,-0.4 0.6,0.6 0 0 0 -0.43,-0.14 1.06,1.06 0 0 0 -0.37,0.06 l -0.38,0.17 -0.15,0.07 -0.21,0.1 a 0.47,0.47 0 0 1 -0.17,0 0.36,0.36 0 0 1 -0.29,-0.15 0.57,0.57 0 0 1 -0.12,-0.37 0.54,0.54 0 0 1 0,-0.25 0.56,0.56 0 0 1 0.17,-0.19 2.32,2.32 0 0 1 0.71,-0.35 2.8,2.8 0 0 1 0.83,-0.13 2.31,2.31 0 0 1 0.91,0.17 1.37,1.37 0 0 1 0.61,0.48 1.23,1.23 0 0 1 0.21,0.71 1.16,1.16 0 0 1 -0.2,0.68 1.14,1.14 0 0 1 -0.56,0.42 1.19,1.19 0 0 1 0.65,0.58 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path290" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,335.72 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.13,1.13 0 0 0 -0.37,0.06 3.36,3.36 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.35,0.35 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.47,0.47 0 0 1 0.17,-0.18 2.72,2.72 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.38,1.38 0 0 1 0.61,0.49 1.29,1.29 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.27,3.27 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.71,0.71 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g><g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="g314" | |||
transform="translate(229.09206,-33.33147)"><path | |||
id="path304" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -235.69,357.89 a 0.4,0.4 0 0 1 -0.19,0.36 0.91,0.91 0 0 1 -0.54,0.1 h -0.2 a 1.45,1.45 0 0 1 -1,-0.38 1.27,1.27 0 0 1 -0.33,-0.93 v -1.24 h -0.2 q -0.56,0 -0.56,-0.46 0,-0.46 0.56,-0.46 h 0.2 v -0.46 a 0.55,0.55 0 0 1 0.17,-0.42 0.64,0.64 0 0 1 0.46,-0.16 0.64,0.64 0 0 1 0.46,0.16 0.55,0.55 0 0 1 0.17,0.42 v 0.46 h 0.38 q 0.56,0 0.56,0.46 0,0.46 -0.56,0.46 h -0.38 v 1.34 a 0.32,0.32 0 0 0 0.08,0.22 0.29,0.29 0 0 0 0.21,0.1 h 0.2 q 0.5,0.04 0.51,0.43 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path306" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -231,357.42 a 0.47,0.47 0 0 1 0.15,0.38 c 0,0.35 -0.2,0.52 -0.61,0.52 h -2.43 c -0.41,0 -0.61,-0.17 -0.61,-0.52 a 0.47,0.47 0 0 1 0.15,-0.38 0.7,0.7 0 0 1 0.46,-0.13 h 0.57 v -2.53 l -0.56,0.33 a 0.48,0.48 0 0 1 -0.25,0.07 0.42,0.42 0 0 1 -0.34,-0.17 0.59,0.59 0 0 1 -0.14,-0.38 0.47,0.47 0 0 1 0.25,-0.43 l 1.12,-0.65 a 1.19,1.19 0 0 1 0.58,-0.17 0.62,0.62 0 0 1 0.45,0.17 0.61,0.61 0 0 1 0.17,0.46 v 3.32 h 0.57 a 0.7,0.7 0 0 1 0.47,0.11 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path308" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -229.43,358.79 a 0.48,0.48 0 0 1 -0.28,0.08 0.51,0.51 0 0 1 -0.34,-0.13 0.4,0.4 0 0 1 -0.15,-0.32 0.47,0.47 0 0 1 0,-0.16 l 1.59,-5 a 0.48,0.48 0 0 1 0.18,-0.25 0.47,0.47 0 0 1 0.27,-0.08 0.52,0.52 0 0 1 0.35,0.13 0.41,0.41 0 0 1 0.15,0.33 0.78,0.78 0 0 1 0,0.15 l -1.59,5 a 0.48,0.48 0 0 1 -0.18,0.25 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path310" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -223.35,356.21 a 1.24,1.24 0 0 1 0.23,0.76 1.22,1.22 0 0 1 -0.23,0.74 1.47,1.47 0 0 1 -0.65,0.49 2.63,2.63 0 0 1 -1,0.17 3.09,3.09 0 0 1 -0.87,-0.12 2.23,2.23 0 0 1 -0.73,-0.35 0.55,0.55 0 0 1 -0.17,-0.19 0.55,0.55 0 0 1 0,-0.24 0.58,0.58 0 0 1 0.12,-0.37 0.36,0.36 0 0 1 0.29,-0.15 0.45,0.45 0 0 1 0.18,0 l 0.21,0.1 h 0.07 0.09 a 3.14,3.14 0 0 0 0.4,0.17 1.29,1.29 0 0 0 0.4,0.06 1,1 0 0 0 0.56,-0.13 0.49,0.49 0 0 0 0.17,-0.42 0.44,0.44 0 0 0 -0.17,-0.39 1.06,1.06 0 0 0 -0.57,-0.12 h -0.43 a 0.4,0.4 0 0 1 -0.33,-0.15 0.54,0.54 0 0 1 -0.12,-0.35 0.54,0.54 0 0 1 0.12,-0.35 0.4,0.4 0 0 1 0.33,-0.15 h 0.31 a 1.08,1.08 0 0 0 0.56,-0.11 0.39,0.39 0 0 0 0.17,-0.36 0.52,0.52 0 0 0 -0.15,-0.4 0.6,0.6 0 0 0 -0.43,-0.14 1.06,1.06 0 0 0 -0.37,0.06 l -0.38,0.17 -0.15,0.07 -0.21,0.1 a 0.45,0.45 0 0 1 -0.17,0 0.36,0.36 0 0 1 -0.29,-0.15 0.57,0.57 0 0 1 -0.12,-0.37 0.55,0.55 0 0 1 0,-0.25 0.56,0.56 0 0 1 0.17,-0.19 2.32,2.32 0 0 1 0.71,-0.35 2.8,2.8 0 0 1 0.83,-0.13 2.33,2.33 0 0 1 0.91,0.17 1.38,1.38 0 0 1 0.61,0.48 1.22,1.22 0 0 1 0.21,0.71 1.16,1.16 0 0 1 -0.2,0.68 1.13,1.13 0 0 1 -0.56,0.42 1.2,1.2 0 0 1 0.65,0.58 z" | |||
inkscape:connector-curvature="0" /><path | |||
id="path312" | |||
style="fill:#fff7d4;fill-opacity:1" | |||
transform="translate(270.37)" | |||
d="m -218.23,357.42 a 0.46,0.46 0 0 1 0.15,0.38 0.48,0.48 0 0 1 -0.15,0.39 0.7,0.7 0 0 1 -0.46,0.13 h -2.55 a 0.53,0.53 0 0 1 -0.4,-0.15 0.52,0.52 0 0 1 -0.15,-0.38 0.77,0.77 0 0 1 0.24,-0.55 l 1.48,-1.55 a 1.36,1.36 0 0 0 0.46,-0.89 0.47,0.47 0 0 0 -0.14,-0.36 0.55,0.55 0 0 0 -0.39,-0.13 1.15,1.15 0 0 0 -0.37,0.06 3.38,3.38 0 0 0 -0.4,0.17 l -0.14,0.07 -0.11,0.06 -0.14,0.07 h -0.13 a 0.36,0.36 0 0 1 -0.29,-0.16 0.6,0.6 0 0 1 -0.12,-0.37 0.6,0.6 0 0 1 0,-0.25 0.46,0.46 0 0 1 0.17,-0.18 2.73,2.73 0 0 1 0.74,-0.35 2.74,2.74 0 0 1 0.81,-0.13 2.25,2.25 0 0 1 0.91,0.17 1.36,1.36 0 0 1 0.61,0.49 1.28,1.28 0 0 1 0.21,0.73 1.76,1.76 0 0 1 -0.17,0.78 3.29,3.29 0 0 1 -0.58,0.79 l -1,1 h 1.41 a 0.72,0.72 0 0 1 0.5,0.16 z" | |||
inkscape:connector-curvature="0" /></g></g></g></g><g | |||
inkscape:groupmode="layer" | |||
id="layer2" | |||
inkscape:label="Layer 2" /></svg> |
@@ -0,0 +1,761 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="90" | |||
height="380" | |||
viewBox="0 0 23.812499 100.54167" | |||
version="1.1" | |||
id="svg5269" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="BPMClock.svg"> | |||
<defs | |||
id="defs5263" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="8.7383513" | |||
inkscape:cx="38.749176" | |||
inkscape:cy="153.37982" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer3" | |||
showgrid="true" | |||
units="px" | |||
inkscape:window-width="1318" | |||
inkscape:window-height="1351" | |||
inkscape:window-x="158" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
showguides="true" | |||
inkscape:guide-bbox="true"> | |||
<inkscape:grid | |||
type="xygrid" | |||
id="grid5814" | |||
empspacing="15" | |||
dotted="false" /> | |||
</sodipodi:namedview> | |||
<metadata | |||
id="metadata5266"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<g | |||
inkscape:groupmode="layer" | |||
id="layer2" | |||
inkscape:label="bg 2" | |||
style="display:inline"> | |||
<g | |||
id="g166" | |||
transform="matrix(0.26755618,0,0,0.26458333,-31.705405,0)" | |||
style="fill:#44423e;fill-opacity:1"> | |||
<polygon | |||
points="207.5,29.98 118.5,29.98 118.5,287.57 207.5,287.57 207.5,272.35 " | |||
style="fill:#44423e;fill-opacity:1" | |||
id="polygon156" /> | |||
<polygon | |||
points="118.5,380 207.5,380 207.5,291.45 118.5,291.45 118.5,297.78 " | |||
style="fill:#44423e;fill-opacity:1" | |||
id="polygon158" /> | |||
<polygon | |||
points="118.5,287.57 118.5,291.45 207.5,291.45 207.5,287.57 " | |||
style="fill:#44423e;fill-opacity:1" | |||
id="polygon160" | |||
transform="matrix(1,0,0,1.7442041,0,-215.34345)" /> | |||
<polygon | |||
points="207.5,0 118.5,0 118.5,26.09 207.5,26.1 207.5,16.51 " | |||
style="fill:#44423e;fill-opacity:1" | |||
id="polygon162" /> | |||
<polygon | |||
points="118.5,29.98 207.5,29.98 207.5,29.81 207.5,26.1 118.5,26.09 " | |||
style="fill:#44423e;fill-opacity:1" | |||
id="polygon164" | |||
transform="matrix(1,0,0,1.8212547,0,-22.815527)" /> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g919" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-117.23465,-700.93765)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g917" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path915" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g925" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-117.23465,-700.93765)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g923" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path921" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g931" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-117.23465,-700.93765)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g929" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path927" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g937" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-117.23465,-700.93765)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g935" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path933" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g943" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-115.9842,-700.72227)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g941" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path939" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g949" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-115.9842,-700.72227)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g947" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path945" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g955" | |||
data-name="Layer 2" | |||
transform="matrix(2.0981223,0,0,2.0981223,-115.9842,-700.72227)"> | |||
<g | |||
style="fill:#3c3835;fill-opacity:1" | |||
id="g953" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path951" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#3c3835;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
transform="matrix(2.0981223,0,0,2.0981223,-113.92693,-706.23001)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /> | |||
</g> | |||
</g> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.22310618;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1759" | |||
width="23.8125" | |||
height="3.96875" | |||
x="3.7916682e-06" | |||
y="96.572906" /> | |||
<rect | |||
y="0" | |||
x="3.7916682e-06" | |||
height="3.96875" | |||
width="23.8125" | |||
id="rect1806" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.22310618;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,3.1779159e-6,-3.667036e-6)" | |||
id="g1614"> | |||
<circle | |||
r="15.118111" | |||
cy="359.88181" | |||
cx="44.999989" | |||
id="path1686" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.74390346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
transform="matrix(0.66602928,0,0,0.66602928,5.0554261,118.9929)" | |||
data-name="Layer 2" | |||
id="Layer_2-2" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="Layer_1-2-6" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path8-4-6" /> | |||
</g> | |||
</g> | |||
</g> | |||
<g | |||
id="g1660" | |||
transform="translate(-0.01851772)"> | |||
<rect | |||
ry="1.3924577" | |||
y="0.74168032" | |||
x="3.5040054" | |||
height="2.5" | |||
width="5" | |||
id="rect861" | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.15187515;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.15187515;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect863" | |||
width="5" | |||
height="2.5" | |||
x="3.5040054" | |||
y="97.441681" | |||
ry="1.3924577" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1191" | |||
d="m 16.737997,0.74152337 c -0.771421,0 -1.392163,0.55756003 -1.392163,1.25006003 0,0.6925 0.620742,1.2500501 1.392163,1.2500501 h 2.21537 c 0.771422,0 1.392161,-0.5575501 1.392161,-1.2500501 0,-0.6925 -0.620739,-1.25006003 -1.392161,-1.25006003 z" | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.15187515;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="rect865" | |||
d="m 16.737997,97.441605 c -0.771421,0 -1.392163,0.557548 -1.392163,1.25005 0,0.692499 0.620742,1.25005 1.392163,1.25005 h 2.21537 c 0.771422,0 1.392161,-0.557551 1.392161,-1.25005 0,-0.692502 -0.620739,-1.25005 -1.392161,-1.25005 z" | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.15187515;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(0,-196.45832)" | |||
style="display:none"> | |||
<g | |||
transform="translate(26.458334,196.45832)" | |||
style="display:inline" | |||
id="g1596"> | |||
<rect | |||
ry="0.78382814" | |||
y="27.08441" | |||
x="2.1166666" | |||
height="62.706249" | |||
width="7.5142331" | |||
id="rect1741" | |||
style="opacity:1;vector-effect:none;fill:#202020;fill-opacity:1;stroke:none;stroke-width:0.65668011;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" /> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#202020;fill-opacity:1;stroke:none;stroke-width:0.65668011;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" | |||
id="rect1783" | |||
width="7.5142331" | |||
height="62.706249" | |||
x="14.084242" | |||
y="27.08441" | |||
ry="0.78382814" /> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,12.170834,-6.2500007e-8)" | |||
id="g2412"> | |||
<path | |||
id="path2402" | |||
style="fill:#fff8d5" | |||
d="m 23.88,125.20991 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.24,-0.07 0.45,0.45 0 0 1 -0.18,-0.21 l -0.36,-0.8 h -2.31 l -0.36,0.8 a 0.46,0.46 0 0 1 -0.17,0.21 0.45,0.45 0 0 1 -0.25,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.55,0.55 0 0 1 0.05,-0.22 l 1.84,-3.86 a 0.54,0.54 0 0 1 0.22,-0.25 0.64,0.64 0 0 1 0.32,-0.08 0.63,0.63 0 0 1 0.33,0.09 0.6,0.6 0 0 1 0.23,0.25 l 1.84,3.86 a 0.54,0.54 0 0 1 0.05,0.21 z m -3.23,-1.44 h 1.58 l -0.79,-1.77 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path2404" | |||
style="fill:#fff8d5" | |||
d="m 23.189136,165.91622 a 1.2,1.2 0 0 1 0.23,0.74 1.16,1.16 0 0 1 -0.45,1 1.92,1.92 0 0 1 -1.23,0.35 h -1.78 a 0.5,0.5 0 0 1 -0.37,-0.13 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.92,1.92 0 0 1 1.19,0.33 1.08,1.08 0 0 1 0.44,0.91 1.11,1.11 0 0 1 -0.2,0.66 1.14,1.14 0 0 1 -0.55,0.41 1.2,1.2 0 0 1 0.64,0.4 z m -2.69,-0.79 h 1 a 1,1 0 0 0 0.6,-0.14 0.49,0.49 0 0 0 0.19,-0.42 0.5,0.5 0 0 0 -0.19,-0.44 1,1 0 0 0 -0.6,-0.14 h -1 z m 1.73,1.89 a 0.54,0.54 0 0 0 0.19,-0.46 0.56,0.56 0 0 0 -0.19,-0.47 1,1 0 0 0 -0.61,-0.15 h -1.12 v 1.22 h 1.12 a 1,1 0 0 0 0.62,-0.14 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path2406" | |||
style="fill:#fff8d5" | |||
d="m 20.529706,215.00026 a 2,2 0 0 1 -0.82,-0.86 2.83,2.83 0 0 1 -0.29,-1.31 2.81,2.81 0 0 1 0.29,-1.3 2,2 0 0 1 0.82,-0.85 2.48,2.48 0 0 1 1.24,-0.3 2.47,2.47 0 0 1 1.54,0.49 0.52,0.52 0 0 1 0.14,0.16 0.45,0.45 0 0 1 0,0.2 0.47,0.47 0 0 1 -0.1,0.3 0.3,0.3 0 0 1 -0.24,0.13 h -0.17 l -0.16,-0.08 a 2.26,2.26 0 0 0 -0.5,-0.25 1.54,1.54 0 0 0 -0.5,-0.08 1.19,1.19 0 0 0 -1,0.4 1.88,1.88 0 0 0 -0.33,1.21 q 0,1.62 1.31,1.62 a 1.43,1.43 0 0 0 0.48,-0.08 3,3 0 0 0 0.52,-0.25 l 0.17,-0.08 h 0.16 a 0.3,0.3 0 0 1 0.24,0.13 0.47,0.47 0 0 1 0.1,0.3 0.45,0.45 0 0 1 0,0.21 0.5,0.5 0 0 1 -0.14,0.16 2.47,2.47 0 0 1 -1.54,0.49 2.48,2.48 0 0 1 -1.22,-0.36 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path2408" | |||
style="fill:#fff8d5" | |||
d="m 19.379987,257.9504 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.37 a 3,3 0 0 1 1.35,0.29 2,2 0 0 1 0.86,0.82 2.6,2.6 0 0 1 0.3,1.29 2.65,2.65 0 0 1 -0.3,1.29 2,2 0 0 1 -0.86,0.83 3,3 0 0 1 -1.35,0.29 h -1.37 a 0.5,0.5 0 0 1 -0.37,-0.14 z m 1.66,-0.73 a 1.36,1.36 0 0 0 1.53,-1.54 1.36,1.36 0 0 0 -1.53,-1.54 h -0.73 v 3.08 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path2410" | |||
style="fill:#fff8d5" | |||
d="m 19.865535,305.3204 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 h -1.87 v 1.12 h 1.73 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -1.73 v 1.2 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.12 z" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
id="g2424" | |||
transform="scale(0.26458333)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 23.88,125.20991 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.24,-0.07 0.45,0.45 0 0 1 -0.18,-0.21 l -0.36,-0.8 h -2.31 l -0.36,0.8 a 0.46,0.46 0 0 1 -0.17,0.21 0.45,0.45 0 0 1 -0.25,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.55,0.55 0 0 1 0.05,-0.22 l 1.84,-3.86 a 0.54,0.54 0 0 1 0.22,-0.25 0.64,0.64 0 0 1 0.32,-0.08 0.63,0.63 0 0 1 0.33,0.09 0.6,0.6 0 0 1 0.23,0.25 l 1.84,3.86 a 0.54,0.54 0 0 1 0.05,0.21 z m -3.23,-1.44 h 1.58 l -0.79,-1.77 z" | |||
style="fill:#fff8d5" | |||
id="path2414" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 23.189136,165.91622 a 1.2,1.2 0 0 1 0.23,0.74 1.16,1.16 0 0 1 -0.45,1 1.92,1.92 0 0 1 -1.23,0.35 h -1.78 a 0.5,0.5 0 0 1 -0.37,-0.13 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.92,1.92 0 0 1 1.19,0.33 1.08,1.08 0 0 1 0.44,0.91 1.11,1.11 0 0 1 -0.2,0.66 1.14,1.14 0 0 1 -0.55,0.41 1.2,1.2 0 0 1 0.64,0.4 z m -2.69,-0.79 h 1 a 1,1 0 0 0 0.6,-0.14 0.49,0.49 0 0 0 0.19,-0.42 0.5,0.5 0 0 0 -0.19,-0.44 1,1 0 0 0 -0.6,-0.14 h -1 z m 1.73,1.89 a 0.54,0.54 0 0 0 0.19,-0.46 0.56,0.56 0 0 0 -0.19,-0.47 1,1 0 0 0 -0.61,-0.15 h -1.12 v 1.22 h 1.12 a 1,1 0 0 0 0.62,-0.14 z" | |||
style="fill:#fff8d5" | |||
id="path2416" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 20.529706,215.00026 a 2,2 0 0 1 -0.82,-0.86 2.83,2.83 0 0 1 -0.29,-1.31 2.81,2.81 0 0 1 0.29,-1.3 2,2 0 0 1 0.82,-0.85 2.48,2.48 0 0 1 1.24,-0.3 2.47,2.47 0 0 1 1.54,0.49 0.52,0.52 0 0 1 0.14,0.16 0.45,0.45 0 0 1 0,0.2 0.47,0.47 0 0 1 -0.1,0.3 0.3,0.3 0 0 1 -0.24,0.13 h -0.17 l -0.16,-0.08 a 2.26,2.26 0 0 0 -0.5,-0.25 1.54,1.54 0 0 0 -0.5,-0.08 1.19,1.19 0 0 0 -1,0.4 1.88,1.88 0 0 0 -0.33,1.21 q 0,1.62 1.31,1.62 a 1.43,1.43 0 0 0 0.48,-0.08 3,3 0 0 0 0.52,-0.25 l 0.17,-0.08 h 0.16 a 0.3,0.3 0 0 1 0.24,0.13 0.47,0.47 0 0 1 0.1,0.3 0.45,0.45 0 0 1 0,0.21 0.5,0.5 0 0 1 -0.14,0.16 2.47,2.47 0 0 1 -1.54,0.49 2.48,2.48 0 0 1 -1.22,-0.36 z" | |||
style="fill:#fff8d5" | |||
id="path2418" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 19.379987,257.9504 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.37 a 3,3 0 0 1 1.35,0.29 2,2 0 0 1 0.86,0.82 2.6,2.6 0 0 1 0.3,1.29 2.65,2.65 0 0 1 -0.3,1.29 2,2 0 0 1 -0.86,0.83 3,3 0 0 1 -1.35,0.29 h -1.37 a 0.5,0.5 0 0 1 -0.37,-0.14 z m 1.66,-0.73 a 1.36,1.36 0 0 0 1.53,-1.54 1.36,1.36 0 0 0 -1.53,-1.54 h -0.73 v 3.08 z" | |||
style="fill:#fff8d5" | |||
id="path2420" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 19.865535,305.3204 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 h -1.87 v 1.12 h 1.73 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -1.73 v 1.2 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.12 z" | |||
style="fill:#fff8d5" | |||
id="path2422" /> | |||
</g> | |||
</g> | |||
</g> | |||
<g | |||
inkscape:groupmode="layer" | |||
id="layer3" | |||
inkscape:label="TXTS" | |||
style="display:inline"> | |||
<g | |||
transform="matrix(0.21656532,0,0,0.21656532,-67.733631,35.788165)" | |||
id="g1338"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 43.51,-38.3 a 0.39,0.39 0 0 1 -0.15,0.32 0.55,0.55 0 0 1 -0.36,0.12 0.55,0.55 0 0 1 -0.25,-0.06 0.54,0.54 0 0 1 -0.2,-0.19 l -1.1,-1.68 a 1.08,1.08 0 0 0 -0.35,-0.37 1,1 0 0 0 -0.49,-0.11 H 39.8 v 1.86 a 0.54,0.54 0 0 1 -0.14,0.39 0.51,0.51 0 0 1 -0.38,0.15 0.52,0.52 0 0 1 -0.39,-0.15 0.53,0.53 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.07 a 2.27,2.27 0 0 1 1.52,0.44 1.59,1.59 0 0 1 0.5,1.33 1.62,1.62 0 0 1 -0.35,1.07 1.83,1.83 0 0 1 -1.09,0.56 1,1 0 0 1 0.42,0.21 1.84,1.84 0 0 1 0.36,0.42 l 0.76,1.15 a 0.53,0.53 0 0 1 0.06,0.29 z m -1.45,-3 a 0.85,0.85 0 0 0 0.28,-0.7 0.84,0.84 0 0 0 -0.28,-0.7 1.45,1.45 0 0 0 -0.89,-0.22 h -1.4 v 1.85 h 1.39 a 1.4,1.4 0 0 0 0.9,-0.25 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1332" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 45.92,-38.47 a 2.46,2.46 0 0 1 -0.62,-1.82 v -3 a 0.53,0.53 0 0 1 0.14,-0.39 0.51,0.51 0 0 1 0.38,-0.15 0.51,0.51 0 0 1 0.38,0.15 0.53,0.53 0 0 1 0.14,0.39 v 3.05 a 1.63,1.63 0 0 0 0.36,1.14 1.36,1.36 0 0 0 1,0.39 1.33,1.33 0 0 0 1,-0.39 1.63,1.63 0 0 0 0.36,-1.14 v -3.05 a 0.53,0.53 0 0 1 0.14,-0.39 0.51,0.51 0 0 1 0.38,-0.15 0.51,0.51 0 0 1 0.38,0.15 0.53,0.53 0 0 1 0.14,0.39 v 3 a 2.47,2.47 0 0 1 -0.62,1.81 2.45,2.45 0 0 1 -1.82,0.63 2.47,2.47 0 0 1 -1.74,-0.62 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1334" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 57,-43.67 a 0.54,0.54 0 0 1 0.14,0.39 v 4.87 A 0.54,0.54 0 0 1 57,-38 a 0.48,0.48 0 0 1 -0.37,0.15 0.47,0.47 0 0 1 -0.41,-0.19 l -3,-3.94 v 3.59 a 0.57,0.57 0 0 1 -0.13,0.39 0.46,0.46 0 0 1 -0.37,0.15 0.46,0.46 0 0 1 -0.37,-0.15 0.56,0.56 0 0 1 -0.13,-0.39 v -4.87 a 0.53,0.53 0 0 1 0.14,-0.39 0.5,0.5 0 0 1 0.37,-0.15 0.47,0.47 0 0 1 0.4,0.19 l 3,3.93 v -3.59 a 0.54,0.54 0 0 1 0.14,-0.39 0.47,0.47 0 0 1 0.36,-0.15 0.48,0.48 0 0 1 0.37,0.14 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1336" /> | |||
</g> | |||
<g | |||
transform="matrix(0.26179895,0,0,0.26179895,-73.41011,28.536056)" | |||
id="g1392"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 25.35,-69.65 A 2.09,2.09 0 0 1 24.6,-70 a 0.48,0.48 0 0 1 -0.15,-0.16 0.46,0.46 0 0 1 0,-0.21 0.46,0.46 0 0 1 0.11,-0.3 0.31,0.31 0 0 1 0.24,-0.13 h 0.15 l 0.17,0.08 a 2.28,2.28 0 0 0 0.59,0.27 2.41,2.41 0 0 0 0.66,0.08 1.3,1.3 0 0 0 0.63,-0.13 0.48,0.48 0 0 0 0.24,-0.43 0.39,0.39 0 0 0 -0.22,-0.34 2.85,2.85 0 0 0 -0.79,-0.24 4.34,4.34 0 0 1 -1,-0.31 1.3,1.3 0 0 1 -0.55,-0.46 1.2,1.2 0 0 1 -0.17,-0.66 1.28,1.28 0 0 1 0.25,-0.77 1.65,1.65 0 0 1 0.69,-0.54 2.43,2.43 0 0 1 1,-0.19 2.53,2.53 0 0 1 1.55,0.44 0.54,0.54 0 0 1 0.15,0.17 0.44,0.44 0 0 1 0,0.21 0.46,0.46 0 0 1 -0.11,0.3 0.31,0.31 0 0 1 -0.24,0.13 h -0.14 l -0.18,-0.09 a 2.83,2.83 0 0 0 -0.51,-0.27 1.71,1.71 0 0 0 -0.6,-0.09 1.16,1.16 0 0 0 -0.65,0.16 0.5,0.5 0 0 0 -0.24,0.44 0.39,0.39 0 0 0 0.09,0.27 0.76,0.76 0 0 0 0.31,0.19 4.55,4.55 0 0 0 0.61,0.17 3.38,3.38 0 0 1 1.33,0.52 1.06,1.06 0 0 1 0.4,0.88 1.28,1.28 0 0 1 -0.24,0.77 1.56,1.56 0 0 1 -0.68,0.52 2.61,2.61 0 0 1 -1,0.18 3.81,3.81 0 0 1 -0.95,-0.11 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1374" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 29.87,-69.69 a 0.52,0.52 0 0 1 -0.14,-0.39 v -3.81 a 0.51,0.51 0 0 1 0.14,-0.38 0.52,0.52 0 0 1 0.39,-0.14 0.52,0.52 0 0 1 0.39,0.14 0.51,0.51 0 0 1 0.14,0.38 v 3.81 a 0.52,0.52 0 0 1 -0.14,0.39 0.52,0.52 0 0 1 -0.39,0.14 0.52,0.52 0 0 1 -0.39,-0.14 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1376" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 36.43,-72.13 a 0.38,0.38 0 0 1 0.11,0.29 v 1.33 a 1.57,1.57 0 0 1 0,0.42 0.47,0.47 0 0 1 -0.15,0.24 0.91,0.91 0 0 1 -0.33,0.15 3.88,3.88 0 0 1 -0.61,0.13 4.74,4.74 0 0 1 -0.65,0 2.78,2.78 0 0 1 -1.32,-0.3 2,2 0 0 1 -0.86,-0.85 2.73,2.73 0 0 1 -0.3,-1.32 2.73,2.73 0 0 1 0.3,-1.3 2,2 0 0 1 0.85,-0.85 2.65,2.65 0 0 1 1.29,-0.3 2.44,2.44 0 0 1 1.56,0.49 0.52,0.52 0 0 1 0.14,0.16 0.46,0.46 0 0 1 0,0.2 0.47,0.47 0 0 1 -0.1,0.3 0.29,0.29 0 0 1 -0.23,0.13 0.45,0.45 0 0 1 -0.16,0 L 35.8,-73.3 a 2.37,2.37 0 0 0 -0.52,-0.25 1.74,1.74 0 0 0 -0.52,-0.08 q -1.39,0 -1.39,1.61 a 1.83,1.83 0 0 0 0.36,1.24 1.38,1.38 0 0 0 1.09,0.41 3.05,3.05 0 0 0 0.78,-0.1 V -71.5 H 35 a 0.45,0.45 0 0 1 -0.31,-0.1 0.34,0.34 0 0 1 -0.11,-0.27 0.34,0.34 0 0 1 0.11,-0.27 0.45,0.45 0 0 1 0.31,-0.1 h 1.16 a 0.42,0.42 0 0 1 0.27,0.11 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1378" /> | |||
</g> | |||
<g | |||
transform="matrix(0.2645825,0,0,0.26458333,-84.719903,-27.420684)" | |||
id="g1436"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 21.14,21.46 a 2.12,2.12 0 0 1 0.4,1.31 2,2 0 0 1 -0.79,1.69 3.4,3.4 0 0 1 -2.17,0.62 H 15.45 A 0.79,0.79 0 0 1 14.57,24.2 v -6.69 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.38,3.38 0 0 1 2.09,0.59 1.91,1.91 0 0 1 0.77,1.61 A 2,2 0 0 1 21,20 a 2,2 0 0 1 -1,0.73 2.12,2.12 0 0 1 1.14,0.73 z M 16.4,20.08 h 1.76 a 1.83,1.83 0 0 0 1.06,-0.25 0.86,0.86 0 0 0 0.34,-0.75 0.89,0.89 0 0 0 -0.34,-0.77 1.84,1.84 0 0 0 -1.06,-0.25 H 16.4 Z m 3.06,3.34 A 1,1 0 0 0 19.8,22.6 1,1 0 0 0 19.46,21.77 1.76,1.76 0 0 0 18.38,21.51 h -2 v 2.16 h 2 a 1.82,1.82 0 0 0 1.08,-0.26 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1420" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 23.33,24.91 a 0.92,0.92 0 0 1 -0.25,-0.68 v -6.72 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.09,3.09 0 0 1 2.15,0.7 2.49,2.49 0 0 1 0.77,1.94 2.49,2.49 0 0 1 -0.77,1.94 3.09,3.09 0 0 1 -2.15,0.7 H 25 v 2.32 a 1,1 0 0 1 -1.62,0.68 z m 3.4,-4.42 q 1.4,0 1.4,-1.21 0,-1.21 -1.4,-1.22 H 25 v 2.44 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1422" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 39.49,16.83 a 0.93,0.93 0 0 1 0.25,0.67 v 6.82 a 0.84,0.84 0 0 1 -0.23,0.62 0.81,0.81 0 0 1 -0.6,0.23 0.8,0.8 0 0 1 -0.59,-0.23 0.84,0.84 0 0 1 -0.23,-0.62 v -4.24 l -1.7,3.2 a 1.34,1.34 0 0 1 -0.37,0.46 0.84,0.84 0 0 1 -0.94,0 1.3,1.3 0 0 1 -0.37,-0.46 L 33,20.14 v 4.18 a 0.85,0.85 0 0 1 -0.23,0.62 0.88,0.88 0 0 1 -1.19,0 0.84,0.84 0 0 1 -0.23,-0.62 V 17.5 a 0.93,0.93 0 0 1 0.25,-0.67 0.85,0.85 0 0 1 0.64,-0.26 1,1 0 0 1 0.88,0.61 L 35.56,21.8 38,17.18 a 1,1 0 0 1 0.86,-0.61 0.85,0.85 0 0 1 0.63,0.26 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1424" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 47,24.67 a 3.55,3.55 0 0 1 -1.44,-1.51 5,5 0 0 1 -0.5,-2.3 5,5 0 0 1 0.5,-2.3 3.56,3.56 0 0 1 1.44,-1.51 4.73,4.73 0 0 1 4.9,0.34 0.9,0.9 0 0 1 0.25,0.29 0.8,0.8 0 0 1 0.07,0.36 0.84,0.84 0 0 1 -0.17,0.53 0.52,0.52 0 0 1 -0.43,0.22 0.93,0.93 0 0 1 -0.29,0 A 1.16,1.16 0 0 1 51,18.6 4.05,4.05 0 0 0 50.11,18.15 2.72,2.72 0 0 0 49.23,18.01 2.11,2.11 0 0 0 47.5,18.72 3.32,3.32 0 0 0 46.92,20.85 q 0,2.86 2.32,2.86 a 2.53,2.53 0 0 0 0.84,-0.14 5.29,5.29 0 0 0 0.92,-0.45 1.74,1.74 0 0 1 0.3,-0.15 0.84,0.84 0 0 1 0.28,0 0.52,0.52 0 0 1 0.43,0.22 0.84,0.84 0 0 1 0.17,0.53 0.79,0.79 0 0 1 -0.08,0.37 0.89,0.89 0 0 1 -0.25,0.28 4.73,4.73 0 0 1 -4.9,0.34 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1426" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 53.76,24.95 A 0.78,0.78 0 0 1 53.5,24.31 v -6.89 a 0.78,0.78 0 0 1 0.26,-0.64 1,1 0 0 1 0.65,-0.22 1,1 0 0 1 0.64,0.22 0.78,0.78 0 0 1 0.26,0.64 v 6.89 a 0.78,0.78 0 0 1 -0.26,0.64 1,1 0 0 1 -0.64,0.22 1,1 0 0 1 -0.65,-0.22 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1428" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 58.13,24.81 A 2.65,2.65 0 0 1 57,23.74 a 3.64,3.64 0 0 1 0,-3.25 2.61,2.61 0 0 1 1.09,-1.06 3.82,3.82 0 0 1 3.29,0 2.62,2.62 0 0 1 1.09,1.06 3.64,3.64 0 0 1 0,3.25 2.65,2.65 0 0 1 -1.09,1.07 3.76,3.76 0 0 1 -3.29,0 z m 3,-2.69 a 2,2 0 0 0 -0.34,-1.27 1.19,1.19 0 0 0 -1,-0.42 q -1.32,0 -1.32,1.69 0,1.69 1.32,1.69 1.31,0 1.31,-1.69 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1430" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 65.37,24.82 A 2.55,2.55 0 0 1 64.32,23.76 3.36,3.36 0 0 1 64,22.15 a 3.29,3.29 0 0 1 0.39,-1.63 2.71,2.71 0 0 1 1.1,-1.09 3.37,3.37 0 0 1 1.63,-0.38 3.68,3.68 0 0 1 1,0.13 3.23,3.23 0 0 1 0.87,0.37 0.74,0.74 0 0 1 0.37,0.67 0.84,0.84 0 0 1 -0.14,0.51 0.45,0.45 0 0 1 -0.38,0.2 0.8,0.8 0 0 1 -0.29,-0.05 l -0.37,-0.16 a 3.75,3.75 0 0 0 -0.45,-0.2 1.31,1.31 0 0 0 -0.45,-0.07 1.26,1.26 0 0 0 -1,0.43 1.9,1.9 0 0 0 -0.35,1.24 1.92,1.92 0 0 0 0.35,1.25 1.25,1.25 0 0 0 1,0.43 1.37,1.37 0 0 0 0.44,-0.07 3.58,3.58 0 0 0 0.47,-0.21 l 0.36,-0.16 a 0.75,0.75 0 0 1 0.29,-0.05 0.45,0.45 0 0 1 0.38,0.2 0.85,0.85 0 0 1 0.15,0.52 0.71,0.71 0 0 1 -0.37,0.66 3.18,3.18 0 0 1 -0.89,0.37 4.16,4.16 0 0 1 -1.06,0.13 3.29,3.29 0 0 1 -1.68,-0.37 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1432" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 76.24,24.29 a 0.86,0.86 0 0 1 -0.25,0.6 0.76,0.76 0 0 1 -0.57,0.26 0.82,0.82 0 0 1 -0.58,-0.25 l -2.63,-2.44 v 1.84 a 0.78,0.78 0 0 1 -0.26,0.64 1,1 0 0 1 -0.64,0.22 1,1 0 0 1 -0.65,-0.22 0.78,0.78 0 0 1 -0.26,-0.64 v -6.88 a 0.78,0.78 0 0 1 0.26,-0.64 1,1 0 0 1 0.65,-0.22 1,1 0 0 1 0.64,0.22 0.78,0.78 0 0 1 0.26,0.64 v 4.3 l 2.4,-2.36 a 0.81,0.81 0 0 1 1.18,0 0.79,0.79 0 0 1 0.25,0.58 0.83,0.83 0 0 1 -0.28,0.59 L 74.18,22 76,23.69 a 0.81,0.81 0 0 1 0.24,0.6 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1434" /> | |||
</g> | |||
<g | |||
id="g938" | |||
transform="matrix(0.14877078,0,0,0.14877078,-30.958201,-5.5737438)"> | |||
<path | |||
id="path922" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 21.14,21.46 a 2.12,2.12 0 0 1 0.4,1.31 2,2 0 0 1 -0.79,1.69 3.4,3.4 0 0 1 -2.17,0.62 H 15.45 A 0.79,0.79 0 0 1 14.57,24.2 v -6.69 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.38,3.38 0 0 1 2.09,0.59 1.91,1.91 0 0 1 0.77,1.61 A 2,2 0 0 1 21,20 a 2,2 0 0 1 -1,0.73 2.12,2.12 0 0 1 1.14,0.73 z M 16.4,20.08 h 1.76 a 1.83,1.83 0 0 0 1.06,-0.25 0.86,0.86 0 0 0 0.34,-0.75 0.89,0.89 0 0 0 -0.34,-0.77 1.84,1.84 0 0 0 -1.06,-0.25 H 16.4 Z m 3.06,3.34 A 1,1 0 0 0 19.8,22.6 1,1 0 0 0 19.46,21.77 1.76,1.76 0 0 0 18.38,21.51 h -2 v 2.16 h 2 a 1.82,1.82 0 0 0 1.08,-0.26 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path924" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 23.33,24.91 a 0.92,0.92 0 0 1 -0.25,-0.68 v -6.72 a 0.79,0.79 0 0 1 0.88,-0.88 h 3 a 3.09,3.09 0 0 1 2.15,0.7 2.49,2.49 0 0 1 0.77,1.94 2.49,2.49 0 0 1 -0.77,1.94 3.09,3.09 0 0 1 -2.15,0.7 H 25 v 2.32 a 1,1 0 0 1 -1.62,0.68 z m 3.4,-4.42 q 1.4,0 1.4,-1.21 0,-1.21 -1.4,-1.22 H 25 v 2.44 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path926" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 39.49,16.83 a 0.93,0.93 0 0 1 0.25,0.67 v 6.82 a 0.84,0.84 0 0 1 -0.23,0.62 0.81,0.81 0 0 1 -0.6,0.23 0.8,0.8 0 0 1 -0.59,-0.23 0.84,0.84 0 0 1 -0.23,-0.62 v -4.24 l -1.7,3.2 a 1.34,1.34 0 0 1 -0.37,0.46 0.84,0.84 0 0 1 -0.94,0 1.3,1.3 0 0 1 -0.37,-0.46 L 33,20.14 v 4.18 a 0.85,0.85 0 0 1 -0.23,0.62 0.88,0.88 0 0 1 -1.19,0 0.84,0.84 0 0 1 -0.23,-0.62 V 17.5 a 0.93,0.93 0 0 1 0.25,-0.67 0.85,0.85 0 0 1 0.64,-0.26 1,1 0 0 1 0.88,0.61 L 35.56,21.8 38,17.18 a 1,1 0 0 1 0.86,-0.61 0.85,0.85 0 0 1 0.63,0.26 z" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="matrix(0.21488787,0,0,0.21488787,-67.256252,48.47841)" | |||
id="g910"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 364.41084,62.79 a 0.39,0.39 0 0 1 -0.15,0.32 0.55,0.55 0 0 1 -0.36,0.12 0.55,0.55 0 0 1 -0.25,-0.06 0.54,0.54 0 0 1 -0.2,-0.19 l -1.12,-1.68 a 1.08,1.08 0 0 0 -0.35,-0.37 1,1 0 0 0 -0.49,-0.11 h -0.81 v 1.86 a 0.54,0.54 0 0 1 -0.14,0.39 0.51,0.51 0 0 1 -0.38,0.15 0.52,0.52 0 0 1 -0.39,-0.15 0.53,0.53 0 0 1 -0.15,-0.39 v -4.86 a 0.5,0.5 0 0 1 0.14,-0.37 0.52,0.52 0 0 1 0.38,-0.13 h 2.07 a 2.27,2.27 0 0 1 1.52,0.44 1.59,1.59 0 0 1 0.52,1.28 1.62,1.62 0 0 1 -0.39,1.12 1.83,1.83 0 0 1 -1.09,0.56 1,1 0 0 1 0.42,0.21 1.84,1.84 0 0 1 0.36,0.42 l 0.76,1.15 a 0.53,0.53 0 0 1 0.1,0.29 z m -1.45,-3 a 0.85,0.85 0 0 0 0.28,-0.7 0.84,0.84 0 0 0 -0.28,-0.7 1.45,1.45 0 0 0 -0.89,-0.22 h -1.44 v 1.85 h 1.39 a 1.4,1.4 0 0 0 0.94,-0.25 z" | |||
style="fill:#fff8d5" | |||
id="path904" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 47,-50.33 a 2.65,2.65 0 0 1 -0.92,-0.46 0.46,0.46 0 0 1 -0.19,-0.4 0.47,0.47 0 0 1 0.1,-0.3 0.31,0.31 0 0 1 0.25,-0.13 0.68,0.68 0 0 1 0.34,0.12 2.46,2.46 0 0 0 0.75,0.37 3,3 0 0 0 0.86,0.12 1.7,1.7 0 0 0 0.93,-0.21 0.69,0.69 0 0 0 0.32,-0.62 0.53,0.53 0 0 0 -0.3,-0.49 4,4 0 0 0 -1,-0.33 A 6,6 0 0 1 47,-53 a 1.68,1.68 0 0 1 -0.69,-0.53 1.37,1.37 0 0 1 -0.23,-0.82 1.54,1.54 0 0 1 0.29,-0.92 1.91,1.91 0 0 1 0.81,-0.63 2.87,2.87 0 0 1 1.17,-0.23 2.9,2.9 0 0 1 1.93,0.63 0.63,0.63 0 0 1 0.15,0.18 0.47,0.47 0 0 1 0,0.22 0.47,0.47 0 0 1 -0.1,0.3 0.31,0.31 0 0 1 -0.25,0.13 h -0.15 l -0.19,-0.09 a 2.81,2.81 0 0 0 -0.66,-0.37 2.25,2.25 0 0 0 -0.79,-0.12 1.54,1.54 0 0 0 -0.89,0.23 0.73,0.73 0 0 0 -0.33,0.64 0.58,0.58 0 0 0 0.29,0.52 3.4,3.4 0 0 0 1,0.34 6.64,6.64 0 0 1 1.2,0.37 1.79,1.79 0 0 1 0.71,0.52 1.25,1.25 0 0 1 0.24,0.79 1.5,1.5 0 0 1 -0.29,0.91 1.87,1.87 0 0 1 -0.8,0.61 3,3 0 0 1 -1.19,0.22 4.2,4.2 0 0 1 -1.23,-0.23 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path906" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 374.26929,63.07 a 0.52,0.52 0 0 1 -0.14,-0.39 V 58.2 h -1.47 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.44 h 4 q 0.5,0 0.5,0.44 0,0.44 -0.5,0.44 h -1.47 v 4.48 a 0.52,0.52 0 0 1 -0.15,0.39 0.52,0.52 0 0 1 -0.39,0.15 0.53,0.53 0 0 1 -0.38,-0.15 z" | |||
style="fill:#fff8d5" | |||
id="path908" /> | |||
</g> | |||
<g | |||
transform="matrix(0.2645817,0,0,0.26458333,-92.24279,76.457272)" | |||
id="g1360"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 42,-89.92 a 1.2,1.2 0 0 1 0.22,0.74 1.17,1.17 0 0 1 -0.49,1 2.24,2.24 0 0 1 -1.35,0.36 2.24,2.24 0 0 1 -1.35,-0.36 1.17,1.17 0 0 1 -0.49,-1 1.21,1.21 0 0 1 0.22,-0.75 1.16,1.16 0 0 1 0.65,-0.41 1.16,1.16 0 0 1 -0.55,-0.42 1.14,1.14 0 0 1 -0.2,-0.67 1.13,1.13 0 0 1 0.46,-0.95 2,2 0 0 1 1.26,-0.35 2,2 0 0 1 1.26,0.35 1.13,1.13 0 0 1 0.46,1 1.18,1.18 0 0 1 -0.2,0.68 1,1 0 0 1 -0.54,0.41 1.18,1.18 0 0 1 0.64,0.37 z m -0.76,0.66 q 0,-0.63 -0.86,-0.63 -0.86,0 -0.86,0.63 0,0.63 0.86,0.63 0.86,0 0.89,-0.64 z m -1.58,-2.05 q 0,0.61 0.73,0.61 0.73,0 0.73,-0.61 0,-0.6 -0.73,-0.6 -0.73,0 -0.7,0.59 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1352" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 45.68,-88.49 a 0.33,0.33 0 0 1 0.1,0.26 0.33,0.33 0 0 1 -0.16,0.3 0.73,0.73 0 0 1 -0.45,0.08 H 45 a 1.13,1.13 0 0 1 -1.19,-1.24 v -1.35 h -0.27 a 0.51,0.51 0 0 1 -0.34,-0.1 0.35,0.35 0 0 1 -0.12,-0.28 0.36,0.36 0 0 1 0.12,-0.29 0.51,0.51 0 0 1 0.34,-0.1 h 0.27 v -0.53 a 0.46,0.46 0 0 1 0.14,-0.35 0.53,0.53 0 0 1 0.38,-0.13 0.52,0.52 0 0 1 0.37,0.13 0.46,0.46 0 0 1 0.14,0.35 v 0.53 h 0.48 q 0.46,0 0.46,0.39 a 0.35,0.35 0 0 1 -0.12,0.28 0.52,0.52 0 0 1 -0.35,0.1 H 44.83 V -89 a 0.45,0.45 0 0 0 0.1,0.31 0.4,0.4 0 0 0 0.28,0.12 h 0.19 a 0.47,0.47 0 0 1 0.28,0.08 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1354" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 50.12,-89.89 v 1.57 A 0.46,0.46 0 0 1 50,-88 0.54,0.54 0 0 1 49.62,-87.87 0.52,0.52 0 0 1 49.25,-88 0.46,0.46 0 0 1 49.11,-88.35 v -1.58 a 0.67,0.67 0 0 0 -0.13,-0.45 0.49,0.49 0 0 0 -0.39,-0.15 0.68,0.68 0 0 0 -0.51,0.2 0.76,0.76 0 0 0 -0.19,0.54 v 1.43 a 0.46,0.46 0 0 1 -0.14,0.35 0.52,0.52 0 0 1 -0.37,0.13 A 0.53,0.53 0 0 1 47,-88 0.46,0.46 0 0 1 46.86,-88.35 v -3.92 a 0.43,0.43 0 0 1 0.15,-0.34 0.56,0.56 0 0 1 0.38,-0.13 0.52,0.52 0 0 1 0.36,0.12 0.42,0.42 0 0 1 0.14,0.33 v 1.48 a 1.13,1.13 0 0 1 0.46,-0.39 1.45,1.45 0 0 1 0.65,-0.1 q 1.12,0 1.12,1.41 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1356" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 52.11,-87.9 a 1.63,1.63 0 0 1 -0.54,-0.22 0.42,0.42 0 0 1 -0.16,-0.16 0.48,0.48 0 0 1 -0.05,-0.23 0.39,0.39 0 0 1 0.09,-0.26 0.27,0.27 0 0 1 0.22,-0.11 0.55,0.55 0 0 1 0.18,0 l 0.18,0.07 a 2.46,2.46 0 0 0 0.37,0.14 1.72,1.72 0 0 0 0.46,0.05 0.75,0.75 0 0 0 0.37,-0.08 0.23,0.23 0 0 0 0.13,-0.2 0.21,0.21 0 0 0 -0.06,-0.1 0.54,0.54 0 0 0 -0.21,-0.11 l -0.5,-0.12 a 1.87,1.87 0 0 1 -0.87,-0.35 0.81,0.81 0 0 1 -0.27,-0.65 0.88,0.88 0 0 1 0.19,-0.55 1.24,1.24 0 0 1 0.51,-0.38 1.85,1.85 0 0 1 0.73,-0.14 2.19,2.19 0 0 1 0.57,0.07 1.82,1.82 0 0 1 0.55,0.23 0.42,0.42 0 0 1 0.21,0.38 0.42,0.42 0 0 1 -0.09,0.27 0.27,0.27 0 0 1 -0.22,0.11 0.8,0.8 0 0 1 -0.37,-0.12 2,2 0 0 0 -0.31,-0.13 1.1,1.1 0 0 0 -0.33,0 0.62,0.62 0 0 0 -0.33,0.08 0.24,0.24 0 0 0 -0.12,0.21 0.24,0.24 0 0 0 0.14,0.22 2.22,2.22 0 0 0 0.55,0.15 3,3 0 0 1 0.71,0.21 0.86,0.86 0 0 1 0.37,0.32 0.92,0.92 0 0 1 0.12,0.48 0.9,0.9 0 0 1 -0.4,0.77 1.79,1.79 0 0 1 -1.06,0.29 3.35,3.35 0 0 1 -0.76,-0.14 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1358" /> | |||
</g> | |||
<g | |||
id="g902" | |||
transform="matrix(0.99999386,0,0,1,0.78334863,2.5189976)"> | |||
<g | |||
id="g1372" | |||
transform="matrix(0.26458333,0,0,0.26458333,-79.110415,71.398044)"> | |||
<path | |||
id="path1362" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 39.93,-78.65 q 0,0.43 -0.5,0.43 h -2.32 q -0.5,0 -0.5,-0.43 0,-0.43 0.5,-0.42 h 0.63 v -2.78 l -0.6,0.36 a 0.39,0.39 0 0 1 -0.2,0.06 0.36,0.36 0 0 1 -0.29,-0.14 0.49,0.49 0 0 1 -0.12,-0.32 0.39,0.39 0 0 1 0.21,-0.36 l 1.07,-0.65 a 0.92,0.92 0 0 1 0.48,-0.14 0.5,0.5 0 0 1 0.37,0.14 0.5,0.5 0 0 1 0.14,0.38 v 3.45 h 0.63 q 0.5,0 0.5,0.42 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path1364" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 43.89,-81.14 a 1.37,1.37 0 0 1 0.52,0.55 1.68,1.68 0 0 1 0.19,0.8 1.67,1.67 0 0 1 -0.21,0.84 1.5,1.5 0 0 1 -0.58,0.58 1.71,1.71 0 0 1 -0.84,0.21 1.76,1.76 0 0 1 -1.44,-0.62 2.71,2.71 0 0 1 -0.53,-1.77 3.49,3.49 0 0 1 0.24,-1.34 1.93,1.93 0 0 1 0.68,-0.88 1.79,1.79 0 0 1 1,-0.31 2.51,2.51 0 0 1 0.78,0.13 2,2 0 0 1 0.67,0.36 0.51,0.51 0 0 1 0.14,0.16 0.45,0.45 0 0 1 0,0.21 0.47,0.47 0 0 1 -0.1,0.3 0.3,0.3 0 0 1 -0.24,0.13 h -0.15 l -0.17,-0.08 a 4.12,4.12 0 0 0 -0.49,-0.25 1.1,1.1 0 0 0 -0.44,-0.09 0.76,0.76 0 0 0 -0.67,0.39 2.22,2.22 0 0 0 -0.28,1.09 1.12,1.12 0 0 1 0.44,-0.41 1.33,1.33 0 0 1 0.64,-0.15 1.43,1.43 0 0 1 0.84,0.15 z m -0.48,1.94 a 0.79,0.79 0 0 0 0.19,-0.56 0.78,0.78 0 0 0 -0.19,-0.55 0.66,0.66 0 0 0 -0.51,-0.21 0.68,0.68 0 0 0 -0.52,0.21 0.77,0.77 0 0 0 -0.2,0.55 0.79,0.79 0 0 0 0.2,0.55 0.67,0.67 0 0 0 0.52,0.21 0.66,0.66 0 0 0 0.51,-0.19 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path1366" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 48.06,-78.83 a 0.33,0.33 0 0 1 0.09,0.26 0.33,0.33 0 0 1 -0.16,0.3 0.73,0.73 0 0 1 -0.45,0.08 h -0.19 a 1.13,1.13 0 0 1 -1.19,-1.24 v -1.35 H 45.9 a 0.51,0.51 0 0 1 -0.34,-0.1 0.35,0.35 0 0 1 -0.12,-0.28 0.36,0.36 0 0 1 0.12,-0.29 0.51,0.51 0 0 1 0.34,-0.1 h 0.27 v -0.53 a 0.46,0.46 0 0 1 0.14,-0.35 0.53,0.53 0 0 1 0.38,-0.13 0.52,0.52 0 0 1 0.37,0.13 0.46,0.46 0 0 1 0.14,0.35 v 0.53 h 0.48 q 0.46,0 0.46,0.39 a 0.35,0.35 0 0 1 -0.12,0.28 0.52,0.52 0 0 1 -0.35,0.1 H 47.2 v 1.42 a 0.45,0.45 0 0 0 0.09,0.31 0.4,0.4 0 0 0 0.28,0.12 h 0.19 a 0.47,0.47 0 0 1 0.3,0.1 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path1368" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 52.5,-80.23 v 1.57 a 0.46,0.46 0 0 1 -0.14,0.35 0.53,0.53 0 0 1 -0.38,0.13 0.52,0.52 0 0 1 -0.37,-0.13 0.46,0.46 0 0 1 -0.14,-0.35 v -1.58 a 0.67,0.67 0 0 0 -0.12,-0.45 0.49,0.49 0 0 0 -0.39,-0.15 0.67,0.67 0 0 0 -0.51,0.2 0.75,0.75 0 0 0 -0.19,0.54 v 1.43 a 0.46,0.46 0 0 1 -0.14,0.35 0.52,0.52 0 0 1 -0.37,0.13 0.53,0.53 0 0 1 -0.38,-0.13 0.46,0.46 0 0 1 -0.14,-0.35 v -3.92 a 0.43,0.43 0 0 1 0.15,-0.34 0.56,0.56 0 0 1 0.38,-0.13 0.52,0.52 0 0 1 0.36,0.12 0.42,0.42 0 0 1 0.14,0.33 v 1.48 a 1.13,1.13 0 0 1 0.46,-0.39 1.45,1.45 0 0 1 0.63,-0.13 q 1.15,0.01 1.15,1.42 z" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path1370" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 54.49,-78.24 a 1.63,1.63 0 0 1 -0.54,-0.22 0.41,0.41 0 0 1 -0.16,-0.16 0.48,0.48 0 0 1 -0.05,-0.23 0.39,0.39 0 0 1 0.09,-0.26 0.27,0.27 0 0 1 0.22,-0.11 0.55,0.55 0 0 1 0.18,0 l 0.18,0.07 a 2.42,2.42 0 0 0 0.37,0.14 1.71,1.71 0 0 0 0.46,0.05 0.76,0.76 0 0 0 0.37,-0.08 0.23,0.23 0 0 0 0.13,-0.2 0.21,0.21 0 0 0 -0.06,-0.15 0.52,0.52 0 0 0 -0.21,-0.11 l -0.5,-0.12 a 1.87,1.87 0 0 1 -0.87,-0.35 0.81,0.81 0 0 1 -0.26,-0.65 0.88,0.88 0 0 1 0.19,-0.55 1.24,1.24 0 0 1 0.51,-0.38 1.85,1.85 0 0 1 0.73,-0.14 2.21,2.21 0 0 1 0.57,0.07 1.81,1.81 0 0 1 0.5,0.21 0.42,0.42 0 0 1 0.21,0.38 0.41,0.41 0 0 1 -0.09,0.27 0.27,0.27 0 0 1 -0.22,0.11 0.8,0.8 0 0 1 -0.37,-0.12 2,2 0 0 0 -0.31,-0.13 1.1,1.1 0 0 0 -0.33,0 0.61,0.61 0 0 0 -0.33,0.08 0.24,0.24 0 0 0 -0.12,0.21 0.23,0.23 0 0 0 0.14,0.22 2.2,2.2 0 0 0 0.55,0.15 3,3 0 0 1 0.71,0.21 0.87,0.87 0 0 1 0.37,0.32 0.92,0.92 0 0 1 0.12,0.48 0.9,0.9 0 0 1 -0.4,0.77 1.79,1.79 0 0 1 -1.06,0.29 3.35,3.35 0 0 1 -0.72,-0.07 z" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</g> | |||
<g | |||
transform="matrix(0.26458684,0,0,0.26458333,-78.34683,68.833708)" | |||
id="g1402"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 40.92,-100.28 a 1.2,1.2 0 0 1 0.23,0.74 1.16,1.16 0 0 1 -0.45,1 1.92,1.92 0 0 1 -1.23,0.35 h -1.78 a 0.5,0.5 0 0 1 -0.37,-0.13 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.92,1.92 0 0 1 1.19,0.33 1.08,1.08 0 0 1 0.44,0.91 1.11,1.11 0 0 1 -0.2,0.66 1.14,1.14 0 0 1 -0.55,0.41 1.2,1.2 0 0 1 0.64,0.4 z m -2.69,-0.79 h 1 a 1,1 0 0 0 0.6,-0.14 0.49,0.49 0 0 0 0.19,-0.42 0.5,0.5 0 0 0 -0.19,-0.44 1,1 0 0 0 -0.6,-0.14 h -1 z m 1.77,1.9 a 0.54,0.54 0 0 0 0.19,-0.46 0.56,0.56 0 0 0 -0.19,-0.47 1,1 0 0 0 -0.61,-0.15 H 38.23 V -99 h 1.12 A 1,1 0 0 0 40,-99.17 Z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1394" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 42.69,-98.35 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 H 43.6 v 1.12 h 1.73 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 H 43.6 V -99 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.17 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1396" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 51.73,-98.65 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.24,-0.07 0.44,0.44 0 0 1 -0.18,-0.21 l -0.36,-0.8 h -2.31 l -0.36,0.8 a 0.46,0.46 0 0 1 -0.17,0.21 0.45,0.45 0 0 1 -0.25,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.55,0.55 0 0 1 0.05,-0.22 l 1.84,-3.86 A 0.54,0.54 0 0 1 49,-103 a 0.64,0.64 0 0 1 0.32,-0.08 0.63,0.63 0 0 1 0.33,0.09 0.61,0.61 0 0 1 0.23,0.25 l 1.84,3.86 a 0.55,0.55 0 0 1 0.01,0.23 z m -3.23,-1.44 h 1.58 l -0.79,-1.77 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1398" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 53.64,-98.33 a 0.51,0.51 0 0 1 -0.15,-0.38 v -3.44 h -1.1 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.43 h 3.26 q 0.5,0 0.5,0.43 0,0.43 -0.5,0.44 h -1.1 v 3.44 a 0.51,0.51 0 0 1 -0.14,0.38 0.52,0.52 0 0 1 -0.39,0.14 0.53,0.53 0 0 1 -0.38,-0.14 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1400" /> | |||
</g> | |||
<g | |||
transform="matrix(0.26458684,0,0,0.26458333,-92.271107,71.566785)" | |||
id="g1410"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 42.67,-110.62 a 1.2,1.2 0 0 1 0.23,0.74 1.16,1.16 0 0 1 -0.45,1 1.92,1.92 0 0 1 -1.23,0.35 h -1.78 a 0.5,0.5 0 0 1 -0.37,-0.13 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.92,1.92 0 0 1 1.19,0.33 1.08,1.08 0 0 1 0.44,0.91 1.11,1.11 0 0 1 -0.2,0.66 1.14,1.14 0 0 1 -0.58,0.43 1.2,1.2 0 0 1 0.67,0.38 z M 40,-111.41 h 1 a 1,1 0 0 0 0.6,-0.14 0.49,0.49 0 0 0 0.19,-0.42 0.5,0.5 0 0 0 -0.19,-0.44 1,1 0 0 0 -0.6,-0.14 h -1 z m 1.73,1.89 a 0.54,0.54 0 0 0 0.19,-0.46 0.56,0.56 0 0 0 -0.19,-0.47 1,1 0 0 0 -0.61,-0.15 H 40 v 1.22 h 1.1 a 1,1 0 0 0 0.61,-0.14 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1404" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 48.83,-109 a 0.41,0.41 0 0 1 -0.15,0.32 0.52,0.52 0 0 1 -0.35,0.13 0.46,0.46 0 0 1 -0.24,-0.07 0.44,0.44 0 0 1 -0.18,-0.21 l -0.36,-0.8 h -2.31 l -0.36,0.8 a 0.46,0.46 0 0 1 -0.17,0.21 0.45,0.45 0 0 1 -0.25,0.07 0.53,0.53 0 0 1 -0.35,-0.13 0.41,0.41 0 0 1 -0.16,-0.32 0.55,0.55 0 0 1 0.05,-0.22 l 1.84,-3.86 a 0.53,0.53 0 0 1 0.23,-0.25 0.64,0.64 0 0 1 0.32,-0.08 0.63,0.63 0 0 1 0.33,0.09 0.61,0.61 0 0 1 0.23,0.25 l 1.84,3.86 a 0.55,0.55 0 0 1 0.04,0.21 z m -3.23,-1.44 h 1.58 l -0.79,-1.77 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1406" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 54.13,-108.94 a 0.38,0.38 0 0 1 -0.15,0.31 0.55,0.55 0 0 1 -0.36,0.12 0.55,0.55 0 0 1 -0.25,-0.06 0.51,0.51 0 0 1 -0.2,-0.19 l -0.9,-1.33 a 0.81,0.81 0 0 0 -0.25,-0.26 0.62,0.62 0 0 0 -0.33,-0.08 h -0.55 v 1.37 a 0.53,0.53 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.14 0.52,0.52 0 0 1 -0.39,-0.14 0.52,0.52 0 0 1 -0.14,-0.39 v -3.81 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.91,1.91 0 0 1 1.27,0.37 1.33,1.33 0 0 1 0.43,1.07 1.38,1.38 0 0 1 -0.31,0.92 1.47,1.47 0 0 1 -0.86,0.48 0.9,0.9 0 0 1 0.36,0.16 1.37,1.37 0 0 1 0.31,0.34 l 0.52,0.77 a 0.52,0.52 0 0 1 0.11,0.32 z m -1.33,-2.44 a 0.6,0.6 0 0 0 0.2,-0.5 0.6,0.6 0 0 0 -0.2,-0.5 1.09,1.09 0 0 0 -0.66,-0.16 h -1 v 1.32 h 1 a 1.08,1.08 0 0 0 0.66,-0.17 z" | |||
transform="translate(319.8,113.4)" | |||
style="fill:#fff8d5" | |||
id="path1408" /> | |||
</g> | |||
<g | |||
transform="translate(-7.0947387,-19.018031)" | |||
id="g1585"> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 24.369943,81.100698 c 0.388158,0 0.672808,-0.29328 0.672808,-0.651251 0,-0.357971 -0.280336,-0.64693 -0.668494,-0.64693 -0.388159,0 -0.668497,0.29328 -0.668497,0.64693 v 0.004 c 0,0.35796 0.280338,0.64693 0.664183,0.64693 z m 0.0043,-0.254461 c -0.219955,0 -0.37953,-0.181141 -0.37953,-0.39679 0,-0.215641 0.15526,-0.39247 0.375218,-0.39247 0.22427,0 0.383847,0.176829 0.383847,0.39247 v 0.004 c 0,0.215638 -0.155263,0.39247 -0.379535,0.39247 z m 0,0" | |||
id="path12074" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 25.869541,81.100698 c 0.340719,0 0.552048,-0.18977 0.552048,-0.569302 v -0.582239 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07763,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59518 c 0,0.19839 -0.103509,0.3019 -0.271709,0.3019 -0.168204,0 -0.271713,-0.10782 -0.271713,-0.310531 v -0.586549 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07332,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59087 c 0,0.370901 0.207018,0.560671 0.543422,0.560671 z m 0,0" | |||
id="path12070" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" | |||
d="m 27.047558,80.949748 c 0,0.0776 0.06038,0.138009 0.138012,0.138009 0.07763,0 0.138012,-0.0604 0.138012,-0.138009 v -0.871202 h 0.263087 c 0.07332,0 0.129386,-0.0561 0.129386,-0.129389 0,-0.069 -0.05607,-0.125071 -0.129386,-0.125071 H 26.78016 c -0.06901,0 -0.125072,0.0561 -0.125072,0.125071 0,0.0733 0.05607,0.129389 0.125072,0.129389 h 0.267398 z m 0,0" | |||
id="path12066" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
style="display:inline" | |||
id="g1402-7" | |||
transform="matrix(0.26458685,0,0,0.26458333,-78.616891,15.661774)"> | |||
<path | |||
id="path1396-6" | |||
style="fill:#fff8d5" | |||
d="m 355.21983,38.569752 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 h -1.87 v 1.12 h 1.73 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -1.73 v 1.25 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.17 z" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
style="display:inline" | |||
id="g1410-6" | |||
transform="matrix(0.26458685,0,0,0.26458333,-82.532815,21.138787)"> | |||
<path | |||
id="path1408-4" | |||
style="fill:#fff8d5" | |||
transform="translate(319.8,113.4)" | |||
d="m 54.13,-108.94 a 0.38,0.38 0 0 1 -0.15,0.31 0.55,0.55 0 0 1 -0.36,0.12 0.55,0.55 0 0 1 -0.25,-0.06 0.51,0.51 0 0 1 -0.2,-0.19 l -0.9,-1.33 a 0.81,0.81 0 0 0 -0.25,-0.26 0.62,0.62 0 0 0 -0.33,-0.08 h -0.55 v 1.37 a 0.53,0.53 0 0 1 -0.14,0.39 0.5,0.5 0 0 1 -0.38,0.14 0.52,0.52 0 0 1 -0.39,-0.14 0.52,0.52 0 0 1 -0.14,-0.39 v -3.81 a 0.5,0.5 0 0 1 0.13,-0.37 0.5,0.5 0 0 1 0.37,-0.13 h 1.71 a 1.91,1.91 0 0 1 1.27,0.37 1.33,1.33 0 0 1 0.43,1.07 1.38,1.38 0 0 1 -0.31,0.92 1.47,1.47 0 0 1 -0.86,0.48 0.9,0.9 0 0 1 0.36,0.16 1.37,1.37 0 0 1 0.31,0.34 l 0.52,0.77 a 0.52,0.52 0 0 1 0.11,0.32 z m -1.33,-2.44 a 0.6,0.6 0 0 0 0.2,-0.5 0.6,0.6 0 0 0 -0.2,-0.5 1.09,1.09 0 0 0 -0.66,-0.16 h -1 v 1.32 h 1 a 1.08,1.08 0 0 0 0.66,-0.17 z" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
id="g4047" | |||
transform="matrix(0.26458333,0,0,0.26458333,-529.28458,-305.03636)"> | |||
<path | |||
d="m 1691.49,689.94 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.45,0.45 0 0 1 0.5,-0.5 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 h -1.87 v 1.12 h 1.73 c 0.34,0 0.5,0.14 0.5,0.41 0,0.27 -0.17,0.41 -0.5,0.41 h -1.73 v 1.2 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.12 z" | |||
transform="translate(319.8,697.39)" | |||
style="fill:#fff7d4" | |||
id="path4041" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 1700,689.62 a 0.46,0.46 0 0 1 -0.15,0.34 0.49,0.49 0 0 1 -0.35,0.15 0.44,0.44 0 0 1 -0.35,-0.17 l -1.28,-1.56 -1.29,1.56 a 0.45,0.45 0 0 1 -0.35,0.17 0.48,0.48 0 0 1 -0.34,-0.15 0.46,0.46 0 0 1 -0.15,-0.34 0.48,0.48 0 0 1 0.12,-0.31 l 1.39,-1.66 -1.35,-1.61 a 0.47,0.47 0 0 1 -0.13,-0.31 0.46,0.46 0 0 1 0.15,-0.34 0.49,0.49 0 0 1 0.34,-0.15 0.45,0.45 0 0 1 0.35,0.18 l 1.24,1.5 1.23,-1.5 a 0.45,0.45 0 0 1 0.35,-0.18 0.48,0.48 0 0 1 0.34,0.15 0.46,0.46 0 0 1 0.15,0.34 0.47,0.47 0 0 1 -0.12,0.31 l -1.35,1.61 1.39,1.66 a 0.47,0.47 0 0 1 0.16,0.31 z" | |||
transform="translate(319.8,697.39)" | |||
style="fill:#fff7d4" | |||
id="path4043" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
d="m 1702.56,690 a 0.51,0.51 0 0 1 -0.15,-0.38 v -3.44 h -1.1 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.43 h 3.26 q 0.5,0 0.5,0.43 0,0.43 -0.5,0.44 h -1.1 v 3.44 a 0.51,0.51 0 0 1 -0.14,0.38 0.59,0.59 0 0 1 -0.77,0 z" | |||
transform="translate(319.8,697.39)" | |||
style="fill:#fff7d4" | |||
id="path4045" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1257" | |||
d="M 8.3022408,56.121514 H 15.510259" | |||
style="display:inline;fill:none;fill-opacity:1;stroke:#fff7d4;stroke-width:0.13229167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" | |||
sodipodi:nodetypes="cc" /> | |||
<g | |||
transform="matrix(0.26458333,0,0,0.26458333,-529.28458,-314.96631)" | |||
id="g1265"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1259" | |||
style="fill:#fff7d4" | |||
transform="translate(319.8,697.39)" | |||
d="m 1691.49,689.94 a 0.5,0.5 0 0 1 -0.13,-0.37 v -3.8 a 0.45,0.45 0 0 1 0.5,-0.5 h 2.41 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.42 h -1.87 v 1.12 h 1.73 c 0.34,0 0.5,0.14 0.5,0.41 0,0.27 -0.17,0.41 -0.5,0.41 h -1.73 v 1.2 h 1.87 q 0.5,0 0.5,0.41 0,0.41 -0.5,0.41 h -2.41 a 0.5,0.5 0 0 1 -0.37,-0.12 z" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1261" | |||
style="fill:#fff7d4" | |||
transform="translate(319.8,697.39)" | |||
d="m 1700,689.62 a 0.46,0.46 0 0 1 -0.15,0.34 0.49,0.49 0 0 1 -0.35,0.15 0.44,0.44 0 0 1 -0.35,-0.17 l -1.28,-1.56 -1.29,1.56 a 0.45,0.45 0 0 1 -0.35,0.17 0.48,0.48 0 0 1 -0.34,-0.15 0.46,0.46 0 0 1 -0.15,-0.34 0.48,0.48 0 0 1 0.12,-0.31 l 1.39,-1.66 -1.35,-1.61 a 0.47,0.47 0 0 1 -0.13,-0.31 0.46,0.46 0 0 1 0.15,-0.34 0.49,0.49 0 0 1 0.34,-0.15 0.45,0.45 0 0 1 0.35,0.18 l 1.24,1.5 1.23,-1.5 a 0.45,0.45 0 0 1 0.35,-0.18 0.48,0.48 0 0 1 0.34,0.15 0.46,0.46 0 0 1 0.15,0.34 0.47,0.47 0 0 1 -0.12,0.31 l -1.35,1.61 1.39,1.66 a 0.47,0.47 0 0 1 0.16,0.31 z" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path1263" | |||
style="fill:#fff7d4" | |||
transform="translate(319.8,697.39)" | |||
d="m 1702.56,690 a 0.51,0.51 0 0 1 -0.15,-0.38 v -3.44 h -1.1 q -0.5,0 -0.5,-0.44 0,-0.44 0.5,-0.43 h 3.26 q 0.5,0 0.5,0.43 0,0.43 -0.5,0.44 h -1.1 v 3.44 a 0.51,0.51 0 0 1 -0.14,0.38 0.59,0.59 0 0 1 -0.77,0 z" /> | |||
</g> | |||
<g | |||
id="g963" | |||
transform="translate(-7.0947387,-28.947975)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path957" | |||
d="m 24.369943,81.100698 c 0.388158,0 0.672808,-0.29328 0.672808,-0.651251 0,-0.357971 -0.280336,-0.64693 -0.668494,-0.64693 -0.388159,0 -0.668497,0.29328 -0.668497,0.64693 v 0.004 c 0,0.35796 0.280338,0.64693 0.664183,0.64693 z m 0.0043,-0.254461 c -0.219955,0 -0.37953,-0.181141 -0.37953,-0.39679 0,-0.215641 0.15526,-0.39247 0.375218,-0.39247 0.22427,0 0.383847,0.176829 0.383847,0.39247 v 0.004 c 0,0.215638 -0.155263,0.39247 -0.379535,0.39247 z m 0,0" | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path959" | |||
d="m 25.869541,81.100698 c 0.340719,0 0.552048,-0.18977 0.552048,-0.569302 v -0.582239 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07763,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59518 c 0,0.19839 -0.103509,0.3019 -0.271709,0.3019 -0.168204,0 -0.271713,-0.10782 -0.271713,-0.310531 v -0.586549 c 0,-0.0776 -0.06038,-0.138009 -0.138012,-0.138009 -0.07332,0 -0.138012,0.0604 -0.138012,0.138009 v 0.59087 c 0,0.370901 0.207018,0.560671 0.543422,0.560671 z m 0,0" | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path961" | |||
d="m 27.047558,80.949748 c 0,0.0776 0.06038,0.138009 0.138012,0.138009 0.07763,0 0.138012,-0.0604 0.138012,-0.138009 v -0.871202 h 0.263087 c 0.07332,0 0.129386,-0.0561 0.129386,-0.129389 0,-0.069 -0.05607,-0.125071 -0.129386,-0.125071 H 26.78016 c -0.06901,0 -0.125072,0.0561 -0.125072,0.125071 0,0.0733 0.05607,0.129389 0.125072,0.129389 h 0.267398 z m 0,0" | |||
style="display:inline;fill:#fff7d4;fill-opacity:1;stroke:none;stroke-width:0.2330292" /> | |||
</g> | |||
<path | |||
sodipodi:nodetypes="cc" | |||
style="display:inline;fill:none;fill-opacity:1;stroke:#fff7d4;stroke-width:0.13229167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" | |||
d="M 8.3022407,66.504514 H 15.510259" | |||
id="path965" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</svg> |
@@ -0,0 +1,145 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
id="svg8" | |||
viewBox="0 0 60 380" | |||
version="1.1" | |||
sodipodi:docname="BlankPanel4.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
width="60" | |||
height="380"> | |||
<metadata | |||
id="metadata39"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title>BlankPanel8</dc:title> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1372" | |||
inkscape:window-height="1231" | |||
id="namedview37" | |||
showgrid="false" | |||
inkscape:zoom="1.9612909" | |||
inkscape:cx="-84.198267" | |||
inkscape:cy="120.36804" | |||
inkscape:window-x="89" | |||
inkscape:window-y="125" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg8" /> | |||
<defs | |||
id="defs4"> | |||
<style | |||
id="style2">.cls-1{fill:#ab2d2d;}.cls-2{fill:#952d2d;}.cls-3{fill:#251e1e;}.cls-4{fill:#fff7d4;}.cls-5{fill:#202020;}</style> | |||
</defs> | |||
<title | |||
id="title6">BlankPanel8</title> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#44423e;fill-opacity:1;stroke:none;stroke-width:0.68849927;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1709" | |||
width="60" | |||
height="380" | |||
x="0" | |||
y="0" /> | |||
<g | |||
transform="matrix(7.9299111,0,0,7.9299111,-445.58996,-2669.2158)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /> | |||
</g> | |||
</g> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.68849927;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1759" | |||
width="60" | |||
height="15" | |||
x="0" | |||
y="365" /> | |||
<rect | |||
y="0" | |||
x="0" | |||
height="15" | |||
width="60" | |||
id="rect1806" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.68849927;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<circle | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.74390346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="path1686" | |||
cx="30" | |||
cy="359.88184" | |||
r="15.118111" /> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_2-2" | |||
data-name="Layer 2" | |||
transform="matrix(0.66602928,0,0,0.66602928,-9.9445641,118.99293)"> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_1-2-6" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path8-4-6" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
<g | |||
transform="scale(3.7795276)" | |||
id="g1486"> | |||
<path | |||
style="fill:#251e1e;fill-opacity:1;stroke-width:0.26458335" | |||
d="M 1.5406693,0.7410401 V 3.2385622 H 2.7333615 C 3.4623855,3.2776139 4.0851679,2.7185244 4.1250078,1.9895428 4.085169,1.2605618 3.4623855,0.70198842 2.7333615,0.7410401 Z" | |||
id="rect861-6" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
id="path912" | |||
d="m 1.540669,97.440866 v 2.497523 h 1.192693 c 0.729024,0.03905 1.351806,-0.520038 1.391646,-1.24902 -0.03984,-0.728981 -0.662622,-1.287554 -1.391646,-1.248503 z" | |||
style="fill:#251e1e;fill-opacity:1;stroke-width:0.26458335" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
transform="scale(3.7795276)" | |||
id="g1490"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path918" | |||
d="M 14.331839,0.74104081 V 3.2385629 H 13.139146 C 12.410122,3.2776147 11.78734,2.7185251 11.7475,1.9895435 11.78734,1.2605625 12.410122,0.70198913 13.139146,0.74104081 Z" | |||
style="fill:#251e1e;fill-opacity:1;stroke-width:0.26458335" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#251e1e;fill-opacity:1;stroke-width:0.26458335" | |||
d="m 14.331839,97.440867 v 2.497523 h -1.192693 c -0.729024,0.03905 -1.351806,-0.520038 -1.391646,-1.24902 0.03984,-0.728981 0.662622,-1.287554 1.391646,-1.248503 z" | |||
id="path920" /> | |||
</g> | |||
</svg> |
@@ -0,0 +1,146 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
id="svg8" | |||
width="89.99999" | |||
height="380.00004" | |||
viewBox="0 0 89.99999 380.00004" | |||
version="1.1" | |||
sodipodi:docname="BlankPanel6.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||
<metadata | |||
id="metadata29"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<defs | |||
id="defs27" /> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1528" | |||
inkscape:window-height="1099" | |||
id="namedview25" | |||
showgrid="false" | |||
inkscape:zoom="1.83529" | |||
inkscape:cx="-57.573167" | |||
inkscape:cy="169.06781" | |||
inkscape:window-x="0" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg8" /> | |||
<title | |||
id="title2">MyModule</title> | |||
<path | |||
style="opacity:1;vector-effect:none;fill:#44423e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.83711767;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
d="M 0,1.4017578e-5 H 90 V 380.00003 H 0 Z" | |||
id="rect817" | |||
inkscape:connector-curvature="0" /> | |||
<g | |||
transform="matrix(7.9299111,0,0,7.9299111,-430.58996,-2669.2158)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /> | |||
</g> | |||
</g> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.84323591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1759" | |||
width="90" | |||
height="15" | |||
x="-3.8146973e-06" | |||
y="365.00003" /> | |||
<rect | |||
y="0" | |||
x="-3.8146973e-06" | |||
height="15" | |||
width="90" | |||
id="rect1806" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.84323591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
id="g850"> | |||
<rect | |||
ry="5.2628322" | |||
y="2.8032005" | |||
x="13.243464" | |||
height="9.4488192" | |||
width="18.897638" | |||
id="rect861" | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.57401633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.57401633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect863" | |||
width="18.897638" | |||
height="9.4488192" | |||
x="13.243464" | |||
y="368.28357" | |||
ry="5.2628322" /> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.57401633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1497" | |||
width="18.897638" | |||
height="9.4488192" | |||
x="59.243465" | |||
y="2.8032005" | |||
ry="5.2628322" /> | |||
<rect | |||
ry="5.2628322" | |||
y="368.28357" | |||
x="59.243465" | |||
height="9.4488192" | |||
width="18.897638" | |||
id="rect1499" | |||
style="opacity:1;vector-effect:none;fill:#251e1e;fill-opacity:1;stroke:none;stroke-width:0.57401633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
</g> | |||
<circle | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.74390346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="path1686" | |||
cx="44.999996" | |||
cy="359.88187" | |||
r="15.118111" /> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_2-2" | |||
data-name="Layer 2" | |||
transform="matrix(0.66602928,0,0,0.66602928,5.0554325,118.99296)"> | |||
<g | |||
style="fill:#fff7d4;fill-opacity:1" | |||
id="Layer_1-2-6" | |||
data-name="Layer 1-2"> | |||
<path | |||
id="path8-4-6" | |||
class="cls-4" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
inkscape:connector-curvature="0" | |||
style="fill:#fff7d4;fill-opacity:1" /> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,149 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
id="svg8" | |||
viewBox="0 0 120 380" | |||
version="1.1" | |||
sodipodi:docname="BlankPanel8.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||
<metadata | |||
id="metadata39"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1845" | |||
inkscape:window-height="1348" | |||
id="namedview37" | |||
showgrid="false" | |||
inkscape:zoom="2.3333333" | |||
inkscape:cx="6.857143" | |||
inkscape:cy="128.92858" | |||
inkscape:window-x="-32" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg8" /> | |||
<defs | |||
id="defs4"> | |||
<style | |||
id="style2">.cls-1{fill:#ab2d2d;}.cls-2{fill:#952d2d;}.cls-3{fill:#251e1e;}.cls-4{fill:#fff7d4;}.cls-5{fill:#202020;}</style> | |||
</defs> | |||
<title | |||
id="title6">BlankPanel8</title> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#44423e;fill-opacity:1;stroke:none;stroke-width:0.97368497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1709" | |||
width="120" | |||
height="380" | |||
x="0" | |||
y="0" /> | |||
<g | |||
transform="matrix(7.9299111,0,0,7.9299111,-415.58996,-2669.2158)" | |||
data-name="Layer 2" | |||
id="g1661" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="g1659" | |||
style="fill:#3c3835;fill-opacity:1"> | |||
<path | |||
style="fill:#3c3835;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path1657" /> | |||
</g> | |||
</g> | |||
<rect | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.97368497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
id="rect1759" | |||
width="120" | |||
height="15" | |||
x="0" | |||
y="365" /> | |||
<rect | |||
y="0" | |||
x="0" | |||
height="15" | |||
width="120" | |||
id="rect1806" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.97368497;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
id="g1810"> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 18.51,2.7999981 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 A 5,5 0 0 1 26.88,12.239998 H 18.51 A 5,5 0 0 1 13.25,7.5199981 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect861" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 18.51,368.28 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.72 H 18.51 A 5,5 0 0 1 13.24,373 v 0 a 5,5 0 0 1 5.27,-4.72 z" | |||
class="cls-3" | |||
id="rect863" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
id="g1814"> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 93.31,2.7999981 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.7199999 H 93.31 A 5,5 0 0 1 88.05,7.5199981 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect1497" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="fill:#202020;fill-opacity:1" | |||
d="m 93.31,368.28 h 8.37 a 5,5 0 0 1 5.26,4.72 v 0 a 5,5 0 0 1 -5.26,4.72 H 93.31 A 5,5 0 0 1 88.05,373 v 0 a 5,5 0 0 1 5.26,-4.72 z" | |||
class="cls-3" | |||
id="rect1499" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
style="display:inline" | |||
transform="translate(15.000011,-4.7631836e-6)" | |||
id="g1614"> | |||
<circle | |||
r="15.118111" | |||
cy="359.88181" | |||
cx="44.999989" | |||
id="path1686" | |||
style="opacity:1;vector-effect:none;fill:#3c3835;fill-opacity:1;stroke:none;stroke-width:0.74390346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
<g | |||
transform="matrix(0.66602928,0,0,0.66602928,5.0554261,118.9929)" | |||
data-name="Layer 2" | |||
id="Layer_2-2" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<g | |||
data-name="Layer 1-2" | |||
id="Layer_1-2-6" | |||
style="fill:#fff7d4;fill-opacity:1"> | |||
<path | |||
style="fill:#fff7d4;fill-opacity:1" | |||
inkscape:connector-curvature="0" | |||
d="m 71.31,357 a 0.91,0.91 0 0 0 -0.41,-0.53 0.77,0.77 0 0 0 -0.64,-0.1 0.91,0.91 0 0 0 -0.53,0.41 43.94,43.94 0 0 1 -3.33,5.08 21.5,21.5 0 0 1 -2.08,-6.45 v -0.39 l 2,-2.81 c 0.24,-0.34 1.26,-1.56 -0.78,-2.45 a 3.15,3.15 0 0 0 -2.36,0.07 c -2.32,1 -1.92,4.26 -1.85,4.79 q 0,0.31 0.09,0.62 l -3.78,6.22 c 0,0 0.49,-3.26 0.58,-3.85 A 1.36,1.36 0 0 0 57.1,356 c -1,-0.24 -1.61,0.06 -2.27,2.65 -0.56,2.19 -2.54,7.64 -3.86,7.6 -0.78,0 -0.24,-3.41 0.68,-5.87 1.12,-2.95 3.78,-7 6.78,-8.83 0.69,-0.43 1.6,-1.5 0.66,-2.56 -1.19,-1.34 -2.46,-0.28 -3,0.13 a 14.68,14.68 0 0 0 -3.49,4.35 22.82,22.82 0 0 0 -2.81,6.33 c -1,3.25 -2.07,8.54 0.1,8.74 3,0.27 5.39,-5.56 5.39,-5.56 0,0 -0.13,3.05 1.4,3.13 1.53,0.08 4.51,-5.9 5.36,-7.92 a 22.36,22.36 0 0 0 2.5,5.55 2.87,2.87 0 0 1 0.14,0.39 c -0.34,0.47 -3.77,4.86 -4.77,7.5 a 0.82,0.82 0 0 0 0,0.72 0.79,0.79 0 0 0 0.5,0.42 1.12,1.12 0 0 0 0.74,-0.12 5.53,5.53 0 0 0 0.66,-0.35 c 4.83,-2.78 5.52,-6 5.17,-8.48 a 2.08,2.08 0 0 1 0.26,-0.4 42.2,42.2 0 0 0 3.89,-5.77 0.76,0.76 0 0 0 0.18,-0.65 z" | |||
class="cls-4" | |||
id="path8-4-6" /> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@@ -0,0 +1,484 @@ | |||
<svg xmlns="http://www.w3.org/2000/svg" width="120.46" height="380" viewBox="0 0 120.46 380"> | |||
<title>as-BlankPanelSpecial3</title> | |||
<g id="Layer_1" data-name="Layer 1"> | |||
<g> | |||
<rect id="rect1709" x="0.34" width="120" height="380" style="fill: #333;opacity: 0.5"/> | |||
<g> | |||
<rect id="rect1709-2" x="0.46" y="226.13" width="120" height="1.26" style="fill: #2b2c2b"/> | |||
<rect id="rect1709-3" x="0.46" y="224.92" width="120" height="1.26" style="fill: #252624"/> | |||
<rect id="rect1709-4" x="0.46" y="223.63" width="120" height="1.26" style="fill: #1e1d1d"/> | |||
<rect id="rect1709-5" x="0.46" y="222.35" width="120" height="1.26" style="fill: #191818"/> | |||
</g> | |||
<rect x="0.34" y="147.67" width="119.87" height="74.67" style="fill: #034732"/> | |||
<rect id="rect1806-5" x="0.34" y="165.43" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-6" x="0.34" y="170.84" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-7" x="0.34" y="176.25" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-8" x="0.34" y="181.66" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-9" x="0.34" y="187.07" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-10" x="0.34" y="192.48" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-11" x="0.34" y="197.89" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<rect id="rect1806-12" x="0.34" y="203.3" width="119.97" height="1.02" style="fill: #0e3e1f"/> | |||
<g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 164.53 32.82 163.14 30.48 164.42 30.42 167.09 32.7 168.48 35.03 167.2 35.1 164.53" style="fill: #2d2929"/> | |||
<circle cx="32.44" cy="165.8" r="0.77" transform="translate(-125.73 107.32) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 164.53 37.51 163.14 35.17 164.42 35.1 167.09 37.38 168.48 39.72 167.2 39.79 164.53" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="165.8" r="0.77" transform="translate(-123.48 111.33) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 169.96 32.82 168.57 30.48 169.85 30.42 172.52 32.7 173.91 35.03 172.63 35.1 169.96" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="171.23" r="0.77" transform="translate(-130.37 109.93) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 169.96 37.51 168.57 35.17 169.85 35.1 172.52 37.38 173.91 39.72 172.63 39.79 169.96" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="171.23" r="0.77" transform="translate(-128.12 113.94) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 175.39 32.82 174.01 30.48 175.29 30.42 177.95 32.7 179.34 35.03 178.06 35.1 175.39" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="176.66" r="0.77" transform="translate(-135.01 112.54) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 175.39 37.51 174.01 35.17 175.29 35.1 177.95 37.38 179.34 39.72 178.06 39.79 175.39" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="176.66" r="0.77" transform="translate(-132.75 116.54) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 180.83 32.82 179.44 30.48 180.72 30.42 183.39 32.7 184.77 35.03 183.49 35.1 180.83" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="182.1" r="0.77" transform="translate(-139.66 115.15) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 180.83 37.51 179.44 35.17 180.72 35.1 183.39 37.38 184.77 39.72 183.49 39.79 180.83" style="fill: #2d2929"/> | |||
<circle cx="37.13" cy="182.09" r="0.77" transform="translate(-137.4 119.16) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 186.26 32.82 184.87 30.48 186.15 30.42 188.82 32.7 190.21 35.03 188.93 35.1 186.26" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="187.53" r="0.77" transform="translate(-144.3 117.75) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 186.26 37.51 184.87 35.17 186.15 35.1 188.82 37.38 190.21 39.72 188.93 39.79 186.26" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="187.53" r="0.77" transform="translate(-142.04 121.75) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 191.69 32.82 190.31 30.48 191.59 30.42 194.25 32.7 195.64 35.03 194.36 35.1 191.69" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="192.95" r="0.77" transform="translate(-148.93 120.36) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 191.69 37.51 190.31 35.17 191.59 35.1 194.25 37.38 195.64 39.72 194.36 39.79 191.69" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="192.96" r="0.77" transform="translate(-146.68 124.36) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 197.12 32.82 195.74 30.48 197.02 30.42 199.68 32.7 201.07 35.03 199.79 35.1 197.12" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="198.39" r="0.77" transform="translate(-153.57 122.96) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 197.12 37.51 195.74 35.17 197.02 35.1 199.68 37.38 201.07 39.72 199.79 39.79 197.12" style="fill: #2d2929"/> | |||
<circle cx="37.11" cy="198.39" r="0.77" transform="translate(-151.33 126.97) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="35.1 202.56 32.82 201.17 30.48 202.45 30.42 205.12 32.7 206.5 35.03 205.22 35.1 202.56" style="fill: #2d2929"/> | |||
<circle cx="32.43" cy="203.83" r="0.77" transform="translate(-158.22 125.58) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="39.79 202.56 37.51 201.17 35.17 202.45 35.1 205.12 37.38 206.5 39.72 205.22 39.79 202.56" style="fill: #2d2929"/> | |||
<circle cx="37.12" cy="203.83" r="0.77" transform="translate(-155.97 129.59) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 164.53 82.32 163.14 79.98 164.42 79.92 167.09 82.19 168.48 84.53 167.2 84.6 164.53" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="165.8" r="0.77" transform="translate(-101.97 149.6) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 164.53 87.01 163.14 84.67 164.42 84.61 167.09 86.88 168.48 89.22 167.2 89.29 164.53" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="165.79" r="0.77" transform="translate(-99.7 153.61) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 169.96 82.32 168.57 79.98 169.85 79.92 172.52 82.19 173.91 84.53 172.63 84.6 169.96" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="171.23" r="0.77" transform="translate(-106.61 152.21) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 169.96 87.01 168.57 84.67 169.85 84.61 172.52 86.88 173.91 89.22 172.63 89.29 169.96" style="fill: #2d2929"/> | |||
<circle cx="86.61" cy="171.23" r="0.77" transform="translate(-104.35 156.21) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 175.39 82.32 174.01 79.98 175.29 79.92 177.95 82.19 179.34 84.53 178.06 84.6 175.39" style="fill: #2d2929"/> | |||
<circle cx="81.92" cy="176.66" r="0.77" transform="translate(-111.24 154.81) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 175.39 87.01 174.01 84.67 175.29 84.61 177.95 86.88 179.34 89.22 178.06 89.29 175.39" style="fill: #2d2929"/> | |||
<circle cx="86.61" cy="176.66" r="0.77" transform="translate(-108.99 158.82) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 180.83 82.32 179.44 79.98 180.72 79.92 183.39 82.19 184.77 84.53 183.49 84.6 180.83" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="182.09" r="0.77" transform="translate(-115.88 157.43) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 180.83 87.01 179.44 84.67 180.72 84.61 183.39 86.88 184.77 89.22 183.49 89.29 180.83" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="182.1" r="0.77" transform="translate(-113.63 161.44) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 186.26 82.32 184.87 79.98 186.15 79.92 188.82 82.19 190.21 84.53 188.93 84.6 186.26" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="187.53" r="0.77" transform="translate(-120.52 160.04) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 186.26 87.01 184.87 84.67 186.15 84.61 188.82 86.88 190.21 89.22 188.93 89.29 186.26" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="187.53" r="0.77" transform="translate(-118.28 164.04) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 191.69 82.32 190.31 79.98 191.59 79.92 194.25 82.19 195.64 84.53 194.36 84.6 191.69" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="192.96" r="0.77" transform="translate(-125.17 162.64) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 191.69 87.01 190.31 84.67 191.59 84.61 194.25 86.88 195.64 89.22 194.36 89.29 191.69" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="192.96" r="0.77" transform="translate(-122.92 166.65) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 197.12 82.32 195.74 79.98 197.02 79.92 199.68 82.19 201.07 84.53 199.79 84.6 197.12" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="198.39" r="0.77" transform="translate(-129.81 165.25) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 197.12 87.01 195.74 84.67 197.02 84.61 199.68 86.88 201.07 89.22 199.79 89.29 197.12" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="198.38" r="0.77" transform="translate(-127.55 169.25) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="84.6 202.56 82.32 201.17 79.98 202.45 79.92 205.12 82.19 206.5 84.53 205.22 84.6 202.56" style="fill: #2d2929"/> | |||
<circle cx="81.93" cy="203.83" r="0.77" transform="translate(-134.45 167.87) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
<g> | |||
<polygon points="89.29 202.56 87.01 201.17 84.67 202.45 84.61 205.12 86.88 206.5 89.22 205.22 89.29 202.56" style="fill: #2d2929"/> | |||
<circle cx="86.62" cy="203.82" r="0.77" transform="translate(-132.19 171.87) rotate(-58.68)" style="fill: #bb9965"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<path d="M45.6,165.23a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.17.69.69,0,0,1-.24.11,2.88,2.88,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.92,1.51,1.51,0,0,1,.62-.63,2,2,0,0,1,1-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.75,1.75,0,0,0-.38-.19,1.3,1.3,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.07v-.78h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,45.6,165.23Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M50.17,166.79a.3.3,0,0,1-.11.24.38.38,0,0,1-.26.1.33.33,0,0,1-.18-.05.32.32,0,0,1-.13-.16l-.27-.59H47.53l-.27.59a.32.32,0,0,1-.31.21.39.39,0,0,1-.26-.1.3.3,0,0,1-.12-.24.39.39,0,0,1,0-.16L48,163.79a.4.4,0,0,1,.17-.18.47.47,0,0,1,.48,0,.44.44,0,0,1,.17.18l1.35,2.83C50.18,166.68,50.22,166.74,50.17,166.79Zm-2.37-1.05H49l-.58-1.3Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M51.57,167a.37.37,0,0,1-.11-.28v-2.53h-.81c-.25,0-.37-.11-.37-.32s.12-.32.37-.32H53c.25,0,.37.11.37.32s-.12.32-.37.32h-.81v2.53a.38.38,0,0,1-.1.28A.44.44,0,0,1,51.57,167Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M54.36,167a.36.36,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.29-.37H56.4c.25,0,.37.1.37.3s-.12.31-.37.31H55V165h1.27c.25,0,.37.1.37.31s-.12.3-.37.3H55v.88h1.4c.25,0,.37.1.37.31s-.12.3-.37.3H54.63A.36.36,0,0,1,54.36,167Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M43.37,172.48a1.48,1.48,0,0,1-.6-.63,2.29,2.29,0,0,1,0-1.92,1.49,1.49,0,0,1,.6-.63,2,2,0,0,1,2,.14.37.37,0,0,1,.1.12.32.32,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.18.09H45.1L45,170a1.65,1.65,0,0,0-.37-.19,1.11,1.11,0,0,0-.37-.06.87.87,0,0,0-.72.3,1.38,1.38,0,0,0-.24.89q0,1.19,1,1.19a1.06,1.06,0,0,0,.35-.06,2.31,2.31,0,0,0,.38-.19l.13-.06h.12a.22.22,0,0,1,.18.09.36.36,0,0,1,.07.22.33.33,0,0,1,0,.15.37.37,0,0,1-.1.12,2,2,0,0,1-2,.14Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M49.18,169.15a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.24.36.36,0,0,1,0,.15l-1.35,2.85a.39.39,0,0,1-.17.18.49.49,0,0,1-.48,0,.39.39,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.14.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.36.36,0,0,1,.19.05.33.33,0,0,1,.13.16l1,2.34,1-2.34A.33.33,0,0,1,49.18,169.15Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M45,176.59a.24.24,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7v.71a.24.24,0,0,1-.07.18.28.28,0,0,1-.37,0,.25.25,0,0,1-.08-.18V177h-.7a.26.26,0,0,1-.26-.26.24.24,0,0,1,.08-.18.25.25,0,0,1,.18-.07h.7v-.71a.26.26,0,0,1,.52,0s0,0,0,0v.71h.7A.25.25,0,0,1,45,176.59Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M48.1,176.07a1,1,0,0,1,.4.4,1.22,1.22,0,0,1,.14.59,1.16,1.16,0,0,1-.17.62,1.12,1.12,0,0,1-.46.42,1.52,1.52,0,0,1-.69.15,2,2,0,0,1-.61-.09,1.62,1.62,0,0,1-.51-.26.34.34,0,0,1-.11-.12.62.62,0,0,1,.07-.37.22.22,0,0,1,.18-.09h.11l.13.06a2.72,2.72,0,0,0,.37.19.93.93,0,0,0,.36.07.67.67,0,0,0,.46-.14.52.52,0,0,0,.16-.42.53.53,0,0,0-.16-.41.62.62,0,0,0-.44-.15,1.06,1.06,0,0,0-.31,0,1.38,1.38,0,0,0-.31.14.42.42,0,0,1-.21.06.29.29,0,0,1-.2-.07.24.24,0,0,1-.08-.19V175a.33.33,0,0,1,.3-.36h1.67c.25,0,.37.1.37.29s-.12.3-.37.3H47V176a1.13,1.13,0,0,1,.56-.13A1.17,1.17,0,0,1,48.1,176.07Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M52.34,174.71a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15L51.53,178a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.15.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.32.32,0,0,1,.13.16l1.07,2.34,1.07-2.34A.33.33,0,0,1,52.34,174.71Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M45,182.15a.25.25,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7v.7a.24.24,0,0,1-.07.18.26.26,0,0,1-.19.07.25.25,0,0,1-.18-.07.24.24,0,0,1-.08-.18v-.7h-.7a.26.26,0,0,1-.26-.26.25.25,0,0,1,.08-.18.26.26,0,0,1,.18-.07h.7v-.71a.26.26,0,0,1,.26-.26.26.26,0,0,1,.26.26v.71h.7A.26.26,0,0,1,45,182.15Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M48.7,183.45q0,.31-.37.32h-1.7q-.37,0-.37-.32t.37-.31h.46v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24.29.29,0,0,1,.15-.26l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54h.46Q48.7,183.14,48.7,183.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M52.14,183.45q0,.31-.37.32H49.91a.34.34,0,0,1-.25-.09.31.31,0,0,1-.09-.23.47.47,0,0,1,.15-.33l1.1-1.17a1.1,1.1,0,0,0,.37-.72.4.4,0,0,0-.12-.31.47.47,0,0,0-.33-.11.93.93,0,0,0-.35.06,3,3,0,0,0-.37.19l-.13.07h-.1a.22.22,0,0,1-.18-.1.36.36,0,0,1-.08-.23.33.33,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.94,1.94,0,0,1,1.1-.36,1.51,1.51,0,0,1,.62.12.94.94,0,0,1,.41.34.92.92,0,0,1,.15.51,1.26,1.26,0,0,1-.13.57,2.48,2.48,0,0,1-.43.58l-.79.83h1.16Q52.14,183.14,52.14,183.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M55.84,180.26a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15L55,183.55a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.14.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.33.33,0,0,1,.13.16l1.07,2.34,1.07-2.34A.34.34,0,0,1,55.84,180.26Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M45.6,187.45a.28.28,0,0,1,.08.21v1a1.17,1.17,0,0,1,0,.31.35.35,0,0,1-.11.17.71.71,0,0,1-.24.11,2.89,2.89,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.93,1.5,1.5,0,0,1,.62-.63,2,2,0,0,1,1-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.36.36,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.71,1.71,0,0,0-.38-.19,1.27,1.27,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.31,2.31,0,0,0,.58-.07v-.78h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,45.6,187.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M49.8,185.88a.38.38,0,0,1,.1.28V189a.39.39,0,0,1-.1.28.39.39,0,0,1-.56,0l-1.67-2.14V189a.4.4,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.8a.38.38,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13L49.18,188v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.35.35,0,0,1,49.8,185.88Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M51.2,189.22a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.3-.36h1.07a2.16,2.16,0,0,1,1,.21,1.47,1.47,0,0,1,.63.61,1.91,1.91,0,0,1,.22.94,2,2,0,0,1-.22.95,1.46,1.46,0,0,1-.63.61,2.19,2.19,0,0,1-1,.21h-1A.37.37,0,0,1,51.2,189.22Zm1.22-.53a1.14,1.14,0,1,0,0-2.27h-.54v2.27Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M45.6,193a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.18.69.69,0,0,1-.24.11,2.77,2.77,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.93,1.5,1.5,0,0,1,.62-.63,2,2,0,0,1,1-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.36.36,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.07a1.7,1.7,0,0,0-.38-.18,1.27,1.27,0,0,0-.38-.06q-1,0-1,1.19a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.08v-.77h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,45.6,193Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M49.8,191.43a.39.39,0,0,1,.1.28v2.81a.39.39,0,0,1-.1.28.39.39,0,0,1-.56,0l-1.67-2.15v1.89a.41.41,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.81a.39.39,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13l1.67,2.13v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.36.36,0,0,1,49.8,191.43Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M51.2,194.78a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.3-.36h1.07a2.16,2.16,0,0,1,1,.21,1.47,1.47,0,0,1,.63.6,1.92,1.92,0,0,1,.22.95,2,2,0,0,1-.22.95,1.45,1.45,0,0,1-.63.61,2.17,2.17,0,0,1-1,.21h-1A.37.37,0,0,1,51.2,194.78Zm1.22-.54a1.13,1.13,0,0,0,0-2.26h-.54v2.26Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M45.6,198.56a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.17.69.69,0,0,1-.24.11,2.88,2.88,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.92,1.51,1.51,0,0,1,.62-.63,2,2,0,0,1,1-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.75,1.75,0,0,0-.38-.19,1.3,1.3,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.07V199h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,45.6,198.56Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M49.8,197a.38.38,0,0,1,.1.28v2.8a.39.39,0,0,1-.1.28.35.35,0,0,1-.27.11.36.36,0,0,1-.29-.13l-1.67-2.14v1.88a.4.4,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.8A.38.38,0,0,1,47,197a.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13l1.67,2.13v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.35.35,0,0,1,49.8,197Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M51.2,200.33a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.28-.37h1.09a2.18,2.18,0,0,1,1,.21,1.47,1.47,0,0,1,.63.61,1.91,1.91,0,0,1,.22.94,2,2,0,0,1-.22.95,1.46,1.46,0,0,1-.63.61,2.19,2.19,0,0,1-1,.21h-1A.37.37,0,0,1,51.2,200.33Zm1.22-.53a1.14,1.14,0,0,0,0-2.27h-.54v2.27Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M42.56,204.64c0-.2.12-.29.36-.29h1c.24,0,.36.1.36.29s-.12.29-.36.29h-1Q42.56,204.94,42.56,204.64Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M47.9,205.67c0,.21-.12.32-.37.32h-1.7q-.37,0-.37-.32t.37-.31h.47v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24.29.29,0,0,1,.16-.26l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54h.46C47.78,205.36,47.9,205.46,47.9,205.67Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M51.34,205.67c0,.21-.12.32-.37.32H49.11a.33.33,0,0,1-.25-.09.31.31,0,0,1-.09-.23.46.46,0,0,1,.14-.33l1.1-1.17a1.11,1.11,0,0,0,.37-.72.41.41,0,0,0-.12-.31.47.47,0,0,0-.33-.11.92.92,0,0,0-.35.06,2.87,2.87,0,0,0-.37.19l-.13.07H49a.22.22,0,0,1-.18-.1.36.36,0,0,1-.08-.23.34.34,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.86,1.86,0,0,1,.52-.26,1.84,1.84,0,0,1,.59-.1,1.5,1.5,0,0,1,.62.12.93.93,0,0,1,.41.34.92.92,0,0,1,.14.51,1.26,1.26,0,0,1-.1.64,2.48,2.48,0,0,1-.43.58l-.79.83H51C51.21,205.36,51.34,205.46,51.34,205.67Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M54.11,203.53a.32.32,0,0,1,.18-.05.38.38,0,0,1,.25.09.28.28,0,0,1,.11.22.32.32,0,0,1,0,.15l-.9,1.84a.37.37,0,0,1-.15.17.44.44,0,0,1-.43,0,.39.39,0,0,1-.16-.17l-.9-1.84a.35.35,0,0,1,0-.13.29.29,0,0,1,.12-.23.41.41,0,0,1,.26-.09.35.35,0,0,1,.19.05.36.36,0,0,1,.14.16l.61,1.34L54,203.7A.36.36,0,0,1,54.11,203.53Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<path d="M95.94,165.23a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.17.69.69,0,0,1-.24.11,2.88,2.88,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.92,1.51,1.51,0,0,1,.62-.63,2,2,0,0,1,.95-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.75,1.75,0,0,0-.38-.19,1.3,1.3,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.07v-.78h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,95.94,165.23Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M100.51,166.79a.3.3,0,0,1-.11.24.38.38,0,0,1-.26.1.33.33,0,0,1-.18-.05.32.32,0,0,1-.13-.16l-.27-.59H97.87l-.27.59a.32.32,0,0,1-.31.21A.39.39,0,0,1,97,167a.3.3,0,0,1-.12-.24.39.39,0,0,1,0-.16l1.35-2.83a.4.4,0,0,1,.17-.18.47.47,0,0,1,.48,0,.44.44,0,0,1,.17.18l1.35,2.83A.41.41,0,0,1,100.51,166.79Zm-2.37-1.05H99.3l-.58-1.3Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M101.91,167a.37.37,0,0,1-.11-.28v-2.53H101c-.25,0-.37-.11-.37-.32s.12-.32.37-.32h2.4c.25,0,.37.11.37.32s-.12.32-.37.32h-.81v2.53a.38.38,0,0,1-.1.28.44.44,0,0,1-.57,0Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M104.69,167a.36.36,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.29-.37h1.84c.25,0,.37.1.37.3s-.12.31-.37.31h-1.37V165h1.27c.25,0,.37.1.37.31s-.12.3-.37.3h-1.27v.88h1.38c.25,0,.37.1.37.31s-.12.3-.37.3H105A.36.36,0,0,1,104.69,167Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M93.7,172.48a1.48,1.48,0,0,1-.6-.63,2.29,2.29,0,0,1,0-1.92,1.49,1.49,0,0,1,.6-.63,2,2,0,0,1,2,.14.37.37,0,0,1,.1.12.32.32,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.18.09h-.12l-.12-.06a1.65,1.65,0,0,0-.37-.19,1.11,1.11,0,0,0-.37-.06.87.87,0,0,0-.72.3,1.38,1.38,0,0,0-.24.89q0,1.19,1,1.19A1.06,1.06,0,0,0,95,172a2.31,2.31,0,0,0,.38-.19l.13-.06h.12a.22.22,0,0,1,.18.09.36.36,0,0,1,.07.22.33.33,0,0,1,0,.15.37.37,0,0,1-.1.12,2,2,0,0,1-2,.14Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M99.51,169.15a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.24.36.36,0,0,1,0,.15l-1.35,2.85a.39.39,0,0,1-.17.18.49.49,0,0,1-.48,0,.39.39,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.14.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.36.36,0,0,1,.19.05.33.33,0,0,1,.13.16l1.07,2.34,1.07-2.34A.33.33,0,0,1,99.51,169.15Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M95.29,176.59a.24.24,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7v.71a.24.24,0,0,1-.07.18.28.28,0,0,1-.37,0,.25.25,0,0,1-.08-.18V177h-.7a.26.26,0,0,1-.26-.26.24.24,0,0,1,.08-.18.25.25,0,0,1,.18-.07h.7v-.71a.26.26,0,0,1,.52,0s0,0,0,0v.71h.7A.25.25,0,0,1,95.29,176.59Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M98.43,176.07a1,1,0,0,1,.4.4,1.22,1.22,0,0,1,.14.59,1.16,1.16,0,0,1-.17.62,1.12,1.12,0,0,1-.46.42,1.52,1.52,0,0,1-.69.15,2,2,0,0,1-.61-.09,1.62,1.62,0,0,1-.51-.26.34.34,0,0,1-.11-.12.62.62,0,0,1,.07-.37.22.22,0,0,1,.18-.09h.11l.13.06a2.72,2.72,0,0,0,.37.19.93.93,0,0,0,.36.07.67.67,0,0,0,.46-.14.52.52,0,0,0,.16-.42.53.53,0,0,0-.16-.41.62.62,0,0,0-.44-.15,1.06,1.06,0,0,0-.31,0,1.38,1.38,0,0,0-.31.14.42.42,0,0,1-.21.06.29.29,0,0,1-.2-.07.24.24,0,0,1-.08-.19V175a.33.33,0,0,1,.3-.36h1.67c.25,0,.37.1.37.29s-.12.3-.37.3H97.29V176a1.13,1.13,0,0,1,.56-.13A1.17,1.17,0,0,1,98.43,176.07Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M102.67,174.71a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15L101.87,178a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.15.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.32.32,0,0,1,.13.16l1.07,2.34,1.07-2.34A.33.33,0,0,1,102.67,174.71Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M95.29,182.15a.25.25,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7v.7a.24.24,0,0,1-.07.18.26.26,0,0,1-.19.07.25.25,0,0,1-.18-.07.24.24,0,0,1-.08-.18v-.7h-.7a.26.26,0,0,1-.26-.26.25.25,0,0,1,.08-.18.26.26,0,0,1,.18-.07h.7v-.71a.26.26,0,0,1,.26-.26.26.26,0,0,1,.26.26v.71h.7A.26.26,0,0,1,95.29,182.15Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M99,183.45q0,.31-.37.32H97q-.37,0-.37-.32t.37-.31h.46v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24.29.29,0,0,1,.15-.26l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54h.46A.27.27,0,0,1,99,183.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M102.47,183.45q0,.31-.37.32h-1.86a.34.34,0,0,1-.25-.09.31.31,0,0,1-.09-.23.47.47,0,0,1,.15-.33l1.1-1.17a1.1,1.1,0,0,0,.37-.72.4.4,0,0,0-.12-.31.47.47,0,0,0-.33-.11.93.93,0,0,0-.35.06,3,3,0,0,0-.37.19l-.13.07h-.1a.22.22,0,0,1-.18-.1.36.36,0,0,1-.08-.23.33.33,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.94,1.94,0,0,1,1.1-.36,1.51,1.51,0,0,1,.62.12.94.94,0,0,1,.41.34.92.92,0,0,1,.15.51,1.26,1.26,0,0,1-.13.57,2.48,2.48,0,0,1-.43.58l-.79.83h1.16Q102.47,183.14,102.47,183.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M106.18,180.26a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15l-1.35,2.85a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18l-1.35-2.85a.32.32,0,0,1,0-.14.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.33.33,0,0,1,.13.16l1.07,2.34,1.07-2.34A.34.34,0,0,1,106.18,180.26Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M95.94,187.45a.28.28,0,0,1,.08.21v1a1.17,1.17,0,0,1,0,.31.35.35,0,0,1-.11.17.71.71,0,0,1-.24.11,2.89,2.89,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.93,1.5,1.5,0,0,1,.62-.63,2,2,0,0,1,.95-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.36.36,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.71,1.71,0,0,0-.38-.19,1.27,1.27,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.31,2.31,0,0,0,.58-.07v-.78h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,95.94,187.45Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M100.14,185.88a.38.38,0,0,1,.1.28V189a.39.39,0,0,1-.1.28.39.39,0,0,1-.56,0l-1.67-2.14V189a.4.4,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.8a.38.38,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13L99.51,188v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.35.35,0,0,1,100.14,185.88Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M101.53,189.22a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.3-.36h1.07a2.16,2.16,0,0,1,1,.21,1.47,1.47,0,0,1,.63.61,1.91,1.91,0,0,1,.22.94,2,2,0,0,1-.22.95,1.46,1.46,0,0,1-.63.61,2.19,2.19,0,0,1-1,.21h-1A.37.37,0,0,1,101.53,189.22Zm1.22-.53a1.14,1.14,0,1,0,0-2.27h-.54v2.27Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M95.94,193a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.18.69.69,0,0,1-.24.11,2.77,2.77,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.93,1.5,1.5,0,0,1,.62-.63,2,2,0,0,1,.95-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.36.36,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.07a1.7,1.7,0,0,0-.38-.18,1.27,1.27,0,0,0-.38-.06q-1,0-1,1.19A1.34,1.34,0,0,0,94,194a1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.08v-.77h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,95.94,193Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M100.14,191.43a.39.39,0,0,1,.1.28v2.81a.39.39,0,0,1-.1.28.39.39,0,0,1-.56,0l-1.67-2.15v1.89a.41.41,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.81a.39.39,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13l1.67,2.13v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.36.36,0,0,1,100.14,191.43Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M101.53,194.78a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.3-.36h1.07a2.16,2.16,0,0,1,1,.21,1.47,1.47,0,0,1,.63.6,1.92,1.92,0,0,1,.22.95,2,2,0,0,1-.22.95,1.45,1.45,0,0,1-.63.61,2.17,2.17,0,0,1-1,.21h-1A.37.37,0,0,1,101.53,194.78Zm1.22-.54a1.13,1.13,0,0,0,0-2.26h-.54v2.26Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M95.94,198.56a.28.28,0,0,1,.08.21v1a1.16,1.16,0,0,1,0,.31.35.35,0,0,1-.11.17.69.69,0,0,1-.24.11,2.88,2.88,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.92,1.51,1.51,0,0,1,.62-.63,2,2,0,0,1,.95-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.35.35,0,0,1-.07.22.22.22,0,0,1-.17.09h-.12l-.13-.06a1.75,1.75,0,0,0-.38-.19,1.3,1.3,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.26,2.26,0,0,0,.58-.07V199h-.46a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07h.85A.31.31,0,0,1,95.94,198.56Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M100.14,197a.38.38,0,0,1,.1.28v2.8a.39.39,0,0,1-.1.28.35.35,0,0,1-.27.11.36.36,0,0,1-.29-.13l-1.67-2.14v1.88a.4.4,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.8a.38.38,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13l1.67,2.13v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.35.35,0,0,1,100.14,197Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M101.53,200.33a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.28-.37h1.09a2.18,2.18,0,0,1,1,.21,1.47,1.47,0,0,1,.63.61,1.91,1.91,0,0,1,.22.94,2,2,0,0,1-.22.95,1.46,1.46,0,0,1-.63.61,2.19,2.19,0,0,1-1,.21h-1A.37.37,0,0,1,101.53,200.33Zm1.22-.53a1.14,1.14,0,0,0,0-2.27h-.54v2.27Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M92.89,204.64c0-.2.12-.29.36-.29h1c.24,0,.36.1.36.29s-.12.29-.36.29h-1Q92.89,204.94,92.89,204.64Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M98.23,205.67c0,.21-.12.32-.37.32h-1.7q-.37,0-.37-.32t.37-.31h.47v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24.29.29,0,0,1,.16-.26l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54h.46C98.11,205.36,98.23,205.46,98.23,205.67Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M101.67,205.67c0,.21-.12.32-.37.32H99.44a.33.33,0,0,1-.25-.09.31.31,0,0,1-.09-.23.46.46,0,0,1,.14-.33l1.1-1.17a1.11,1.11,0,0,0,.37-.72.41.41,0,0,0-.12-.31.47.47,0,0,0-.33-.11.92.92,0,0,0-.35.06,2.87,2.87,0,0,0-.37.19l-.13.07H99.3a.22.22,0,0,1-.18-.1A.36.36,0,0,1,99,203a.34.34,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.86,1.86,0,0,1,.52-.26,1.84,1.84,0,0,1,.59-.1,1.5,1.5,0,0,1,.62.12.93.93,0,0,1,.41.34.92.92,0,0,1,.14.51,1.26,1.26,0,0,1-.13.57,2.48,2.48,0,0,1-.43.58l-.79.83h1.16C101.55,205.36,101.67,205.46,101.67,205.67Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M104.44,203.53a.32.32,0,0,1,.18-.05.38.38,0,0,1,.25.09.28.28,0,0,1,.11.22.32.32,0,0,1,0,.15l-.9,1.84a.37.37,0,0,1-.15.17.44.44,0,0,1-.43,0,.39.39,0,0,1-.16-.17l-.9-1.84a.35.35,0,0,1,0-.13.29.29,0,0,1,.12-.23.41.41,0,0,1,.26-.09.35.35,0,0,1,.19.05.36.36,0,0,1,.14.16l.61,1.34.61-1.34A.36.36,0,0,1,104.44,203.53Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<path d="M21.63,156.47a.73.73,0,0,1,.14.45.71.71,0,0,1-.27.58,1.17,1.17,0,0,1-.75.21H19.67a.27.27,0,0,1-.3-.3V155.1a.27.27,0,0,1,.24-.3h1.06a1.17,1.17,0,0,1,.72.2.66.66,0,0,1,.27.55.67.67,0,0,1-.12.4.69.69,0,0,1-.34.25A.73.73,0,0,1,21.63,156.47ZM20,156h.61a.63.63,0,0,0,.37-.08.3.3,0,0,0,.12-.26.31.31,0,0,0-.12-.27.63.63,0,0,0-.37-.08H20Zm1,1.14a.33.33,0,0,0,.12-.28.34.34,0,0,0-.12-.28.6.6,0,0,0-.37-.09H20v.74h.68A.62.62,0,0,0,21,157.14Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M22.6,157.44a1.24,1.24,0,0,1-.32-.92v-1.41a.3.3,0,0,1,.28-.32h0a.31.31,0,0,1,.23.09.32.32,0,0,1,.08.23v1.44a.78.78,0,0,0,.16.53.67.67,0,0,0,.92,0,.78.78,0,0,0,.16-.53v-1.44a.32.32,0,0,1,.08-.23.31.31,0,0,1,.23-.09.3.3,0,0,1,.32.32v1.41a1.24,1.24,0,0,1-.32.92,1.53,1.53,0,0,1-1.87,0Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M25.87,157.68a1.26,1.26,0,0,1-.46-.22.29.29,0,0,1-.09-.1.3.3,0,0,1,0-.31.19.19,0,0,1,.15-.08h.09l.11.05a1.37,1.37,0,0,0,.36.16,1.47,1.47,0,0,0,.4.05.79.79,0,0,0,.42-.09.29.29,0,0,0,.14-.26.23.23,0,0,0-.13-.21,1.74,1.74,0,0,0-.48-.15,2.63,2.63,0,0,1-.61-.19.8.8,0,0,1-.33-.28.73.73,0,0,1-.11-.4.78.78,0,0,1,.15-.47,1,1,0,0,1,.42-.33,1.48,1.48,0,0,1,.6-.12,1.54,1.54,0,0,1,1,.29.33.33,0,0,1,.09.1.27.27,0,0,1,0,.13.28.28,0,0,1-.06.18.19.19,0,0,1-.15.08H27.3l-.11-.05a1.72,1.72,0,0,0-.31-.16,1,1,0,0,0-.36-.05.71.71,0,0,0-.4.1.31.31,0,0,0-.14.27.24.24,0,0,0,.06.16.47.47,0,0,0,.19.11l.37.1a2,2,0,0,1,.81.32.64.64,0,0,1,.25.53.78.78,0,0,1-.15.47,1,1,0,0,1-.41.31,1.59,1.59,0,0,1-.62.11A2.29,2.29,0,0,1,25.87,157.68Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M31.7,156.47a.73.73,0,0,1,.14.45.71.71,0,0,1-.27.58,1.17,1.17,0,0,1-.75.21H29.74a.27.27,0,0,1-.3-.3V155.1a.27.27,0,0,1,.24-.3h1.06a1.17,1.17,0,0,1,.72.2.66.66,0,0,1,.27.55.67.67,0,0,1-.12.4.69.69,0,0,1-.34.25A.73.73,0,0,1,31.7,156.47ZM30.07,156h.61a.63.63,0,0,0,.37-.08.3.3,0,0,0,.12-.26.31.31,0,0,0-.12-.27.63.63,0,0,0-.37-.08h-.61Zm1,1.15a.33.33,0,0,0,.12-.28.34.34,0,0,0-.12-.28.6.6,0,0,0-.37-.09h-.68v.74h.68a.62.62,0,0,0,.37-.1Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M33,157.58a1.24,1.24,0,0,1-.49-.52,1.89,1.89,0,0,1,0-1.58A1.23,1.23,0,0,1,33,155a1.65,1.65,0,0,1,1.51,0,1.23,1.23,0,0,1,.49.52,1.89,1.89,0,0,1,0,1.58,1.24,1.24,0,0,1-.49.52,1.64,1.64,0,0,1-1.51,0Zm1.33-.57a1.42,1.42,0,0,0,0-1.48.77.77,0,0,0-1.09-.06l-.06.06a1.43,1.43,0,0,0,0,1.48.76.76,0,0,0,1.07.07l.07-.07Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M38.37,157.46a.25.25,0,0,1-.09.2.32.32,0,0,1-.21.08.19.19,0,0,1-.26-.13l-.22-.49h-1.4l-.22.49a.27.27,0,0,1-.26.17.32.32,0,0,1-.21-.08.25.25,0,0,1-.1-.2.34.34,0,0,1,0-.13L36.55,155a.32.32,0,0,1,.14-.15.39.39,0,0,1,.39,0,.37.37,0,0,1,.14.15l1.12,2.34A.34.34,0,0,1,38.37,157.46Zm-2-.87h1l-.48-1.07Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M41.26,157.49a.23.23,0,0,1-.09.19.35.35,0,0,1-.37,0,.31.31,0,0,1-.12-.12l-.55-.81a.48.48,0,0,0-.15-.15.38.38,0,0,0-.2,0h-.33v.83a.32.32,0,0,1-.08.24.31.31,0,0,1-.23.09.3.3,0,0,1-.32-.32v-2.31a.27.27,0,0,1,.24-.3h1.06a1.16,1.16,0,0,1,.77.23.81.81,0,0,1,.26.65.84.84,0,0,1-.19.56.89.89,0,0,1-.53.29.54.54,0,0,1,.22.1.84.84,0,0,1,.19.21l.31.47A.31.31,0,0,1,41.26,157.49ZM40.45,156a.44.44,0,0,0,0-.61.67.67,0,0,0-.4-.09h-.62v.8H40A.66.66,0,0,0,40.45,156Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M41.87,157.65a.3.3,0,0,1-.08-.22v-2.31a.27.27,0,0,1,.24-.3h.89a1.79,1.79,0,0,1,.82.17,1.21,1.21,0,0,1,.52.5,1.58,1.58,0,0,1,.18.78,1.61,1.61,0,0,1-.18.78,1.2,1.2,0,0,1-.52.5,1.81,1.81,0,0,1-.82.17h-.83A.3.3,0,0,1,41.87,157.65Zm1-.44a.94.94,0,0,0,0-1.87h-.44v1.87Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g id="g1794"> | |||
<g id="g1792"> | |||
<path id="path1790" d="M18.25,155.39a.22.22,0,0,0-.1-.13.19.19,0,0,0-.16,0,.22.22,0,0,0-.13.1,10.83,10.83,0,0,1-.82,1.25,5.3,5.3,0,0,1-.51-1.59v-.1l.49-.69c.06-.08.31-.38-.19-.6a.78.78,0,0,0-.58,0c-.57.25-.47,1-.46,1.18a.55.55,0,0,0,0,.15l-.93,1.53.14-.95a.34.34,0,0,0-.26-.39h0c-.25-.06-.4,0-.56.65s-.63,1.88-1,1.87-.06-.84.17-1.45A4.78,4.78,0,0,1,15.08,154c.17-.11.39-.37.16-.63s-.61-.07-.74,0a3.62,3.62,0,0,0-.86,1.07A5.62,5.62,0,0,0,13,156c-.25.8-.51,2.1,0,2.15.74.07,1.33-1.37,1.33-1.37s0,.75.34.77,1.11-1.45,1.32-2a5.51,5.51,0,0,0,.62,1.37v.1a10.35,10.35,0,0,0-1.12,2,.2.2,0,0,0,0,.18.19.19,0,0,0,.12.1.28.28,0,0,0,.18,0l.16-.09c1.19-.68,1.36-1.48,1.27-2.09l.06-.1a10.4,10.4,0,0,0,1-1.42.19.19,0,0,0,0-.16Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="4.33 164.93 2.77 163.98 1.16 164.86 1.12 166.69 2.69 167.64 4.29 166.76 4.33 164.93" style="fill: #bb9965"/> | |||
<circle cx="2.41" cy="165.8" r="0.9" transform="translate(-140.15 81.67) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M2.15,165H0v1.6H2.15a.8.8,0,1,0,0-1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="4.33 177.61 2.77 176.66 1.16 177.53 1.12 179.37 2.69 180.32 4.29 179.44 4.33 177.61" style="fill: #bb9965"/> | |||
<circle cx="2.41" cy="178.48" r="0.9" transform="translate(-150.98 87.76) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M2.15,177.65H0v1.6H2.15a.8.8,0,1,0,0-1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="4.33 190.29 2.77 189.33 1.16 190.21 1.12 192.04 2.69 193 4.29 192.12 4.33 190.29" style="fill: #bb9965"/> | |||
<circle cx="2.4" cy="191.15" r="0.9" transform="translate(-161.81 93.84) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M2.15,190.33H0v1.6H2.15a.8.8,0,1,0,0-1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="4.33 202.96 2.77 202.01 1.16 202.89 1.12 204.72 2.69 205.67 4.29 204.79 4.33 202.96" style="fill: #bb9965"/> | |||
<circle cx="2.4" cy="203.83" r="0.9" transform="translate(-172.64 99.93) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M2.15,203H0v1.6H2.15a.8.8,0,1,0,0-1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
</g> | |||
<g> | |||
<g> | |||
<polygon points="116.2 204.72 117.77 205.67 119.38 204.79 119.42 202.96 117.85 202.01 116.25 202.89 116.2 204.72" style="fill: #bb9965"/> | |||
<circle cx="117.47" cy="203.83" r="0.9" transform="translate(-117.38 198.23) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M117.72,204.68h2.15v-1.6h-2.15a.8.8,0,0,0,0,1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="116.2 192.04 117.77 193 119.38 192.12 119.42 190.29 117.85 189.33 116.25 190.21 116.2 192.04" style="fill: #bb9965"/> | |||
<circle cx="117.47" cy="191.15" r="0.9" transform="translate(-106.55 192.14) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M117.72,192h2.15v-1.6h-2.15a.8.8,0,0,0,0,1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="116.2 179.37 117.77 180.32 119.38 179.44 119.42 177.61 117.85 176.66 116.25 177.53 116.2 179.37" style="fill: #bb9965"/> | |||
<circle cx="117.48" cy="178.48" r="0.9" transform="translate(-95.73 186.06) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M117.72,179.32h2.15v-1.6h-2.15a.8.8,0,0,0,0,1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
<g> | |||
<polygon points="116.2 166.69 117.77 167.64 119.38 166.76 119.42 164.93 117.85 163.98 116.25 164.86 116.2 166.69" style="fill: #bb9965"/> | |||
<circle cx="117.48" cy="165.8" r="0.9" transform="translate(-84.9 179.97) rotate(-58.68)" style="fill: #bbbdbf"/> | |||
<path d="M117.72,166.65h2.15V165h-2.15a.8.8,0,0,0,0,1.6Z" transform="translate(0.33)" style="fill: #929497"/> | |||
</g> | |||
</g> | |||
<g> | |||
<path d="M8.57,165.81a.24.24,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7V167a.24.24,0,0,1-.07.18.28.28,0,0,1-.37,0,.25.25,0,0,1-.08-.18v-.71h-.7A.26.26,0,0,1,6.2,166a.24.24,0,0,1,.08-.18.25.25,0,0,1,.18-.07h.7V165a.26.26,0,0,1,.52,0s0,0,0,0v.71h.7A.25.25,0,0,1,8.57,165.81Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M11.72,165.29a1,1,0,0,1,.4.4,1.22,1.22,0,0,1,.14.59,1.16,1.16,0,0,1-.17.62,1.12,1.12,0,0,1-.46.42,1.52,1.52,0,0,1-.69.15,2,2,0,0,1-.61-.09,1.62,1.62,0,0,1-.51-.26.34.34,0,0,1-.11-.12.62.62,0,0,1,.07-.37.22.22,0,0,1,.18-.09h.11l.13.06a2.72,2.72,0,0,0,.37.19.93.93,0,0,0,.36.07.67.67,0,0,0,.46-.14.52.52,0,0,0,.16-.42.53.53,0,0,0-.16-.41.62.62,0,0,0-.44-.15,1.06,1.06,0,0,0-.31,0,1.38,1.38,0,0,0-.31.14.42.42,0,0,1-.21.06.29.29,0,0,1-.2-.07.24.24,0,0,1-.08-.19v-1.46a.33.33,0,0,1,.3-.36h1.67c.25,0,.37.1.37.29s-.12.3-.37.3H10.57v.79a1.13,1.13,0,0,1,.56-.13A1.17,1.17,0,0,1,11.72,165.29Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M16,163.92a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15l-1.35,2.85a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18L13,164.36a.32.32,0,0,1,0-.15.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.32.32,0,0,1,.13.16l1.07,2.34,1.07-2.34A.33.33,0,0,1,16,163.92Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M8.57,178.4a.25.25,0,0,1,.08.18.26.26,0,0,1-.26.26h-.7v.7a.24.24,0,0,1-.07.18.26.26,0,0,1-.19.07.25.25,0,0,1-.18-.07.24.24,0,0,1-.08-.18v-.7h-.7a.26.26,0,0,1-.26-.26.25.25,0,0,1,.08-.18.26.26,0,0,1,.18-.07h.7v-.71a.26.26,0,0,1,.26-.26.26.26,0,0,1,.26.26v.71h.7A.26.26,0,0,1,8.57,178.4Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M12.32,179.7q0,.31-.37.32H10.24q-.37,0-.37-.32t.37-.31h.46v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24A.29.29,0,0,1,10,177l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54H12A.28.28,0,0,1,12.32,179.7Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M15.75,179.7q0,.31-.37.32H13.52a.34.34,0,0,1-.25-.09.31.31,0,0,1-.09-.23.47.47,0,0,1,.15-.33l1.1-1.17a1.1,1.1,0,0,0,.37-.72.4.4,0,0,0-.12-.31.47.47,0,0,0-.33-.11.93.93,0,0,0-.35.06,3,3,0,0,0-.37.19l-.13.07h-.1a.22.22,0,0,1-.18-.1.36.36,0,0,1-.08-.23.33.33,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.94,1.94,0,0,1,1.1-.36,1.51,1.51,0,0,1,.62.12.94.94,0,0,1,.41.34.92.92,0,0,1,.15.51,1.26,1.26,0,0,1-.13.57,2.48,2.48,0,0,1-.43.58l-.79.83h1.16Q15.75,179.39,15.75,179.7Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M19.46,176.51a.35.35,0,0,1,.19-.05.41.41,0,0,1,.27.1.31.31,0,0,1,.12.25.35.35,0,0,1,0,.15l-1.35,2.85a.4.4,0,0,1-.17.18.49.49,0,0,1-.48,0,.4.4,0,0,1-.17-.18L16.49,177a.32.32,0,0,1,0-.14.31.31,0,0,1,.13-.25.44.44,0,0,1,.28-.1.37.37,0,0,1,.19.05.33.33,0,0,1,.13.16l1,2.28,1.07-2.34A.34.34,0,0,1,19.46,176.51Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M9.25,190.95a.28.28,0,0,1,.08.21v1a1.17,1.17,0,0,1,0,.31.35.35,0,0,1-.11.17.71.71,0,0,1-.24.11,2.89,2.89,0,0,1-.45.09,3.47,3.47,0,0,1-.48,0,2,2,0,0,1-1-.22,1.5,1.5,0,0,1-.63-.62,2.22,2.22,0,0,1,0-1.93,1.5,1.5,0,0,1,.62-.63,2,2,0,0,1,.95-.22,1.8,1.8,0,0,1,1.15.36.37.37,0,0,1,.1.12.33.33,0,0,1,0,.15.36.36,0,0,1-.07.22.22.22,0,0,1-.17.09H8.88l-.13-.06a1.71,1.71,0,0,0-.38-.19,1.27,1.27,0,0,0-.38-.05q-1,0-1,1.18a1.34,1.34,0,0,0,.27.91,1,1,0,0,0,.8.3,2.31,2.31,0,0,0,.58-.07v-.78H8.17a.33.33,0,0,1-.23-.07.29.29,0,0,1,0-.4.33.33,0,0,1,.23-.07H9A.31.31,0,0,1,9.25,190.95Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M13.45,189.37a.38.38,0,0,1,.1.28v2.8a.39.39,0,0,1-.1.28.39.39,0,0,1-.56,0l-1.67-2.14v1.88a.4.4,0,0,1-.1.28.36.36,0,0,1-.52,0,.39.39,0,0,1-.1-.28v-2.8a.38.38,0,0,1,.1-.28.35.35,0,0,1,.27-.11.34.34,0,0,1,.29.13l1.67,2.13v-1.87a.39.39,0,0,1,.1-.28.34.34,0,0,1,.26-.11A.35.35,0,0,1,13.45,189.37Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M14.85,192.72a.37.37,0,0,1-.09-.27v-2.79a.33.33,0,0,1,.3-.36h1.07a2.16,2.16,0,0,1,1,.21,1.47,1.47,0,0,1,.63.61A1.91,1.91,0,0,1,18,191a2,2,0,0,1-.22.95,1.46,1.46,0,0,1-.63.61,2.19,2.19,0,0,1-1,.21h-1A.37.37,0,0,1,14.85,192.72Zm1.22-.53a1.14,1.14,0,1,0,0-2.27h-.54v2.27Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<path d="M6.2,204c0-.2.12-.29.36-.29h1c.24,0,.36.1.36.29s-.12.29-.36.29h-1Q6.2,204.31,6.2,204Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M11.54,205c0,.21-.12.32-.37.32H9.47q-.37,0-.37-.32t.37-.31h.47v-2l-.44.26a.29.29,0,0,1-.15,0,.27.27,0,0,1-.21-.1.36.36,0,0,1-.09-.24.29.29,0,0,1,.16-.26l.79-.48a.68.68,0,0,1,.35-.1.36.36,0,0,1,.38.38v2.54h.46C11.42,204.73,11.54,204.83,11.54,205Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M15,205c0,.21-.12.32-.37.32H12.75a.33.33,0,0,1-.25-.09.31.31,0,0,1-.09-.23.46.46,0,0,1,.14-.33l1.1-1.17a1.11,1.11,0,0,0,.37-.72.41.41,0,0,0-.12-.31.47.47,0,0,0-.33-.11.92.92,0,0,0-.35.06,2.87,2.87,0,0,0-.37.19l-.13.07h-.11a.22.22,0,0,1-.18-.1.36.36,0,0,1-.08-.23.34.34,0,0,1,0-.16.31.31,0,0,1,.11-.11,1.86,1.86,0,0,1,.52-.26,1.84,1.84,0,0,1,.59-.1,1.5,1.5,0,0,1,.62.12.93.93,0,0,1,.41.34.92.92,0,0,1,.14.51,1.26,1.26,0,0,1-.13.57,2.48,2.48,0,0,1-.43.58l-.79.83h1.16C14.85,204.73,15,204.83,15,205Z" transform="translate(0.33)" style="fill: #fff"/> | |||
<path d="M17.75,202.9a.32.32,0,0,1,.18-.05.38.38,0,0,1,.25.09.28.28,0,0,1,.11.22.32.32,0,0,1,0,.15l-.9,1.84a.37.37,0,0,1-.15.17.44.44,0,0,1-.43,0,.39.39,0,0,1-.16-.17l-.9-1.84a.35.35,0,0,1,0-.13.29.29,0,0,1,.12-.23.41.41,0,0,1,.26-.09.35.35,0,0,1,.19.05.36.36,0,0,1,.14.16l.61,1.34.61-1.34A.36.36,0,0,1,17.75,202.9Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<circle id="circle868" cx="59.85" cy="214.15" r="3.99" style="fill: #bb9965"/> | |||
<circle id="circle868-2" cx="59.85" cy="214.15" r="1.86" style="fill: #231f20"/> | |||
<path id="path884" d="M59.52,209.1a5.06,5.06,0,1,1-5.06,5.06h0a5.06,5.06,0,0,1,5.06-5.06m0-.44a5.5,5.5,0,1,0,5.5,5.5h0a5.5,5.5,0,0,0-5.5-5.5Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<circle id="circle868-3" cx="10.35" cy="214.15" r="3.99" style="fill: #bb9965"/> | |||
<circle id="circle868-4" cx="10.35" cy="214.15" r="1.86" style="fill: #231f20"/> | |||
<path id="path884-2" d="M10,209.1a5.06,5.06,0,1,1-5,5.12v-.06H5a5.06,5.06,0,0,1,5-5.06m0-.44a5.5,5.5,0,1,0,5.5,5.5h0a5.5,5.5,0,0,0-5.5-5.5Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g> | |||
<circle id="circle868-5" cx="109.35" cy="214.15" r="3.99" style="fill: #bb9965"/> | |||
<circle id="circle868-6" cx="109.35" cy="214.15" r="1.86" style="fill: #231f20"/> | |||
<path id="path884-3" d="M109,209.1a5.06,5.06,0,1,1-5.06,5.06h0A5.06,5.06,0,0,1,109,209.1m0-.44a5.5,5.5,0,1,0,5.5,5.5h0a5.5,5.5,0,0,0-5.5-5.5Z" transform="translate(0.33)" style="fill: #fff"/> | |||
</g> | |||
<g style="opacity: 0.38"> | |||
<rect id="rect1709-2-2" data-name="rect1709-2" x="12.83" y="147.49" width="4.17" height="74.88" style="fill: #2b2c2b"/> | |||
<rect id="rect1709-3-2" data-name="rect1709-3" x="8.83" y="147.49" width="4.17" height="74.88" style="fill: #252624"/> | |||
<rect id="rect1709-4-2" data-name="rect1709-4" x="4.57" y="147.49" width="4.17" height="74.88" style="fill: #1e1d1d"/> | |||
<rect id="rect1709-5-2" data-name="rect1709-5" x="0.33" y="147.49" width="4.17" height="74.88" style="fill: #191818"/> | |||
</g> | |||
<g style="opacity: 0.38"> | |||
<rect id="rect1709-2-3" data-name="rect1709-2" x="103.8" y="147.49" width="4.17" height="74.88" style="fill: #2b2c2b"/> | |||
<rect id="rect1709-3-3" data-name="rect1709-3" x="107.8" y="147.49" width="4.17" height="74.88" style="fill: #252624"/> | |||
<rect id="rect1709-4-3" data-name="rect1709-4" x="112.07" y="147.49" width="4.17" height="74.88" style="fill: #1e1d1d"/> | |||
<rect id="rect1709-5-3" data-name="rect1709-5" x="116.3" y="147.49" width="4.17" height="74.88" style="fill: #191818"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g id="Layer_4" data-name="Layer 4"> | |||
<g> | |||
<rect id="rect1806" x="0.34" width="120" height="14.43" style="fill: #d9d9d8"/> | |||
<rect id="rect1806-2" x="0.34" y="14.41" width="120" height="1.02" style="fill: #b3b3b3"/> | |||
<g> | |||
<circle cx="7.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="22.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="37.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="52.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="67.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="82.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="97.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
<circle cx="112.84" cy="7.94" r="3.44" style="fill: #333"/> | |||
</g> | |||
</g> | |||
<g> | |||
<rect id="rect1806-3" x="0.34" y="365.57" width="120" height="14.43" style="fill: #d9d9d8"/> | |||
<rect id="rect1806-4" x="0.34" y="364.57" width="120" height="1.02" style="fill: #b3b3b3"/> | |||
<g> | |||
<circle cx="112.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="97.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="82.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="67.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="52.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="37.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="22.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
<circle cx="7.84" cy="372.06" r="3.44" style="fill: #333"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g id="Layer_5" data-name="Layer 5"> | |||
<g> | |||
<polygon points="25.18 103.03 60.69 96.88 56.42 97.62 58.49 84.41 48.1 86.21 46.03 99.42 35.56 101.23 37.63 88.02 21.55 90.81 27.25 89.82 25.18 103.03" style="fill: #fbc010"/> | |||
<polygon points="14.71 104.84 16.78 91.63 6.4 93.43 4.33 106.64 0 107.39 0 107.39 21.97 103.59 14.71 104.84" style="fill: #fbc010"/> | |||
<polygon points="77.27 94.01 79.34 80.8 85.55 79.73 68.96 82.6 66.89 95.81 77.27 94.01" style="fill: #fbc010"/> | |||
<polygon points="89.81 78.99 85.55 79.73 89.81 78.99 89.81 78.99"/> | |||
<polygon points="77.27 94.01 84.38 92.78 77.27 94.01 77.27 94.01"/> | |||
<polygon points="77.27 94.01 84.38 92.78 87.74 92.2 89.81 78.99 85.55 79.73 79.34 80.8 77.27 94.01"/> | |||
<polygon points="108.59 88.59 108.59 88.59 99.41 90.18 108.59 88.59"/> | |||
<polygon points="100.19 77.19 98.12 90.4 99.41 90.18 108.59 88.59 110.66 75.38 100.19 77.19"/> | |||
<polygon points="68.96 82.6 58.49 84.41 58.49 84.41 68.96 82.6 68.96 82.6"/> | |||
<polygon points="66.89 95.81 66.89 95.81 60.69 96.88 66.89 95.81"/> | |||
<polygon points="60.69 96.88 66.89 95.81 68.96 82.6 58.49 84.41 56.42 97.62 60.69 96.88"/> | |||
<polygon points="6.4 93.43 6.4 93.43 0 94.54 0 94.54 6.4 93.43"/> | |||
<polygon points="0 107.39 4.33 106.64 6.4 93.43 0 94.54 0 107.39"/> | |||
<polygon points="48.1 86.21 37.63 88.02 37.63 88.02 48.1 86.21 48.1 86.21"/> | |||
<polygon points="46.03 99.42 48.1 86.21 37.63 88.02 35.56 101.23 46.03 99.42"/> | |||
<polygon points="25.18 103.03 25.18 103.03 21.97 103.59 25.18 103.03"/> | |||
<polygon points="16.78 91.63 16.78 91.63 21.55 90.81 16.78 91.63"/> | |||
<polygon points="21.97 103.59 25.18 103.03 27.25 89.82 21.55 90.81 16.78 91.63 14.71 104.84 21.97 103.59"/> | |||
<polygon points="118.97 86.79 120.35 78.04 120.35 73.7 89.81 78.99 87.74 92.2 84.38 92.78 99.41 90.18 98.12 90.4 100.19 77.19 110.66 75.38 108.59 88.59 120.35 86.56 120.35 86.56 118.97 86.79" style="fill: #fbc010"/> | |||
<polygon points="118.97 86.79 120.35 86.56 120.35 78.04 118.97 86.79"/> | |||
</g> | |||
<g> | |||
<polygon points="52.89 162.55 46.89 174.5 36.37 173.04 42.36 161.09 0 155.18 0 156.13 0.44 155.25 10.97 156.71 4.97 168.66 15.4 170.12 21.4 158.17 31.93 159.63 25.93 171.58 57.33 175.96 63.33 164.01 52.89 162.55" style="fill: #fbc010"/> | |||
<polygon points="78.28 178.88 88.81 180.35 88.81 180.35 78.28 178.88 78.28 178.88"/> | |||
<polygon points="84.28 166.93 78.28 178.88 88.81 180.35 94.81 168.4 84.28 166.93"/> | |||
<polygon points="99.25 181.8 104.6 182.55 99.25 181.8 99.25 181.8"/> | |||
<polygon points="115.77 171.32 105.25 169.85 99.25 181.8 104.6 182.55 109.77 183.27 115.77 171.32"/> | |||
<polygon points="57.33 175.96 67.85 177.43 67.85 177.43 57.33 175.96 57.33 175.96"/> | |||
<polygon points="73.85 165.47 63.33 164.01 63.33 164.01 73.85 165.47 73.85 165.47"/> | |||
<polygon points="63.33 164.01 57.33 175.96 67.85 177.43 73.85 165.47 63.33 164.01"/> | |||
<polygon points="0 167.97 4.97 168.66 4.97 168.66 0 167.97 0 167.97"/> | |||
<polygon points="0.44 155.25 0 156.13 0 167.97 4.97 168.66 10.97 156.71 0.44 155.25"/> | |||
<polygon points="52.89 162.55 42.36 161.09 42.36 161.09 52.89 162.55 52.89 162.55"/> | |||
<polygon points="46.89 174.5 52.89 162.55 42.36 161.09 36.37 173.04 46.89 174.5"/> | |||
<polygon points="15.4 170.12 25.93 171.58 25.93 171.58 15.4 170.12 15.4 170.12"/> | |||
<polygon points="21.4 158.17 15.4 170.12 25.93 171.58 31.93 159.63 21.4 158.17"/> | |||
<polygon points="120.41 184.75 120.41 184.32 120.21 184.72 120.41 184.75" style="fill: none"/> | |||
<polygon points="120.21 184.72 120.41 184.32 120.41 171.96 73.85 165.47 67.85 177.43 78.28 178.88 84.28 166.93 94.81 168.4 88.81 180.35 99.25 181.8 105.25 169.85 115.77 171.32 109.77 183.27 104.6 182.55 120.41 184.75 120.41 184.75 120.21 184.72" style="fill: #fbc010"/> | |||
</g> | |||
<g> | |||
<polygon points="52.31 308.39 65.45 302.05 63.8 288.77 67.74 286.88 54.32 293.36 55.96 306.63 52.31 308.39" style="fill: #fbc010"/> | |||
<polygon points="85.24 292.48 84.5 292.84 82.86 279.57 85.49 278.3 73.37 284.15 75.02 297.42 85.24 292.48" style="fill: #fbc010"/> | |||
<polygon points="103.56 283.63 101.91 270.36 92.43 274.94 94.07 288.22 103.56 283.63" style="fill: #fbc010"/> | |||
<polygon points="27.34 320.46 25.69 307.19 16.21 311.77 17.85 325.04 27.34 320.46" style="fill: #fbc010"/> | |||
<polygon points="32.14 318.14 46.39 311.25 44.75 297.98 35.26 302.57 36.91 315.84 32.14 318.14" style="fill: #fbc010"/> | |||
<polygon points="65.45 302.05 75.02 297.42 75.02 297.42 65.45 302.05 65.45 302.05"/> | |||
<polygon points="73.37 284.15 67.74 286.88 73.37 284.15 73.37 284.15"/> | |||
<polygon points="65.45 302.05 75.02 297.42 73.37 284.15 67.74 286.88 63.8 288.77 65.45 302.05"/> | |||
<polygon points="92.43 274.94 85.49 278.3 92.43 274.94 92.43 274.94"/> | |||
<polygon points="94.07 288.22 94.07 288.22 85.24 292.48 94.07 288.22"/> | |||
<polygon points="84.5 292.84 85.24 292.48 94.07 288.22 92.43 274.94 85.49 278.3 82.86 279.57 84.5 292.84"/> | |||
<polygon points="54.32 293.36 44.75 297.98 44.75 297.98 54.32 293.36 54.32 293.36"/> | |||
<polygon points="46.39 311.25 52.31 308.39 46.39 311.25 46.39 311.25"/> | |||
<polygon points="52.31 308.39 55.96 306.63 54.32 293.36 44.75 297.98 46.39 311.25 52.31 308.39"/> | |||
<polygon points="35.26 302.57 25.69 307.19 25.69 307.19 35.26 302.57 35.26 302.57"/> | |||
<polygon points="27.34 320.46 32.14 318.14 27.34 320.46 27.34 320.46"/> | |||
<polygon points="32.14 318.14 36.91 315.84 35.26 302.57 25.69 307.19 27.34 320.46 32.14 318.14"/> | |||
<polygon points="16.21 311.77 6.64 316.4 6.64 316.4 16.21 311.77 16.21 311.77"/> | |||
<polygon points="17.85 325.04 17.85 325.04 14.61 326.61 17.85 325.04"/> | |||
<polygon points="14.61 326.61 17.85 325.04 16.21 311.77 6.64 316.4 8.28 329.67 14.61 326.61"/> | |||
<polygon points="111.48 265.74 101.91 270.36 101.91 270.36 111.48 265.74 111.48 265.74"/> | |||
<polygon points="103.56 283.63 113.13 279.01 113.13 279.01 103.56 283.63 103.56 283.63"/> | |||
<polygon points="111.48 265.74 113.13 279.01 120.39 275.5 120.39 261.43 111.48 265.74" style="fill: #fbc010"/> | |||
<polygon points="101.91 270.36 103.56 283.63 113.13 279.01 111.48 265.74 101.91 270.36"/> | |||
<polygon points="8.28 329.67 6.64 316.4 0.3 319.46 0.3 333.52 14.61 326.61 8.28 329.67" style="fill: #fbc010"/> | |||
</g> | |||
</g> | |||
</svg> |