diff options
| author | Moritz Eberl <moritz@semiodesk.com> | 2016-04-16 17:24:08 +0000 |
|---|---|---|
| committer | Moritz Eberl <moritz@semiodesk.com> | 2016-04-16 17:24:08 +0000 |
| commit | 69cb9b68955f341000342bcf3b90cfd4c41a1fd8 (patch) | |
| tree | b6061c25987d6300bd03189c03259d66bab7c0b6 | |
| parent | Added Sebastian Faubels helper scripts for windows. (diff) | |
| parent | CMake build: builds with WITH_DBUS (diff) | |
| download | inkscape-69cb9b68955f341000342bcf3b90cfd4c41a1fd8.tar.gz inkscape-69cb9b68955f341000342bcf3b90cfd4c41a1fd8.zip | |
merge and fixed build
(bzr r14761.1.11)
63 files changed, 1042 insertions, 1103 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ec16218dc..641aec8ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,6 @@ option(WITH_OPENMP "Compile with OpenMP support" ON) option(WITH_PROFILING "Turn on profiling" OFF) # Set to true if compiler/linker should enable profiling -option(WITH_GTKSPELL "Compile with support for GTK spelling widget" ON) option(ENABLE_POPPLER "Compile with support of libpoppler" ON) option(ENABLE_POPPLER_CAIRO "Compile with support of libpoppler-cairo for rendering PDF preview (depends on ENABLE_POPPLER)" ON) option(WITH_IMAGE_MAGICK "Compile with support of ImageMagick for raster extensions and image import resolution" ON) @@ -108,9 +107,8 @@ add_definitions(-DORBIT2=1) add_definitions(-DHAVE_CONFIG_H) add_definitions(-DHAVE_CAIRO_PDF=1) # needed for src/libnrtype/Layout-TNG.h add_definitions(-DHAVE_TR1_UNORDERED_SET) # XXX make an option! - -if(!WIN32) -add_definitions(-fPIC) +if(NOT WIN32) + add_definitions(-fPIC) endif() # # end badness diff --git a/CMakeScripts/ConfigChecks.cmake b/CMakeScripts/ConfigChecks.cmake index d12a37cbe..a247f4e72 100644 --- a/CMakeScripts/ConfigChecks.cmake +++ b/CMakeScripts/ConfigChecks.cmake @@ -66,7 +66,6 @@ if(HAVE_CAIRO_PDF) set(RENDER_WITH_PANGO_CAIRO TRUE) endif() -# Create the two configuration files: config.h and inkscape_version.h -# Create them in the binary root dir +# Create the configuration files config.h in the binary root dir configure_file(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/include/config.h) add_definitions(-DHAVE_CONFIG_H) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 4f02d258b..f2a6b5670 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -14,9 +14,8 @@ list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR} # ---------------------------------------------------------------------------- # Files we include # ---------------------------------------------------------------------------- - if(WIN32) - message("---------------- BEGIN: Win32 ----------------") +message("---------------- BEGIN: Win32 ----------------") # The name of the target operating system set(CMAKE_SYSTEM_NAME Windows) @@ -33,13 +32,12 @@ if(WIN32) set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff -i <SOURCE> -o <OBJECT>") # Here is the target environment located - set(CMAKE_FIND_ROOT_PATH $ENV{MINGW_PATH}/mingw64/) + set(CMAKE_FIND_ROOT_PATH $ENV{MINGW_PATH}/) message("CMAKE_FIND_ROOT_PATH: " ${CMAKE_FIND_ROOT_PATH}) # Tweak CMake into using Unix-style library names. set(CMAKE_FIND_LIBRARY_PREFIXES "lib") - #set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a" ".dll.a") set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".dll") message("CMAKE_FIND_LIBRARY_PREFIXES: " ${CMAKE_FIND_LIBRARY_PREFIXES}) @@ -50,14 +48,15 @@ if(WIN32) message("SDL_INCLUDE_DIR: " ${SDL_INCLUDE_DIR}) #if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^amd64") + link_directories($ENV{MINGW_PATH}/lib) link_directories($ENV{DEVLIBS_PATH}/lib) - link_directories($ENV{MINGW_PATH}/mingw64/lib) - link_directories($ENV{MINGW_PATH}/mingw64/x86_64-w64-mingw32/lib) + link_directories($ENV{MINGW_PATH}/x86_64-w64-mingw32/lib) link_directories($ENV{WINDIR}/system32) - - include_directories($ENV{MINGW_PATH}/mingw64/include) - include_directories($ENV{MINGW_PATH}/mingw64/x86_64-w64-mingw32/include) - include_directories($ENV{MINGW_PATH}/mingw64/x86_64-w64-mingw32/include/c++) + + include_directories($ENV{MINGW_PATH}/include) + + include_directories($ENV{MINGW_PATH}/x86_64-w64-mingw32/include) + include_directories($ENV{MINGW_PATH}/x86_64-w64-mingw32/include/c++) #endif () get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) @@ -81,9 +80,7 @@ if(WIN32) # Try to compile using C++ 11. set(CMAKE_CXX_STANDARD 11) - message("CMAKE_CXX_STANDARD: " ${CMAKE_CXX_STANDARD}) message("---------------- END: Win32 ----------------") - endif() pkg_check_modules(INKSCAPE_DEP REQUIRED pangocairo pangoft2 fontconfig gthread-2.0 gsl gmodule-2.0) @@ -253,11 +250,13 @@ else(POTRACE_FOUND) endif() if(WITH_DBUS) - find_package(DBus REQUIRED) + pkg_check_modules(DBUS dbus-1 dbus-glib-1) if(DBUS_FOUND) - list(APPEND INKSCAPE_INCS_SYS ${DBUS_INCLUDE_DIR}) - list(APPEND INKSCAPE_INCS_SYS ${DBUS_ARCH_INCLUDE_DIR}) - list(APPEND INKSCAPE_LIBS ${DBUS_LIBRARIES}) + list(APPEND INKSCAPE_LIBS ${DBUS_LDFLAGS}) + list(APPEND INKSCAPE_INCS_SYS ${DBUS_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/src/extension/dbus/) + list(APPEND INKSCAPE_LIBS ${DBUS_LIBRARIES}) + add_definitions(${DBUS_CFLAGS_OTHER}) + else() set(WITH_DBUS OFF) endif() @@ -309,7 +308,7 @@ if("${WITH_GTK3_EXPERIMENTAL}") pkg_check_modules(GDL_3_6 gdl-3.0>=3.6) if("${GDL_3_6_FOUND}") - message("Using Gdl 3.6 or higher") + message("Using GDL 3.6 or higher") set (WITH_GDL_3_6 1) endif() @@ -317,9 +316,12 @@ if("${WITH_GTK3_EXPERIMENTAL}") pkg_check_modules(GTKSPELL3 gtkspell3-3.0) if("${GTKSPELL3_FOUND}") - message("Using GtkSpell3 3.0") + message("Using GtkSpell 3") set (WITH_GTKSPELL 1) + else() + unset(WITH_GTKSPELL) endif() + list(APPEND INKSCAPE_INCS_SYS ${GTK3_INCLUDE_DIRS} ${GTKSPELL3_INCLUDE_DIRS} @@ -338,19 +340,21 @@ else() ) list(APPEND INKSCAPE_CXX_FLAGS ${GTK_CFLAGS_OTHER}) pkg_check_modules(GTKSPELL2 gtkspell-2.0) - if("${GTKSPELL3_FOUND}") - message("Using GtkSpell3 3.0") - add_definitions(${GTK_CFLAGS_OTHER}) + if("${GTKSPELL2_FOUND}") + message("Using GtkSpell 2") + add_definitions(${GTKSPELL2_CFLAGS_OTHER}) set (WITH_GTKSPELL 1) + else() + unset(WITH_GTKSPELL) endif() list(APPEND INKSCAPE_INCS_SYS ${GTK_INCLUDE_DIRS} - ${GTKSPELL_INCLUDE_DIRS} + ${GTKSPELL2_INCLUDE_DIRS} ) list(APPEND INKSCAPE_LIBS ${GTK_LIBRARIES} - ${GTKSPELL_LIBRARIES} + ${GTKSPELL2_LIBRARIES} ) endif() @@ -370,17 +374,6 @@ if(ASPELL_FOUND) set(HAVE_ASPELL TRUE) endif() -if("${TRY_GTKSPELL}" AND "${WITH_GTKSPELL}") - find_package(GtkSpell) - if(GTKSPELL_FOUND) - list(APPEND INKSCAPE_INCS_SYS ${GTKSPELL_INCLUDE_DIR}) - list(APPEND INKSCAPE_LIBS ${GTKSPELL_LIBRARIES}) - add_definitions(${GTKSPELL_DEFINITIONS}) - else() - set(WITH_GTKSPELL OFF) - endif() -endif() - #find_package(OpenSSL) #list(APPEND INKSCAPE_INCS_SYS ${OPENSSL_INCLUDE_DIR}) #list(APPEND INKSCAPE_LIBS ${OPENSSL_LIBRARIES}) @@ -444,6 +437,9 @@ if(WITH_NLS) endif(GETTEXT_FOUND) endif(WITH_NLS) +#sets c++11 for newer sigc++ if required when pkg-config does not detect it +find_package(SigC++ REQUIRED) + pkg_check_modules(SIGC++ REQUIRED sigc++-2.0 ) list(APPEND INKSCAPE_LIBS ${SIGC++_LDFLAGS}) diff --git a/CMakeScripts/Modules/FindSigC++.cmake b/CMakeScripts/Modules/FindSigC++.cmake index 8046410b5..14cbf47f7 100644 --- a/CMakeScripts/Modules/FindSigC++.cmake +++ b/CMakeScripts/Modules/FindSigC++.cmake @@ -106,10 +106,12 @@ endif (SIGC++_LIBRARIES AND SIGC++_INCLUDE_DIRS) # https://bugs.launchpad.net/inkscape/+bug/1488079 macro (sigcpp_compile extra_cppflags) + set(sigcpp_compile_output "") try_compile(SIGCPP_COMPILES_FINE "${CMAKE_BINARY_DIR}/sigcpp-bindir" SOURCES "${CMAKE_SOURCE_DIR}/CMakeScripts/Modules/sigcpp_test.cpp" COMPILE_DEFINITIONS ${_SIGC++_CFLAGS} ${extra_cppflags} - LINK_LIBRARIES ${SIGC++_LIBRARIES}) + LINK_LIBRARIES ${SIGC++_LIBRARIES} + OUTPUT_VARIABLE sigcpp_compile_output) endmacro() @@ -120,7 +122,7 @@ if (NOT "${SIGCPP_COMPILES_FINE}") if ("${SIGCPP_COMPILES_FINE}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cppflag}") else() - message(FATAL_ERROR "Could not compile against SIGC++") + message(FATAL_ERROR "Could not compile against SIGC++ - output is <<${sigcpp_compile_output}>>") endif() endif() diff --git a/generate_POTFILES.sh b/generate_POTFILES.sh index 04ea931b5..87c769ea4 100755 --- a/generate_POTFILES.sh +++ b/generate_POTFILES.sh @@ -21,6 +21,7 @@ rm -f po/POTFILES.in.new echo "# Please keep this file sorted alphabetically." echo "# Generated by $prog at `date`" echo "[encoding: UTF-8]" + echo "inkscape.appdata.xml.in" echo "inkscape.desktop.in" echo "share/filters/filters.svg.h" echo "share/palettes/palettes.h" diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 5e2352100..1aaf56106 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -6,7 +6,7 @@ foreach(language ${LANGUAGES}) GETTEXT_PROCESS_PO_FILES(${language} ALL INSTALL_DESTINATION "share/locale/" PO_FILES ${pofile}) endforeach(language) -if(!WIN32) +if(NOT WIN32) #translates inkscape.desktop add_custom_target(inkscape_desktop DEPENDS ${CMAKE_BINARY_DIR}/inkscape.desktop) diff --git a/po/POTFILES.in b/po/POTFILES.in index ee168fb74..057114bd0 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,6 +1,6 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -# Generated by ./generate_POTFILES.sh at Tue Sep 22 20:20:22 CEST 2015 +# Generated by ./generate_POTFILES.sh at Thu Apr 14 04:25:58 CEST 2016 [encoding: UTF-8] inkscape.appdata.xml.in inkscape.desktop.in @@ -340,6 +340,7 @@ src/widgets/font-selector.cpp src/widgets/gradient-selector.cpp src/widgets/gradient-toolbar.cpp src/widgets/gradient-vector.cpp +src/widgets/image-menu-item.c src/widgets/lpe-toolbar.cpp src/widgets/measure-toolbar.cpp src/widgets/mesh-toolbar.cpp @@ -532,6 +533,7 @@ share/extensions/wireframe_sphere.py [type: gettext/xml] share/extensions/motion.inx [type: gettext/xml] share/extensions/new_glyph_layer.inx [type: gettext/xml] share/extensions/next_glyph_layer.inx +[type: gettext/xml] share/extensions/nicechart.inx [type: gettext/xml] share/extensions/param_curves.inx [type: gettext/xml] share/extensions/pathalongpath.inx [type: gettext/xml] share/extensions/pathscatter.inx diff --git a/share/extensions/Barcode/Base.py b/share/extensions/Barcode/Base.py index 1aa1f8415..bfa0a774f 100644 --- a/share/extensions/Barcode/Base.py +++ b/share/extensions/Barcode/Base.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Base module for rendering barcodes for Inkscape. @@ -23,114 +23,140 @@ import itertools import sys from lxml import etree +(TEXT_POS_BOTTOM, TEXT_POS_TOP) = range(2) (WHITE_BAR, BLACK_BAR, TALL_BAR) = range(3) TEXT_TEMPLATE = 'font-size:%dpx;text-align:center;text-anchor:middle;' +SVG_URI = u'http://www.w3.org/2000/svg' +# pylint: disable=abstract-class-not-used class Barcode(object): """Provide a base class for all barcode renderers""" + default_height = 30 + font_size = 9 name = None - def error(self, bar, msg): + def error(self, text, msg): """Cause an error to be reported""" sys.stderr.write( - "Error encoding '%s' as %s barcode: %s\n" % (bar, self.name, msg)) + "Error encoding '%s' as %s barcode: %s\n" % (text, self.name, msg)) return "ERROR" - def __init__(self, param={}): + def encode(self, text): + """ + Replace this with the encoding function, it should return + a string of ones and zeros + """ + raise NotImplementedError("You need to write an encode() function.") + + def __init__(self, param): + param = param or {} self.document = param.get('document', None) - self.x = int(param.get('x', 0)) - self.y = int(param.get('y', 0)) - self.scale = param.get('scale', 1) - self.height = param.get('height', 30) - self.label = param.get('text', None) - self.string = self.encode( self.label ) - - if not self.string: - return + self.known_ids = [] + self._extra = [] - self.width = len(self.string) - self.data = self.graphicalArray(self.string) + self.pos_x = int(param.get('x', 0)) + self.pos_y = int(param.get('y', 0)) + self.text = param.get('text', None) + self.scale = param.get('scale', 1) + self.height = param.get('height', self.default_height) + self.pos_text = param.get('text_pos', TEXT_POS_BOTTOM) - def get_id(self): - """Get the next useful id""" - if not self.document: - return "barcode" - doc_ids = {} - docIdNodes = self.document.xpath('//@id') - for m in docIdNodes: - doc_ids[m] = 1 + if self.document: + self.known_ids = list(self.document.xpath('//@id')) - name = 'barcode' + if not self.text: + raise ValueError("No string specified for barcode.") + def get_id(self, name='element'): + """Get the next useful id (and claim it)""" index = 0 - while (doc_ids.has_key(name)): + while name in self.known_ids: index += 1 name = 'barcode%d' % index + self.known_ids.append(name) return name + def add_extra_barcode(self, barcode, **kw): + """Add an extra barcode along side this one, used for ean13 extras""" + from . import getBarcode + kw['height'] = self.height + kw['document'] = self.document + kw['scale'] = None + self._extra.append(getBarcode(barcode, **kw).generate()) + def generate(self): """Generate the actual svg from the coding""" - svg_uri = u'http://www.w3.org/2000/svg' - if self.string == 'ERROR': + string = self.encode(self.text) + + if string == 'ERROR': return - if not self.string or not self.data: - raise ValueError("No string specified for barcode.") - data = self.data - name = self.get_id() + name = self.get_id('barcode') # use an svg group element to contain the barcode - barcode = etree.Element('{%s}%s' % (svg_uri,'g')) + barcode = etree.Element('{%s}g' % SVG_URI) barcode.set('id', name) barcode.set('style', 'fill: black;') - barcode.set('transform', 'translate(%d,%d) scale(%f)' % (self.x, self.y, self.scale)) - + if self.scale: + barcode.set('transform', 'translate(%d,%d) scale(%f)' % ( + self.pos_x, self.pos_y, self.scale)) + else: + barcode.set('transform', 'translate(%d,%d)' % ( + self.pos_x, self.pos_y)) + + bar_id = 1 bar_offset = 0 - bar_id = 1 + tops = set() - for datum in data: + for datum in self.graphical_array(string): # Datum 0 tells us what style of bar is to come next - style = self.getStyle(int(datum[0])) + style = self.get_style(int(datum[0])) # Datum 1 tells us what width in units, # style tells us how wide a unit is width = int(datum[1]) * int(style['width']) if style['write']: - rect = etree.SubElement(barcode,'{%s}%s' % (svg_uri,'rect')) - rect.set('x', str(bar_offset)) - rect.set('y', str(style['top'])) - rect.set('width', str(width)) + tops.add(style['top']) + rect = etree.SubElement(barcode, '{%s}rect' % SVG_URI) + rect.set('x', str(bar_offset)) + rect.set('y', str(style['top'])) + if self.pos_text == TEXT_POS_TOP: + rect.set('y', str(style['top'] + self.font_size)) + rect.set('id', "%s_bar%d" % (name, bar_id)) + rect.set('width', str(width)) rect.set('height', str(style['height'])) - rect.set('id', "%s_bar%d" % (name, bar_id)) bar_offset += width bar_id += 1 + for extra in self._extra: + if extra is not None: + barcode.append(extra) + bar_width = bar_offset # Add text at the bottom of the barcode - text = etree.SubElement(barcode,'{%s}%s' % (svg_uri,'text')) - text.set( 'x', str(int(bar_width / 2))) - text.set( 'y', str(self.height + self.fontSize() )) - text.set( 'style', TEXT_TEMPLATE % self.fontSize() ) - text.set( '{http://www.w3.org/XML/1998/namespace}space', 'preserve' ) - text.set( 'id', '%s_text' % name ) - text.text = str(self.label) + text = etree.SubElement(barcode, '{%s}text' % SVG_URI) + text.set('x', str(int(bar_width / 2))) + text.set('y', str(min(tops) + self.font_size - 1)) + if self.pos_text == TEXT_POS_BOTTOM: + text.set('y', str(self.height + max(tops) + self.font_size)) + text.set('style', TEXT_TEMPLATE % self.font_size) + text.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') + text.set('id', '%s_text' % name) + text.text = str(self.text) return barcode - def graphicalArray(self, code): + def graphical_array(self, code): """Converts black and white markets into a space array""" - return [(x,len(list(y))) for x, y in itertools.groupby(code)] + return [(x, len(list(y))) for x, y in itertools.groupby(code)] - def getStyle(self, index): + def get_style(self, index): """Returns the styles that should be applied to each bar""" - result = { 'width' : 1, 'top' : 0, 'write' : True } + result = {'width' : 1, 'top' : 0, 'write' : True} if index == BLACK_BAR: result['height'] = int(self.height) if index == TALL_BAR: - result['height'] = int(self.height) + int(self.fontSize() / 2) + result['height'] = int(self.height) + int(self.font_size / 2) if index == WHITE_BAR: result['write'] = False return result - def fontSize(self): - """Return the ideal font size, defaults to 9px""" - return 9 diff --git a/share/extensions/Barcode/BaseEan.py b/share/extensions/Barcode/BaseEan.py index 4ceaeed4a..2c3ab0c09 100644 --- a/share/extensions/Barcode/BaseEan.py +++ b/share/extensions/Barcode/BaseEan.py @@ -13,40 +13,39 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Some basic common code shared between EAN and UCP generators. """ -from Base import Barcode -import sys +from .Base import Barcode, TEXT_POS_TOP MAPPING = [ # Left side of barcode Family '0' - [ "0001101", "0011001", "0010011", "0111101", "0100011", - "0110001", "0101111", "0111011", "0110111", "0001011" ], + ["0001101", "0011001", "0010011", "0111101", "0100011", + "0110001", "0101111", "0111011", "0110111", "0001011"], # Left side of barcode Family '1' and flipped to right side. - [ "0100111", "0110011", "0011011", "0100001", "0011101", - "0111001", "0000101", "0010001", "0001001", "0010111" ], + ["0100111", "0110011", "0011011", "0100001", "0011101", + "0111001", "0000101", "0010001", "0001001", "0010111"], ] # This chooses which of the two encodings above to use. -FAMILIES = [ '000000', '001011', '001101', '001110', '010011', - '011001', '011100', '010101', '010110', '011010' ] - -GUARD_BAR = '202' -CENTER_BAR = '02020' +FAMILIES = ('000000', '001011', '001101', '001110', '010011', + '011001', '011100', '010101', '010110', '011010') class EanBarcode(Barcode): """Simple base class for all EAN type barcodes""" - length = None lengths = None - checks = [] + length = None + checks = [] + extras = {} + magic = 10 + guard_bar = '202' + center_bar = '02020' def intarray(self, number): """Convert a string of digits into an array of ints""" - return [ int(i) for i in number ] - + return [int(i) for i in number] def encode_interleaved(self, family, number, fams=FAMILIES): """Encode any side of the barcode, interleaved""" @@ -54,27 +53,24 @@ class EanBarcode(Barcode): encset = self.intarray(fams[family]) for i in range(len(number)): thismap = MAPPING[encset[i]] - result.append( thismap[number[i]] ) + result.append(thismap[number[i]]) return result - def encode_right(self, number): """Encode the right side of the barcode, non-interleaved""" result = [] - for n in number: + for num in number: # The right side is always the reverse of the left's family '1' - result.append( MAPPING[1][n][::-1] ) + result.append(MAPPING[1][num][::-1]) return result - def encode_left(self, number): """Encode the left side of the barcode, non-interleaved""" result = [] - for n in number: - result.append( MAPPING[0][n] ) + for num in number: + result.append(MAPPING[0][num]) return result - def space(self, *spacing): """Space out an array of numbers""" result = '' @@ -86,60 +82,75 @@ class EanBarcode(Barcode): result += ' ' * space return result - - def getLengths(self): + def get_lengths(self): """Return a list of acceptable lengths""" if self.length: - return [ self.length ] + return [self.length] return self.lengths[:] - def encode(self, code): """Encode any EAN barcode""" + code = code.replace(' ', '').strip() + if not code.isdigit(): return self.error(code, 'Not a Number, must be digits 0-9 only') - lengths = self.getLengths() + self.checks + lengths = self.get_lengths() + self.checks + # Allow extra barcodes after the first one if len(code) not in lengths: - return self.error(code, 'Wrong size, must be %s digits' % - (', '.join(self.space(lengths)))) + for extra in self.extras: + sep = len(code) - extra + if sep in lengths: + # Generate a barcode along side this one. + self.add_extra_barcode(self.extras[extra], text=code[sep:], + x=self.pos_x + 400 * self.scale, text_pos=TEXT_POS_TOP) + code = code[:sep] + + if len(code) not in lengths: + return self.error(code, 'Wrong size %d, must be %s digits' % + (len(code), ', '.join([str(length) for length in lengths]))) if self.checks: if len(code) not in self.checks: - code = self.appendChecksum(code) - elif not self.verifyChecksum(code): + code = self.append_checksum(code) + elif not self.verify_checksum(code): return self.error(code, 'Checksum failed, omit for new sum') return self._encode(self.intarray(code)) - - def _encode(self, n): + def _encode(self, num): + """ + Write your EAN encoding function, it's passed in an array of int and + it should return a string on 1 and 0 for black and white parts + """ raise NotImplementedError("_encode should be provided by parent EAN") - def enclose(self, left, right=[], guard=GUARD_BAR, center=CENTER_BAR): + def enclose(self, left, right=()): """Standard Enclosure""" - parts = [ guard ] + left + [ center ] + right + [ guard ] - return ''.join( parts ) + parts = [self.guard_bar] + left + parts.append(self.center_bar) + parts += list(right) + [self.guard_bar] + return ''.join(parts) - def getChecksum(self, number, magic=10): + def get_checksum(self, number): """Generate a UPCA/EAN13/EAN8 Checksum""" - weight = [3,1] * len(number) + weight = [3, 1] * len(number) result = 0 # We need to work from left to right so reverse number = number[::-1] # checksum based on first digits. for i in range(len(number)): - result += int(number[i]) * weight[i] + result += int(number[i]) * weight[i] # Modulous result to a single digit checksum - checksum = magic - (result % magic) - if checksum < 0 or checksum >= magic: - return '0' + checksum = self.magic - (result % self.magic) + if checksum < 0 or checksum >= self.magic: + return '0' return str(checksum) - def appendChecksum(self, number): + def append_checksum(self, number): """Apply the checksum to a short number""" - return number + self.getChecksum(number) + return number + self.get_checksum(number) - def verifyChecksum(self, number): + def verify_checksum(self, number): """Verify any checksum""" - return self.getChecksum(number[:-1]) == number[-1] + return self.get_checksum(number[:-1]) == number[-1] diff --git a/share/extensions/Barcode/Code128.py b/share/extensions/Barcode/Code128.py index 7ff92088f..b90e3bcf6 100644 --- a/share/extensions/Barcode/Code128.py +++ b/share/extensions/Barcode/Code128.py @@ -17,42 +17,42 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ -Python barcode renderer for Code128/EAN128 barcodes. Designed for use with Inkscape. +Renderer for Code128/EAN128 codes. Designed for use with Inkscape. """ -from Base import Barcode -import math +from .Base import Barcode import re -codeMap = [ - '11011001100','11001101100','11001100110','10010011000','10010001100', - '10001001100','10011001000','10011000100','10001100100','11001001000', - '11001000100','11000100100','10110011100','10011011100','10011001110', - '10111001100','10011101100','10011100110','11001110010','11001011100', - '11001001110','11011100100','11001110100','11101101110','11101001100', - '11100101100','11100100110','11101100100','11100110100','11100110010', - '11011011000','11011000110','11000110110','10100011000','10001011000', - '10001000110','10110001000','10001101000','10001100010','11010001000', - '11000101000','11000100010','10110111000','10110001110','10001101110', - '10111011000','10111000110','10001110110','11101110110','11010001110', - '11000101110','11011101000','11011100010','11011101110','11101011000', - '11101000110','11100010110','11101101000','11101100010','11100011010', - '11101111010','11001000010','11110001010','10100110000','10100001100', - '10010110000','10010000110','10000101100','10000100110','10110010000', - '10110000100','10011010000','10011000010','10000110100','10000110010', - '11000010010','11001010000','11110111010','11000010100','10001111010', - '10100111100','10010111100','10010011110','10111100100','10011110100', - '10011110010','11110100100','11110010100','11110010010','11011011110', - '11011110110','11110110110','10101111000','10100011110','10001011110', - '10111101000','10111100010','11110101000','11110100010','10111011110', - '10111101110','11101011110','11110101110','11010000100','11010010000', - '11010011100','11000111010','11' ] - -def mapExtra(sd, chars): - result = list(sd) +CODE_MAP = [ + '11011001100', '11001101100', '11001100110', '10010011000', '10010001100', + '10001001100', '10011001000', '10011000100', '10001100100', '11001001000', + '11001000100', '11000100100', '10110011100', '10011011100', '10011001110', + '10111001100', '10011101100', '10011100110', '11001110010', '11001011100', + '11001001110', '11011100100', '11001110100', '11101101110', '11101001100', + '11100101100', '11100100110', '11101100100', '11100110100', '11100110010', + '11011011000', '11011000110', '11000110110', '10100011000', '10001011000', + '10001000110', '10110001000', '10001101000', '10001100010', '11010001000', + '11000101000', '11000100010', '10110111000', '10110001110', '10001101110', + '10111011000', '10111000110', '10001110110', '11101110110', '11010001110', + '11000101110', '11011101000', '11011100010', '11011101110', '11101011000', + '11101000110', '11100010110', '11101101000', '11101100010', '11100011010', + '11101111010', '11001000010', '11110001010', '10100110000', '10100001100', + '10010110000', '10010000110', '10000101100', '10000100110', '10110010000', + '10110000100', '10011010000', '10011000010', '10000110100', '10000110010', + '11000010010', '11001010000', '11110111010', '11000010100', '10001111010', + '10100111100', '10010111100', '10010011110', '10111100100', '10011110100', + '10011110010', '11110100100', '11110010100', '11110010010', '11011011110', + '11011110110', '11110110110', '10101111000', '10100011110', '10001011110', + '10111101000', '10111100010', '11110101000', '11110100010', '10111011110', + '10111101110', '11101011110', '11110101110', '11010000100', '11010010000', + '11010011100', '11000111010', '11'] + +def map_extra(data, chars): + """Maps the data into the chars""" + result = list(data) for char in chars: result.append(chr(char)) result.append('FNC3') @@ -60,18 +60,18 @@ def mapExtra(sd, chars): result.append('SHIFT') return result -# The mapExtra method is used to slim down the amount +# The map_extra method is used to slim down the amount # of pre code and instead we generate the lists -charAB = list(' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_') -charA = mapExtra(charAB, range(0, 31)) # Offset 64 -charB = mapExtra(charAB, range(96, 125)) # Offset -32 +CHAR_AB = list(" !\"#$%&\'()*+,-./0123456789:;<=>?@" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_") +CHAR_A = map_extra(CHAR_AB, range(0, 31)) # Offset 64 +CHAR_B = map_extra(CHAR_AB, range(96, 125)) # Offset -32 class Code128(Barcode): """Main barcode object, generates the encoding bits here""" def encode(self, text): - result = '' blocks = [] - block = '' + block = '' # Split up into sections of numbers, or charicters # This makes sure that all the charicters are encoded @@ -81,42 +81,42 @@ class Code128(Barcode): block = block + datum else: if block: - blocks.append(self.bestBlock(block)) + blocks.append(self.best_block(block)) block = '' - blocks.append( [ 'C', datum ] ) + blocks.append(['C', datum]) if block: - blocks.append(self.bestBlock(block)) - block = ''; + blocks.append(self.best_block(block)) + block = '' - self.inclabel = text - return self.encodeBlocks(blocks) + return self.encode_blocks(blocks) - def bestBlock(self, block): - # If this has lower case then select B over A + def best_block(self, block): + """If this has lower case then select B over A""" if block.upper() == block: - return [ 'A', block ] - return [ 'B', block ] + return ['A', block] + return ['B', block] - def encodeBlocks(self, blocks): - total = 0 - pos = 0 - encode = ''; + def encode_blocks(self, blocks): + """Encode the given blocks into A, B or C codes""" + encode = '' + total = 0 + pos = 0 for block in blocks: - set = block[0] + b_set = block[0] datum = block[1] # POS : 0, 1 # A : 101, 103 # B : 100, 104 # C : 99, 105 - num = 0; - if set == 'A': + num = 0 + if b_set == 'A': num = 103 - elif set == 'B': + elif b_set == 'B': num = 104 - elif set == 'C': + elif b_set == 'C': num = 105 i = pos @@ -126,28 +126,28 @@ class Code128(Barcode): i = 1 total = total + num * i - encode = encode + codeMap[num] + encode = encode + CODE_MAP[num] pos = pos + 1 - if set == 'A' or set == 'B': - chars = charB - if set == 'A': - chars = charA + if b_set == 'A' or b_set == 'B': + chars = CHAR_B + if b_set == 'A': + chars = CHAR_A for char in datum: total = total + (chars.index(char) * pos) - encode = encode + codeMap[chars.index(char)] + encode = encode + CODE_MAP[chars.index(char)] pos = pos + 1 else: for char in (datum[i:i+2] for i in range(0, len(datum), 2)): total = total + (int(char) * pos) - encode = encode + codeMap[int(char)] + encode = encode + CODE_MAP[int(char)] pos = pos + 1 checksum = total % 103 - encode = encode + codeMap[checksum] - encode = encode + codeMap[106] - encode = encode + codeMap[107] + encode = encode + CODE_MAP[checksum] + encode = encode + CODE_MAP[106] + encode = encode + CODE_MAP[107] return encode diff --git a/share/extensions/Barcode/Code25i.py b/share/extensions/Barcode/Code25i.py index 9812d8598..2c751559c 100644 --- a/share/extensions/Barcode/Code25i.py +++ b/share/extensions/Barcode/Code25i.py @@ -13,53 +13,48 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Generate barcodes for Code25-interleaved 2 of 5, for Inkscape. """ -from Base import Barcode -import sys +from .Base import Barcode # 1 means thick, 0 means thin -encoding = { - '0' : '00110', - '1' : '10001', - '2' : '01001', - '3' : '11000', - '4' : '00101', - '5' : '10100', - '6' : '01100', - '7' : '00011', - '8' : '10010', - '9' : '01010', +ENCODE = { + '0': '00110', + '1': '10001', + '2': '01001', + '3': '11000', + '4': '00101', + '5': '10100', + '6': '01100', + '7': '00011', + '8': '10010', + '9': '01010', } -# Start and stop code are already encoded into white (0) and black(1) bars -start_code = '1010' -stop_code = '1101' class Code25i(Barcode): - # Convert a text into string binary of black and white markers + """Convert a text into string binary of black and white markers""" + # Start and stop code are already encoded into white (0) and black(1) bars def encode(self, number): - self.label = number - if not number.isdigit(): - sys.stderr.write("CODE25 can only encode numbers.\n") - return + return self.error(number, "CODE25 can only encode numbers.") - # Number of figures to encode must be even, a 0 is added to the left in case it's odd. - if len(number) % 2 > 0 : + # Number of figures to encode must be even, + # a 0 is added to the left in case it's odd. + if len(number) % 2 > 0: number = '0' + number # Number is encoded by pairs of 2 figures - size = len(number) / 2; - encoded = start_code; + size = len(number) / 2 + encoded = '1010' for i in range(size): # First in the pair is encoded in black (1), second in white (0) - black = encoding[number[i*2]] - white = encoding[number[i*2+1]] + black = ENCODE[number[i*2]] + white = ENCODE[number[i*2+1]] for j in range(5): if black[j] == '1': encoded += '11' @@ -69,9 +64,5 @@ class Code25i(Barcode): encoded += '00' else: encoded += '0' - - encoded += stop_code - - self.inclabel = number - return encoded; + return encoded + '1101' diff --git a/share/extensions/Barcode/Code39.py b/share/extensions/Barcode/Code39.py index 3cd8467a8..0d4d445b1 100644 --- a/share/extensions/Barcode/Code39.py +++ b/share/extensions/Barcode/Code39.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for Code39 barcodes. Designed for use with Inkscape. @@ -21,73 +21,70 @@ Python barcode renderer for Code39 barcodes. Designed for use with Inkscape. from Base import Barcode -encoding = { - '0' : '000110100', - '1' : '100100001', - '2' : '001100001', - '3' : '101100000', - '4' : '000110001', - '5' : '100110000', - '6' : '001110000', - '7' : '000100101', - '8' : '100100100', - '9' : '001100100', - 'A' : '100001001', - 'B' : '001001001', - 'C' : '101001000', - 'D' : '000011001', - 'E' : '100011000', - 'F' : '001011000', - 'G' : '000001101', - 'H' : '100001100', - 'I' : '001001100', - 'J' : '000011100', - 'K' : '100000011', - 'L' : '001000011', - 'M' : '101000010', - 'N' : '000010011', - 'O' : '100010010', - 'P' : '001010010', - 'Q' : '000000111', - 'R' : '100000110', - 'S' : '001000110', - 'T' : '000010110', - 'U' : '110000001', - 'V' : '011000001', - 'W' : '111000000', - 'X' : '010010001', - 'Y' : '110010000', - 'Z' : '011010000', - '-' : '010000101', - '*' : '010010100', - '+' : '010001010', - '$' : '010101000', - '%' : '000101010', - '/' : '010100010', - '.' : '110000100', - ' ' : '011000100', +ENCODE = { + '0': '000110100', + '1': '100100001', + '2': '001100001', + '3': '101100000', + '4': '000110001', + '5': '100110000', + '6': '001110000', + '7': '000100101', + '8': '100100100', + '9': '001100100', + 'A': '100001001', + 'B': '001001001', + 'C': '101001000', + 'D': '000011001', + 'E': '100011000', + 'F': '001011000', + 'G': '000001101', + 'H': '100001100', + 'I': '001001100', + 'J': '000011100', + 'K': '100000011', + 'L': '001000011', + 'M': '101000010', + 'N': '000010011', + 'O': '100010010', + 'P': '001010010', + 'Q': '000000111', + 'R': '100000110', + 'S': '001000110', + 'T': '000010110', + 'U': '110000001', + 'V': '011000001', + 'W': '111000000', + 'X': '010010001', + 'Y': '110010000', + 'Z': '011010000', + '-': '010000101', + '*': '010010100', + '+': '010001010', + '$': '010101000', + '%': '000101010', + '/': '010100010', + '.': '110000100', + ' ': '011000100', } class Code39(Barcode): - # Convert a text into string binary of black and white markers + """Convert a text into string binary of black and white markers""" def encode(self, text): - text = text.upper() - self.label = text - text = '*' + text + '*' - result = '' + self.text = text.upper() + result = '' # It isposible for us to encode code39 # into full ascii, but this feature is # not enabled here - for char in text: - if not encoding.has_key(char): - char = '-'; - - result = result + encoding[char] + '0'; + for char in '*' + self.text + '*': + if not ENCODE.has_key(char): + char = '-' + result = result + ENCODE[char] + '0' # Now we need to encode the code39, best read # the code to understand what it's up to: - encoded = ''; - colour = '1'; # 1 = Black, 0 = White + encoded = '' + colour = '1' # 1 = Black, 0 = White for data in result: if data == '1': encoded = encoded + colour + colour @@ -95,6 +92,5 @@ class Code39(Barcode): encoded = encoded + colour colour = colour == '1' and '0' or '1' - self.inclabel = text - return encoded; + return encoded diff --git a/share/extensions/Barcode/Code93.py b/share/extensions/Barcode/Code93.py index 2b90fdda1..939a739dd 100644 --- a/share/extensions/Barcode/Code93.py +++ b/share/extensions/Barcode/Code93.py @@ -13,109 +13,101 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for Code93 barcodes. Designed for use with Inkscape. """ -from Base import Barcode +from .Base import Barcode -chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%' -encode = list(chars) -encode.append('($)') -encode.append('(/)') -encode.append('(+)') -encode.append('(%)') -encode.append('MARKER') +PALLET = list('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%') +PALLET.append('($)') +PALLET.append('(/)') +PALLET.append('(+)') +PALLET.append('(%)') +PALLET.append('MARKER') -map = {} - -i = 0 -for char in encode: - map[char] = i - i = i + 1 - -# Extended encoding maps for full ASCII Code93 -def getMap(array): +MAP = dict((PALLET[i], i) for i in range(len(PALLET))) +def get_map(array): + """Extended ENCODE maps for full ASCII Code93""" result = {} - y = 10 - - for x in array: - result[chr(x)] = encode[y] - y = y + 1 - - return result; + pos = 10 + for char in array: + result[chr(char)] = PALLET[pos] + pos = pos + 1 + return result # MapA is eclectic, but B, C, D are all ASCII ranges -mapA = getMap([27,28,29,30,31,59,60,61,62,63,91,92,93,94,95,123,124,125,126,127,0,64,96,127,127,127]) # % -mapB = getMap(range(1, 26)) # $ -mapC = getMap(range(33, 58)) # / -mapD = getMap(range(97, 122)) # + - -encoding = '100010100 101001000 101000100 101000010 100101000 100100100 100100010 101010000 100010010 100001010 110101000 110100100 110100010 110010100 110010010 110001010 101101000 101100100 101100010 100110100 100011010 101011000 101001100 101000110 100101100 100010110 110110100 110110010 110101100 110100110 110010110 110011010 101101100 101100110 100110110 100111010 100101110 111010100 111010010 111001010 101101110 101110110 110101110 100100110 111011010 111010110 100110010 101011110'.split() +MAP_A = get_map([27, 28, 29, 30, 31, 59, 60, 61, 62, 63, 91, 92, 93, 94, 95, + 123, 124, 125, 126, 127, 0, 64, 96, 127, 127, 127]) # % +MAP_B = get_map(range(1, 26)) # $ +MAP_C = get_map(range(33, 58)) # / +MAP_D = get_map(range(97, 122)) # + + +ENCODE = [ + '100010100', '101001000', '101000100', '101000010', '100101000', + '100100100', '100100010', '101010000', '100010010', '100001010', + '110101000', '110100100', '110100010', '110010100', '110010010', + '110001010', '101101000', '101100100', '101100010', '100110100', + '100011010', '101011000', '101001100', '101000110', '100101100', + '100010110', '110110100', '110110010', '110101100', '110100110', + '110010110', '110011010', '101101100', '101100110', '100110110', + '100111010', '100101110', '111010100', '111010010', '111001010', + '101101110', '101110110', '110101110', '100100110', '111011010', + '111010110', '100110010', '101011110', '' +] class Code93(Barcode): def encode(self, text): - # start marker - bits = self.encode93('MARKER') + # start marker + bits = ENCODE[MAP.get('MARKER', -1)] # Extend to ASCII charset ( return Array ) - text = self.encodeAscii(text) + text = self.encode_ascii(text) # Calculate the checksums text.append(self.checksum(text, 20)) # C text.append(self.checksum(text, 15)) # K - # Now convert text into the encoding bits (black and white stripes) + # Now convert text into the ENCODE bits (black and white stripes) for char in text: - bits = bits + self.encode93(char) - - # end marker - bits = bits + self.encode93('MARKER') + bits = bits + ENCODE[MAP.get(char, -1)] - # termination bar - bits = bits + '1' - - self.inclabel = text - return bits + # end marker and termination bar + return bits + ENCODE[MAP.get('MARKER', -1)] + '1' def checksum(self, text, mod): + """Generate a code 93 checksum""" weight = len(text) % mod - check = 0 + check = 0 for char in text: - check = check + (map[char] * weight) + check = check + (MAP[char] * weight) # Reset the weight is required weight = weight - 1 if weight == 0: weight = mod - return encode[check % 47] + return PALLET[check % 47] - # Some charicters need re-encoding into the code93 specification - def encodeAscii(self, text): + # Some charicters need re-ENCODE into the code93 specification + def encode_ascii(self, text): result = [] for char in text: - if map.has_key(char): + if MAP.has_key(char): result.append(char) - elif mapA.has_key(char): + elif MAP_A.has_key(char): result.append('(%)') - result.append(mapA[char]) - elif mapB.has_key(char): + result.append(MAP_A[char]) + elif MAP_B.has_key(char): result.append('($)') - result.append(mapB[char]) - elif mapC.has_key(char): + result.append(MAP_B[char]) + elif MAP_C.has_key(char): result.append('(/)') - result.append(mapC[char]) - elif mapD.has_key(char): + result.append(MAP_C[char]) + elif MAP_D.has_key(char): result.append('(+)') - result.append(mapD[char]) - + result.append(MAP_D[char]) return result - def encode93(self, char): - if map.has_key(char): - return encoding[map[char]] - return '' - diff --git a/share/extensions/Barcode/Ean13.py b/share/extensions/Barcode/Ean13.py index 7e138f25a..41f4df826 100644 --- a/share/extensions/Barcode/Ean13.py +++ b/share/extensions/Barcode/Ean13.py @@ -15,24 +15,25 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for EAN13 barcodes. Designed for use with Inkscape. """ -from BaseEan import EanBarcode +from .BaseEan import EanBarcode class Ean13(EanBarcode): """Provide an Ean13 barcode generator""" name = 'ean13' - lengths = [ 12 ] - checks = [ 13 ] + extras = {2: 'Ean2', 5: 'Ean5'} + checks = [13] + lengths = [12] def _encode(self, n): """Encode an ean13 barcode""" - self.label = self.space(n[0:1], 4, n[1:7], 5, n[7:], 7) + self.text = self.space(n[0:1], 4, n[1:7], 5, n[7:], 7) return self.enclose( - self.encode_interleaved(n[0], n[1:7]), self.encode_right(n[7:]) ) + self.encode_interleaved(n[0], n[1:7]), self.encode_right(n[7:])) diff --git a/share/extensions/Barcode/Ean2.py b/share/extensions/Barcode/Ean2.py new file mode 100644 index 000000000..9aec06a27 --- /dev/null +++ b/share/extensions/Barcode/Ean2.py @@ -0,0 +1,38 @@ +# +# Copyright (C) 2016 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +""" +Python barcode renderer for EAN2 barcodes. Designed for use with Inkscape. +""" + +from .BaseEan import EanBarcode + +FAMS = ['00', '01', '10', '11'] +START = '01011' + +class Ean2(EanBarcode): + """Provide an Ean5 barcode generator""" + length = 2 + name = 'ean5' + + def _encode(self, number): + if len(number) != 2: + number = ([0, 0] + number)[-2:] + self.text = ' '.join(self.space(number)) + family = ((number[0] * 10) + number[1]) % 4 + return START + '01'.join(self.encode_interleaved(family, number, FAMS)) + diff --git a/share/extensions/Barcode/Ean5.py b/share/extensions/Barcode/Ean5.py index d2e38a063..c6f8555fb 100644 --- a/share/extensions/Barcode/Ean5.py +++ b/share/extensions/Barcode/Ean5.py @@ -1,39 +1,38 @@ -# +# # Copyright (C) 2009 Aaron C Spike # 2010 Martin Owens # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for EAN5 barcodes. Designed for use with Inkscape. """ -from BaseEan import EanBarcode +from .BaseEan import EanBarcode -FAMS = [ '11000','10100','10010','10001','01100','00110','00011','01010','01001','00101' ] +FAMS = ['11000', '10100', '10010', '10001', '01100', + '00110', '00011', '01010', '01001', '00101'] START = '01011' class Ean5(EanBarcode): """Provide an Ean5 barcode generator""" - name = 'ean5' + name = 'ean5' length = 5 def _encode(self, number): - self.x += 110.0*self.scale # horiz offset so it does not overlap EAN13 - self.y -= (self.height + 5)*self.scale # move the text to the top - self.label = ' '.join(self.space(number)) - family = sum([int(n)*int(m) for n,m in zip(number, '39393')]) % 10 + self.text = ' '.join(self.space(number)) + family = sum([int(n)*int(m) for n, m in zip(number, '39393')]) % 10 return START + '01'.join(self.encode_interleaved(family, number, FAMS)) diff --git a/share/extensions/Barcode/Ean8.py b/share/extensions/Barcode/Ean8.py index 010dff03e..562952e42 100644 --- a/share/extensions/Barcode/Ean8.py +++ b/share/extensions/Barcode/Ean8.py @@ -13,22 +13,22 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for EAN8 barcodes. Designed for use with Inkscape. """ -from BaseEan import EanBarcode +from .BaseEan import EanBarcode class Ean8(EanBarcode): """Provide an EAN8 barcode generator""" - name = 'ean8' - lengths = [ 7 ] - checks = [ 8 ] + name = 'ean8' + checks = [8] + lengths = [7] def _encode(self, n): """Encode an ean8 barcode""" - self.label = self.space(n[:4], 3, n[4:]) - return self.enclose( self.encode_left(n[:4]), self.encode_right(n[4:]) ) + self.text = self.space(n[:4], 3, n[4:]) + return self.enclose(self.encode_left(n[:4]), self.encode_right(n[4:])) diff --git a/share/extensions/Barcode/Makefile.am b/share/extensions/Barcode/Makefile.am index 7a1e889c0..08e2f58b4 100644 --- a/share/extensions/Barcode/Makefile.am +++ b/share/extensions/Barcode/Makefile.am @@ -12,6 +12,7 @@ barcode_DATA = \ Ean13.py \ Ean8.py \ Ean5.py \ + Ean2.py \ __init__.py \ Rm4scc.py \ Upca.py \ diff --git a/share/extensions/Barcode/Rm4scc.py b/share/extensions/Barcode/Rm4scc.py index d40cd2435..7c36f26ee 100644 --- a/share/extensions/Barcode/Rm4scc.py +++ b/share/extensions/Barcode/Rm4scc.py @@ -66,10 +66,11 @@ check = ['ZUVWXY','501234','B6789A','HCDEFG','NIJKLM','TOPQRS'] (BAR_TRACK, BAR_DOWN, BAR_UP, BAR_FULL, BAR_NONE, WHITE_SPACE) = range(6) class Rm4scc(Barcode): + default_height = 18 + def encode(self, text): result = '' - self.height = 18 text = text.upper() text.replace('(', '') text.replace(')', '') @@ -80,10 +81,8 @@ class Rm4scc(Barcode): for char in text: if map.has_key(char): result = result + map[char] - i = i + 1 - self.inclabel = text return result; # given a string of data, return the check character @@ -117,7 +116,7 @@ class Rm4scc(Barcode): checkchar = check[total_upper][total_lower] return checkchar - def getStyle(self, index): + def get_style(self, index): """Royal Mail Barcodes use a completely different style""" result = { 'width' : 2, 'write' : True, 'top' : 0 } if index == BAR_TRACK: # Track Bar diff --git a/share/extensions/Barcode/Upca.py b/share/extensions/Barcode/Upca.py index bc6ffdf29..32ecc0aa6 100644 --- a/share/extensions/Barcode/Upca.py +++ b/share/extensions/Barcode/Upca.py @@ -13,25 +13,23 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for UPCA barcodes. Designed for use with Inkscape. """ -from BaseEan import EanBarcode +from .BaseEan import EanBarcode class Upca(EanBarcode): """Provides a renderer for EAN12 aka UPC-A Barcodes""" - name = 'upca' - lengths = [ 11 ] - checks = [ 12 ] + name = 'upca' + font_size = 10 + lengths = [11] + checks = [12] def _encode(self, n): """Encode for a UPC-A Barcode""" - self.label = self.space(n[0:1], 3, n[1:6], 4, n[6:11], 3, n[11:]) + self.text = self.space(n[0:1], 3, n[1:6], 4, n[6:11], 3, n[11:]) return self.enclose(self.encode_left(n[0:6]), self.encode_right(n[6:12])) - def fontSize(self): - """We need a bigger barcode""" - return 10 diff --git a/share/extensions/Barcode/Upce.py b/share/extensions/Barcode/Upce.py index d25c9c6cc..193d605a0 100644 --- a/share/extensions/Barcode/Upce.py +++ b/share/extensions/Barcode/Upce.py @@ -13,79 +13,75 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for UPCE barcodes. Designed for use with Inkscape. """ -from BaseEan import EanBarcode -import sys +from .BaseEan import EanBarcode # This is almost exactly the same as the standard FAMILIES # But flipped around and with the first 111000 instead of 000000. -FAMS = [ '111000', '110100', '110010', '110001', '101100', - '100110', '100011', '101010', '101001', '100101' ] +FAMS = ['111000', '110100', '110010', '110001', '101100', + '100110', '100011', '101010', '101001', '100101'] class Upce(EanBarcode): """Generate EAN6/UPC-E barcode generator""" - name = 'upce' - lengths = [ 6, 11 ] - checks = [ 7, 12 ] + name = 'upce' + font_size = 10 + lengths = [6, 11] + checks = [7, 12] + center_bar = '020' def _encode(self, n): """Generate a UPC-E Barcode""" - self.label = self.space(['0'], 2, n[:6], 2, n[-1]) + self.text = self.space(['0'], 2, n[:6], 2, n[-1]) code = self.encode_interleaved(n[-1], n[:6], FAMS) - # 202(guard) + code + 020(center) + 202(guard) - return self.enclose(code, center='020') + return self.enclose(code) - def appendChecksum(self, number): + def append_checksum(self, number): """Generate a UPCE Checksum""" if len(number) == 6: - number = self.ConvertEtoA(number) - result = self.getChecksum(number) - return self.ConvertAtoE(number) + result + number = self.convert_e2a(number) + result = self.get_checksum(number) + return self.convert_a2e(number) + result - def fontSize(self): - """We need a font size of 10""" - return 10 - - def ConvertAtoE(self, number): + def convert_a2e(self, number): """Converting UPC-A to UPC-E, may cause errors.""" # All UPC-E Numbers use number system 0 - if number[0] != '0' or len(number)!=11: + if number[0] != '0' or len(number) != 11: # If not then the code is invalid raise ValueError("Invalid UPC Number") # Most of the conversions deal # with the specific code parts - manufacturer = number[1:6] + maker = number[1:6] product = number[6:11] # There are 4 cases to convert: - if manufacturer[2:] == '000' or manufacturer[2:] == '100' or manufacturer[2:] == '200': + if maker[2:] == '000' or maker[2:] == '100' or maker[2:] == '200': # Maxium number product code digits can be encoded - if product[:2]=='00': - return manufacturer[:2] + product[2:] + manufacturer[2] - elif manufacturer[3:5] == '00': + if product[:2] == '00': + return maker[:2] + product[2:] + maker[2] + elif maker[3:5] == '00': # Now only 2 product code digits can be used - if product[:3]=='000': - return manufacturer[:3] + product[3:] + '3' - elif manufacturer[4] == '0': - # With even more manufacturer code we have less room for product code - if product[:4]=='0000': - return manufacturer[0:4] + product[4] + '4' - elif product[:4]=='0000' and int(product[4]) > 4: + if product[:3] == '000': + return maker[:3] + product[3:] + '3' + elif maker[4] == '0': + # With even more maker code we have less room for product code + if product[:4] == '0000': + return maker[0:4] + product[4] + '4' + elif product[:4] == '0000' and int(product[4]) > 4: # The last recorse is to try and squeeze it in the last 5 numbers # so long as the product is 00005-00009 so as not to conflict with # the 0-4 used above. - return manufacturer + product[4] + return maker + product[4] else: # Invalid UPC-A Numbe raise ValueError("Invalid UPC Number") - def ConvertEtoA(self, number): + def convert_e2a(self, number): """Convert UPC-E to UPC-A by padding with zeros""" # It's more likly to convert this without fault # But we still must be mindful of the 4 conversions diff --git a/share/extensions/Barcode/__init__.py b/share/extensions/Barcode/__init__.py index 9ad412448..fcfcfdbad 100644 --- a/share/extensions/Barcode/__init__.py +++ b/share/extensions/Barcode/__init__.py @@ -39,19 +39,23 @@ For supported barcodes see Barcode module directory. import sys -def getBarcode(code, **kwargs): +class NoBarcode(object): + """Simple class for no barcode""" + def generate(self): + return None + +def getBarcode(code, **kw): """Gets a barcode from a list of available barcode formats""" if not code: return sys.stderr.write("No barcode format given!\n") - code = str(code).replace('-', '').strip() + mod = 'Barcode' try: - barcode = getattr(__import__('Barcode.'+code, fromlist=['Barcode']), code) - return barcode(kwargs) + return getattr(__import__(mod+'.'+code, fromlist=[mod]), code)(kw) except ImportError: sys.stderr.write("Invalid type of barcode: %s\n" % code) except AttributeError: - raise - sys.stderr.write("Barcode module is missing the barcode class: %s\n" % code) + sys.stderr.write("Barcode module is missing barcode class: %s\n" % code) + return NoBarcode() diff --git a/share/extensions/render_barcode.inx b/share/extensions/render_barcode.inx index debefadad..890ffb1bd 100644 --- a/share/extensions/render_barcode.inx +++ b/share/extensions/render_barcode.inx @@ -5,9 +5,10 @@ <dependency type="executable" location="extensions">inkex.py</dependency> <dependency type="executable" location="extensions">render_barcode.py</dependency> <param name="type" type="enum" _gui-text="Barcode Type:"> - <item value="Ean5">EAN5</item> + <item value="Ean2">EAN2 Extension</item> + <item value="Ean5">EAN5 Extension</item> + <item value="Ean13">EAN13 +Extensions</item> <item value="Ean8">EAN8</item> - <item value="Ean13">EAN13</item> <item value="Upca">UPC-A</item> <item value="Upce">UPC-E</item> <item value="Code25i">Code25 Interleaved 2 of 5</item> diff --git a/share/extensions/render_barcode.py b/share/extensions/render_barcode.py index 381f3fc76..63436f03c 100755 --- a/share/extensions/render_barcode.py +++ b/share/extensions/render_barcode.py @@ -11,10 +11,10 @@ # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Inkscape's general barcode extension. Run from within inkscape or use the @@ -27,6 +27,9 @@ from Barcode import getBarcode from simpletransform import computePointInNode class InsertBarcode(inkex.Effect): + """ + Raw barcode Effect class, see Barcode base class. + """ def __init__(self): inkex.Effect.__init__(self) self.OptionParser.add_option("-l", "--height", @@ -43,29 +46,44 @@ class InsertBarcode(inkex.Effect): help="Text to print on barcode") def effect(self): - x, y = computePointInNode(list(self.view_center), self.current_layer) - bargen = getBarcode( self.options.type, + (pos_x, pos_y) = computePointInNode( + list(self.view_center), self.current_layer) + + barcode = getBarcode(self.options.type, text=self.options.text, height=self.options.height, document=self.document, - x=x, y=y, + x=pos_x, y=pos_y, scale=self.unittouu('1px'), - ) - if bargen is not None: - barcode = bargen.generate() - if barcode is not None: - self.current_layer.append(barcode) - else: - sys.stderr.write("No barcode was generated\n") + ).generate() + if barcode is not None: + self.current_layer.append(barcode) else: - sys.stderr.write("Unable to make barcode with: " + str(self.options) + "\n") + sys.stderr.write("No barcode was generated\n") def test_barcode(): - bargen = getBarcode("Ean13", text="123456789101") - if bargen is not None: - barcode = bargen.generate() - if barcode: - print inkex.etree.tostring(barcode, pretty_print=True) + """Run from command line""" + for (kind, text) in ( + ('Ean2', '55'), + ('Ean5', '54321'), + ('Ean8', '0123456'), + ('Ean13', '123456789101'), + ('Ean13', '12345678910155'), + ('Ean13', '12345678910154321'), + ('Code128', 'Martin is Great'), + ('Code25i', '3242322'), + ('Code39', '4443322888'), + ('Code93', '3332222'), + ('Rm4scc', 'ROYAL POINT'), + ('Upca', '12345678911'), + ('Upce', '123456'), + ): + print "RENDER TEST: %s" % kind + bargen = getBarcode(kind, text=text) + if bargen is not None: + barcode = bargen.generate() + if barcode is not None: + print inkex.etree.tostring(barcode, pretty_print=True) if __name__ == '__main__': @@ -73,6 +91,5 @@ if __name__ == '__main__': # Debug mode without inkex test_barcode() exit(0) - e = InsertBarcode() - e.affect() + InsertBarcode().affect() diff --git a/share/icons/icons.svg b/share/icons/icons.svg index ea89282df..8323795bc 100644 --- a/share/icons/icons.svg +++ b/share/icons/icons.svg @@ -4,10 +4,6 @@ <marker inkscape:stockid="Arrow1Lstart" orient="auto" refY="0.0" refX="0.0" id="Arrow1Lstart" style="overflow:visible" inkscape:isstock="true"> <path id="path14867" d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" transform="scale(0.8) translate(12.5,0)" /> </marker> -<linearGradient id="linearGradient10331"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop10333" /> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop10335" /> -</linearGradient> <linearGradient id="linearGradient6206"> <stop style="stop-color:#8ab3df;stop-opacity:1" offset="0" id="stop6208" /> <stop style="stop-color:#5eba69;stop-opacity:1" offset="1" id="stop6210" /> @@ -16,54 +12,10 @@ <stop offset="0" style="stop-color:#1caf19;stop-opacity:1" id="stop6620" /> <stop offset="1" style="stop-color:#6df668;stop-opacity:1" id="stop6622" /> </linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7836"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7838" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7840" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7828"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7830" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7832" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7820"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7822" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7824" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7812"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7814" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7816" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7804"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7806" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7808" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7796"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7798" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7800" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7788"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7790" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7792" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7780"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7782" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7784" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient7772"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop7774" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop7776" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient5602"> -<stop style="stop-color:#cccccc;stop-opacity:1" offset="0" id="stop5604" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop5606" /> -</linearGradient> -<linearGradient id="linearGradient8482" inkscape:collect="always"> -<stop id="stop8484" offset="0" style="stop-color:#b3b3b3;stop-opacity:1" /> -<stop id="stop8486" offset="1" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> <linearGradient id="linearGradient5724"> -<stop style="stop-color:#fffdf8;stop-opacity:1" offset="0.0000000" id="stop5726" /> +<stop style="stop-color:#fffdf8;stop-opacity:1" offset="0" id="stop5726" /> <stop id="stop5730" offset="0.43478271" style="stop-color:#fcfaf5;stop-opacity:1" /> -<stop style="stop-color:#cdccc7;stop-opacity:1" offset="1.0000000" id="stop5728" /> +<stop style="stop-color:#cdccc7;stop-opacity:1" offset="1" id="stop5728" /> </linearGradient> <inkscape:path-effect effect="skeletal" id="path-effect9860" prop_scale="1.03" pattern="M 758,-28 C 731.4411,-14.26939 718,-6 718,0 718,6 731.2091,26.0201 745.0684,28 753.0684,14 745.1344,-7.97121 758,-28 Z M 774,-20 C 762.1542,-11.10251 755.371,10.77622 774,22 762.7419,-2.46745 773.2605,-19.05005 774,-20 Z M 794,-14 C 780.8555,-3.853014 784,6 794,14 788,2 793.2503,-13.90401 794,-14 Z M 824,-19.06843 C 819.1449,-17.91054 817.0099,-10.02155 814,-8 808.1838,-4.093675 803.8914,-5.12669 803.9754,-0.0179303 804.0843,6.61057 806.4811,4.501851 814,8 816.3465,9.091689 821.1139,18.51673 824,18.93157 820,4.93157 820,-7.06843 824,-19.06843 Z" scale_y_rel="true" pattern-nodetypes="czcccccccccssscc" is_visible="true" deactivate_knotholder="false" copytype="single_stretched" spacing="0" normal_offset="0" tang_offset="0" prop_units="false" vertical_pattern="false" fuse_tolerance="0" /> <linearGradient id="linearGradient4832" inkscape:collect="always"> @@ -102,13 +54,13 @@ <marker inkscape:stockid="Arrow1Send" orient="auto" refY="0" refX="0" id="Arrow1Send"> <path id="path4834" d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" transform="matrix(-0.2,0,0,-0.2,-1.2,0)" inkscape:connector-curvature="0" /> </marker> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" y2="311.8198" x2="696.8668" y1="306.0704" x1="693.4026" id="linearGradient4618" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" y2="311.079" x2="698.2679" y1="303.7007" x1="693.279" id="linearGradient4610" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" y2="311.8198" x2="696.8668" y1="306.0704" x1="693.4026" id="linearGradient4618" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" y2="311.079" x2="698.2679" y1="303.7007" x1="693.279" id="linearGradient4610" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="309.7338" x2="698.7269" y1="304.2242" x1="695.0141" id="linearGradient4649" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient16137" y2="729.9991" x2="60.49544" y1="715.913" x1="54.46346" gradientTransform="matrix(1.007189,0,0,0.98662,-0.460106,9.713565)" gradientUnits="userSpaceOnUse" id="linearGradient4849" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient16137" y2="719.9376" x2="54.73784" y1="729.3028" x1="64.23671" gradientTransform="matrix(1.007189,0,0,0.98662,-0.460106,9.713565)" gradientUnits="userSpaceOnUse" id="linearGradient4859" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="125.3162" x2="91.62061" y1="125.3162" x1="84.62939" id="linearGradient4811" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="159" x2="186.7169" y1="159" x1="171.2831" id="linearGradient4819" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="125.3162" x2="91.62061" y1="125.3162" x1="84.62939" id="linearGradient4811" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="159" x2="186.7169" y1="159" x1="171.2831" id="linearGradient4819" inkscape:collect="always" /> <linearGradient id="linearGradient12513"> <stop style="stop-color:black;stop-opacity:1" offset="0" id="stop12515" /> <stop style="stop-color:#2a2a2a;stop-opacity:1" offset="1" id="stop12517" /> @@ -116,11 +68,6 @@ <linearGradient xlink:href="#linearGradient12513" gradientUnits="userSpaceOnUse" y2="712.1672" x2="61.99598" y1="715.7595" x1="64.60896" id="linearGradient12519" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="244.6786" x2="717.6032" y1="249.9805" x1="712.986" gradientTransform="matrix(1,0,0,-1,0.453976,493.3688)" gradientUnits="userSpaceOnUse" id="linearGradient12592" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="240.8761" x2="717.6405" y1="248.9147" x1="713.5084" gradientTransform="matrix(1.016495,0,0,-1,-11.43409,493.3688)" gradientUnits="userSpaceOnUse" id="linearGradient12555" inkscape:collect="always" /> -<linearGradient id="linearGradient4528"> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="0.0000000" id="stop4530" /> -<stop id="stop4534" offset="0.37719297" style="stop-color:#d4e0ef;stop-opacity:1" /> -<stop style="stop-color:#98b6d3;stop-opacity:1" offset="1.0000000" id="stop4532" /> -</linearGradient> <linearGradient id="linearGradient6679"> <stop style="stop-color:#ffeb74;stop-opacity:1" offset="0" id="stop6681" /> <stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop6683" /> @@ -130,12 +77,12 @@ <stop style="stop-color:#ffacb5;stop-opacity:1" offset="1" id="stop5903" /> </linearGradient> <linearGradient id="linearGradient5858"> -<stop style="stop-color:#ffa01e" offset="0.0000000" id="stop5860" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5862" /> +<stop style="stop-color:#ffa01e" offset="0" id="stop5860" /> +<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop5862" /> </linearGradient> <linearGradient id="linearGradient5740"> -<stop id="stop5742" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1" /> +<stop id="stop5742" offset="0" style="stop-color:#ffffff;stop-opacity:1" /> +<stop id="stop5744" offset="1" style="stop-color:#98b6d3;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient5734"> <stop id="stop5736" offset="0" style="stop-color:#8ab3df;stop-opacity:1" /> @@ -143,14 +90,14 @@ </linearGradient> <linearGradient id="linearGradient5704"> <stop style="stop-color:#5a5a5a;stop-opacity:1" offset="0" id="stop5706" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5708" /> +<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop5708" /> </linearGradient> <linearGradient id="linearGradient16137"> -<stop style="stop-color:#db5d00;stop-opacity:1" offset="0.0000000" id="stop16139" /> +<stop style="stop-color:#db5d00;stop-opacity:1" offset="0" id="stop16139" /> <stop style="stop-color:#ffd749;stop-opacity:1" offset="0.35076979" id="stop16141" /> <stop style="stop-color:#fff593;stop-opacity:1" offset="0.59668732" id="stop16143" /> <stop style="stop-color:#fff7c2;stop-opacity:1" offset="0.78382427" id="stop16145" /> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="1.0000000" id="stop16147" /> +<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop16147" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient14614"> <stop style="stop-color:#c80000" offset="0" id="stop14616" /> @@ -158,121 +105,105 @@ </linearGradient> <linearGradient id="linearGradient5204"> <stop style="stop-color:#4e6e90;stop-opacity:1" offset="0" id="stop5206" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5208" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient4343"> -<stop style="stop-color:#fff9f9;stop-opacity:1" offset="0" id="stop4345" /> -<stop style="stop-color:#fff9f9;stop-opacity:0" offset="1" id="stop4347" /> +<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop5208" /> </linearGradient> <linearGradient id="linearGradient6684"> -<stop style="stop-color:#ffbf00;stop-opacity:1" offset="0.0000000" id="stop6686" /> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="1.0000000" id="stop6688" /> +<stop style="stop-color:#ffbf00;stop-opacity:1" offset="0" id="stop6686" /> +<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop6688" /> </linearGradient> <linearGradient id="linearGradient6524"> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="0.0000000" id="stop6526" /> -<stop style="stop-color:#e2e1e1;stop-opacity:1" offset="1.0000000" id="stop6528" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient5663"> -<stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop5665" /> -<stop style="stop-color:#000000;stop-opacity:0" offset="1" id="stop5667" /> +<stop style="stop-color:#ffffff;stop-opacity:1" offset="0" id="stop6526" /> +<stop style="stop-color:#e2e1e1;stop-opacity:1" offset="1" id="stop6528" /> </linearGradient> <linearGradient id="linearGradient10585"> -<stop style="stop-color:#d7d7d7;stop-opacity:1" offset="0.0000000" id="stop10587" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop10595" /> -</linearGradient> -<linearGradient id="linearGradient3480"> -<stop id="stop3482" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient id="linearGradient3466"> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="0.0000000" id="stop3468" /> -<stop style="stop-color:#a0a0a0;stop-opacity:1" offset="1.0000000" id="stop3470" /> +<stop style="stop-color:#d7d7d7;stop-opacity:1" offset="0" id="stop10587" /> +<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop10595" /> </linearGradient> <linearGradient id="linearGradient1887"> -<stop id="stop1888" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1" /> -<stop id="stop1889" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1" /> +<stop id="stop1888" offset="0" style="stop-color:#fffdf8;stop-opacity:1" /> +<stop id="stop1889" offset="1" style="stop-color:#cdccc7;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient2485"> -<stop id="stop2486" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop2487" offset="1.0000000" style="stop-color:#aaaaaa;stop-opacity:1" /> -</linearGradient> -<linearGradient id="linearGradient2888"> -<stop id="stop2889" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop2894" offset="1" style="stop-color:#8ab3de;stop-opacity:1" /> +<stop id="stop2486" offset="0" style="stop-color:#ffffff;stop-opacity:1" /> +<stop id="stop2487" offset="1" style="stop-color:#aaaaaa;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient1610"> -<stop id="stop1611" offset="0.0000000" style="stop-color:#000000;stop-opacity:1" /> +<stop id="stop1611" offset="0" style="stop-color:#000000;stop-opacity:1" /> <stop id="stop3053" offset="0.35076979" style="stop-color:#7f7f7f;stop-opacity:1" /> <stop id="stop3054" offset="0.59668732" style="stop-color:#bfbfbf;stop-opacity:1" /> <stop id="stop3055" offset="0.78382427" style="stop-color:#dfdfdf;stop-opacity:1" /> -<stop id="stop1612" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1" /> +<stop id="stop1612" offset="1" style="stop-color:#ffffff;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient500"> -<stop id="stop1007" offset="0.0000000" style="stop-color:#e7eaf0;stop-opacity:1" /> -<stop id="stop1008" offset="1.0000000" style="stop-color:#bacadd;stop-opacity:1" /> +<stop id="stop1007" offset="0" style="stop-color:#e7eaf0;stop-opacity:1" /> +<stop id="stop1008" offset="1" style="stop-color:#bacadd;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient700"> <stop id="stop347" offset="0" style="stop-color:#376796;stop-opacity:1" /> -<stop id="stop348" offset="1.0000000" style="stop-color:#b0dde2;stop-opacity:1" /> +<stop id="stop348" offset="1" style="stop-color:#b0dde2;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient800"> <stop id="stop998" offset="0" style="stop-color:#f3ff49;stop-opacity:1" /> <stop id="stop999" offset="1" style="stop-color:#ffa01e;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient900"> -<stop id="stop1014" offset="0.0000000" style="stop-color:#e4ffa6;stop-opacity:1" /> -<stop id="stop1015" offset="1.0000000" style="stop-color:#3a7801;stop-opacity:1" /> +<stop id="stop1014" offset="0" style="stop-color:#e4ffa6;stop-opacity:1" /> +<stop id="stop1015" offset="1" style="stop-color:#3a7801;stop-opacity:1" /> </linearGradient> <linearGradient xlink:href="#linearGradient5734" gradientTransform="translate(1.863401,-1.999999)" gradientUnits="userSpaceOnUse" y2="164.9546" x2="23.61528" y1="170.3782" x1="22.45293" id="linearGradient3628" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient4935" gradientTransform="matrix(0.89781,0,0,0.89781,-0.81747,10.4227)" gradientUnits="userSpaceOnUse" y2="96.397" x2="-14.7622" y1="107.85" x1="-0.535315" id="linearGradient10520" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" gradientUnits="userSpaceOnUse" y2="240.354" x2="64.5183" y1="236.4112" x1="61.44776" id="linearGradient4005" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" gradientUnits="userSpaceOnUse" y2="243.4301" x2="62.51569" y1="239.1431" x1="59.4322" id="linearGradient4013" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="239.2758" x2="63.40303" y1="236" x1="58.95215" id="linearGradient4072" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="239.4902" x2="62.5" y1="235.1341" x1="59" id="linearGradient4080" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(0,0.0207681)" gradientUnits="userSpaceOnUse" y2="257.662" x2="14.32074" y1="251" x1="8" id="linearGradient4088" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="257.662" x2="14.32074" y1="251" x1="8" gradientUnits="userSpaceOnUse" id="linearGradient3208" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="186.1308" x2="-35.44985" y1="186.1107" x1="-43.56253" gradientTransform="matrix(0,1.686539,-1.016949,0,148.1771,249.4699)" gradientUnits="userSpaceOnUse" id="linearGradient6665" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(0,1.007194,-1.016949,0,148.1771,220.2629)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6667" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(1.003713,0,0,1,0.163202,0)" gradientUnits="userSpaceOnUse" y2="187" x2="-30.05" y1="187" x1="-43.95" id="linearGradient7544" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="186.7495" x2="-34.24569" y1="183.3679" x1="-42.13395" gradientUnits="userSpaceOnUse" id="linearGradient7548" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="239.2758" x2="63.40303" y1="236" x1="58.95215" id="linearGradient4072" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="239.4902" x2="62.5" y1="235.1341" x1="59" id="linearGradient4080" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(0,0.0207681)" gradientUnits="userSpaceOnUse" y2="257.662" x2="14.32074" y1="251" x1="8" id="linearGradient4088" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="257.662" x2="14.32074" y1="251" x1="8" gradientUnits="userSpaceOnUse" id="linearGradient3208" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="186.1308" x2="-35.44985" y1="186.1107" x1="-43.56253" gradientTransform="matrix(0,1.686539,-1.016949,0,148.1771,249.4699)" gradientUnits="userSpaceOnUse" id="linearGradient6665" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(0,1.007194,-1.016949,0,148.1771,220.2629)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6667" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1.003713,0,0,1,0.163202,0)" gradientUnits="userSpaceOnUse" y2="187" x2="-30.05" y1="187" x1="-43.95" id="linearGradient7544" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="186.7495" x2="-34.24569" y1="183.3679" x1="-42.13395" gradientUnits="userSpaceOnUse" id="linearGradient7548" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1610" gradientTransform="translate(-0.96863,1.05455)" y2="182.3506" x2="-34.67712" y1="183.8118" x1="-33.56642" gradientUnits="userSpaceOnUse" id="linearGradient10560" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" gradientTransform="translate(-139.9686,15.05455)" gradientUnits="userSpaceOnUse" y2="166.1914" x2="110.1206" y1="163.4373" x1="107.9483" id="linearGradient10579" inkscape:collect="always" /> +<radialGradient xlink:href="#BlackTransparent" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialBlackTransparent" inkscape:collect="always" /> <radialGradient xlink:href="#linearGradient10585" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.173327,0.323606,-0.837131,0.448376,121.9729,116.365)" r="4.772141" fy="185.3796" fx="-39.00645" cy="185.3796" cx="-39.00645" id="radialGradient10597" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1610" gradientUnits="userSpaceOnUse" y2="215.9465" x2="143.2251" y1="214.8174" x1="148" id="linearGradient10641" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" gradientTransform="matrix(1.02198,0,0,1,-8.949568,-1)" gradientUnits="userSpaceOnUse" y2="264.6892" x2="366.0981" y1="261.2473" x1="361.7094" id="linearGradient11815" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3466" y2="126.5225" x2="338.0838" y1="117.2489" x1="337.1166" gradientTransform="rotate(-45,340.6656,118.1192)" gradientUnits="userSpaceOnUse" id="linearGradient11021" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient2485" y2="126.5225" x2="338.0838" y1="117.2489" x1="337.1166" gradientTransform="rotate(-45,340.6656,118.1192)" gradientUnits="userSpaceOnUse" id="linearGradient11021" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.33896" x2="414.6234" y1="46.33899" x1="404.6787" gradientTransform="matrix(0.539989,0,0,0.883257,-125.2513,264.0607)" gradientUnits="userSpaceOnUse" id="linearGradient13469" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.33905" x2="415.1663" y1="46.33899" x1="404.6787" gradientTransform="matrix(0.666914,0,0,0.896427,-159.6137,266.4372)" gradientUnits="userSpaceOnUse" id="linearGradient13473" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.33901" x2="415.2005" y1="46.33899" x1="404.6787" gradientTransform="matrix(0.868799,0,0,0.896064,-239.3931,260.4497)" gradientUnits="userSpaceOnUse" id="linearGradient13477" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" gradientTransform="translate(41.00246,10.00003)" gradientUnits="userSpaceOnUse" y2="293" x2="76.13622" y1="293" x1="70" id="linearGradient14343" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5734" gradientUnits="userSpaceOnUse" y2="307.8311" x2="80.62299" y1="311.4508" x1="83.82937" id="linearGradient14389" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient4528" y2="76.98393" x2="690" y1="67.59227" x1="705.2217" gradientTransform="matrix(1.124999,0,0,1.125,-85.22497,-7.125909)" gradientUnits="userSpaceOnUse" id="linearGradient18352" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="76.98393" x2="690" y1="67.59227" x1="705.2217" gradientTransform="matrix(1.124999,0,0,1.125,-85.22497,-7.125909)" gradientUnits="userSpaceOnUse" id="linearGradient18352" inkscape:collect="always" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient7927" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.124777,0,0,1.399469,339.507,-41.54364)" x1="15.15684" y1="214.0084" x2="22.04275" y2="218.3974" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient24464" id="linearGradient7931" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.87731,0,0,0.991952,344.0693,46.88201)" x1="19.08596" y1="219.6944" x2="16.10928" y2="214.3821" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient24464" id="linearGradient7929" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.165669,0,0,1.655559,338.7499,-97.1359)" x1="17.48326" y1="215.0097" x2="20.98923" y2="218.8156" /> <linearGradient xlink:href="#linearGradient800" y2="174.9393" x2="974.4352" y1="172.4419" x1="974.4352" gradientTransform="matrix(0.7,0,0,1,311.2,8.5)" gradientUnits="userSpaceOnUse" id="linearGradient5644" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="185" x2="992.7362" y1="181.5609" x1="994.1533" id="linearGradient5658" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient5663" gradientTransform="translate(0.0706497,-0.23015)" gradientUnits="userSpaceOnUse" y2="179.1932" x2="990.5735" y1="185.1891" x1="989.8774" id="linearGradient5669" inkscape:collect="always" /> +<linearGradient xlink:href="#BlackTransparent" gradientTransform="translate(0.0706497,-0.23015)" gradientUnits="userSpaceOnUse" y2="179.1932" x2="990.5735" y1="185.1891" x1="989.8774" id="linearGradient5669" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="184.8026" x2="979.8044" y1="182.4686" x1="974.1975" gradientUnits="userSpaceOnUse" id="linearGradient5693" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="184.715" x2="974.5747" y1="178.9373" x1="967.739" gradientUnits="userSpaceOnUse" id="linearGradient5695" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="184.715" x2="974.5747" y1="178.9373" x1="967.739" gradientUnits="userSpaceOnUse" id="linearGradient5695" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="80.14188" x2="250.665" y1="73.65818" x1="256.8945" gradientTransform="matrix(0.939394,0,0,1,15.63564,3.573014)" gradientUnits="userSpaceOnUse" id="linearGradient11197" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1610" y2="79.5" x2="269.5485" y1="79.5" x1="261.1073" gradientTransform="translate(0.514439,0.573014)" gradientUnits="userSpaceOnUse" id="linearGradient11210" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-0.0158611,0.0730141)" gradientUnits="userSpaceOnUse" y2="77.99037" x2="258.0151" y1="70.98074" x1="266.0303" id="linearGradient11286" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-0.0158611,0.0730141)" gradientUnits="userSpaceOnUse" y2="78.83605" x2="262.5385" y1="74.38268" x1="266.6476" id="linearGradient11294" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(1,0,0,0.982332,-0.0158611,1.3452)" gradientUnits="userSpaceOnUse" y2="71.03742" x2="256.5" y1="69.71401" x1="261.0343" id="linearGradient11302" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-0.0158611,0.0730141)" gradientUnits="userSpaceOnUse" y2="77.99037" x2="258.0151" y1="70.98074" x1="266.0303" id="linearGradient11286" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-0.0158611,0.0730141)" gradientUnits="userSpaceOnUse" y2="78.83605" x2="262.5385" y1="74.38268" x1="266.6476" id="linearGradient11294" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1,0,0,0.982332,-0.0158611,1.3452)" gradientUnits="userSpaceOnUse" y2="71.03742" x2="256.5" y1="69.71401" x1="261.0343" id="linearGradient11302" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" gradientUnits="userSpaceOnUse" y2="103.556" x2="275.4545" y1="95.67754" x1="270.1718" id="linearGradient11335" inkscape:collect="always" /> <radialGradient xlink:href="#linearGradient10585" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,1.033243,0,-3.241221)" r="7.520315" fy="95.72343" fx="269.9677" cy="95.72343" cx="269.9677" id="radialGradient11343" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="103.556" x2="275.4545" y1="95.67754" x1="270.1718" id="linearGradient11359" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(1,0,0,0.940296,0,5.373155)" gradientUnits="userSpaceOnUse" y2="93.16346" x2="276.8255" y1="90" x1="271.2126" id="linearGradient11367" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,139.2452,218.9968)" gradientUnits="userSpaceOnUse" id="linearGradient6573" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="103.556" x2="275.4545" y1="95.67754" x1="270.1718" id="linearGradient11359" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1,0,0,0.940296,0,5.373155)" gradientUnits="userSpaceOnUse" y2="93.16346" x2="276.8255" y1="90" x1="271.2126" id="linearGradient11367" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,139.2452,218.9968)" gradientUnits="userSpaceOnUse" id="linearGradient6573" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient900" y2="264.4648" x2="367.2651" y1="261.2473" x1="361.6976" gradientTransform="matrix(1.02198,0,0,1,-8.921317,-0.991053)" gradientUnits="userSpaceOnUse" id="linearGradient6662" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,139.2735,219.0057)" gradientUnits="userSpaceOnUse" id="linearGradient6664" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,139.2735,219.0057)" gradientUnits="userSpaceOnUse" id="linearGradient6664" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" gradientUnits="userSpaceOnUse" y2="190.2341" x2="-41.62015" y1="183.1965" x1="-38.78242" id="linearGradient6672" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" gradientUnits="userSpaceOnUse" y2="183.8145" x2="-40.58511" y1="189.5493" x1="-42.30934" id="linearGradient6690" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" gradientTransform="matrix(1.003597,0,0,1,0.158094,0)" gradientUnits="userSpaceOnUse" y2="180.95" x2="-32.95787" y1="175.9331" x1="-34.94375" id="linearGradient6727" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="rotate(90,-37.4946,182.5022)" gradientUnits="userSpaceOnUse" id="linearGradient6731" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="rotate(90,-37.4946,182.5022)" gradientUnits="userSpaceOnUse" id="linearGradient6731" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="184.4165" x2="-32.04113" y1="186.8153" x1="-36.94574" gradientUnits="userSpaceOnUse" id="linearGradient6737" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="rotate(90,-37.4946,182.5022)" gradientUnits="userSpaceOnUse" id="linearGradient6739" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(1.003713,0,0,1,0.163202,0)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6743" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="matrix(1.003597,0,0,1,0.158094,0)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6745" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient4343" gradientTransform="translate(41.8634,-175.7596)" gradientUnits="userSpaceOnUse" y2="335.0308" x2="-10.52821" y1="332.0769" x1="-13.05958" id="linearGradient4349" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="rotate(90,-37.4946,182.5022)" gradientUnits="userSpaceOnUse" id="linearGradient6739" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1.003713,0,0,1,0.163202,0)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6743" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1.003597,0,0,1,0.158094,0)" y2="187" x2="-30.05" y1="187" x1="-43.95" gradientUnits="userSpaceOnUse" id="linearGradient6745" inkscape:collect="always" /> +<linearGradient xlink:href="#WhiteTransparent" gradientTransform="translate(41.8634,-175.7596)" gradientUnits="userSpaceOnUse" y2="335.0308" x2="-10.52821" y1="332.0769" x1="-13.05958" id="linearGradient4349" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientTransform="matrix(1,0,0,0.973548,1.5,3.761392)" gradientUnits="userSpaceOnUse" y2="178.0223" x2="15.84741" y1="174.9419" x1="14.01976" id="linearGradient4360" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5734" gradientTransform="matrix(1,0,0,0.973548,1.5,3.761392)" gradientUnits="userSpaceOnUse" y2="175.9469" x2="13.84897" y1="177.4415" x1="15" id="linearGradient4369" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="30.79385" x2="917.3691" y1="19.21119" x1="904.083" gradientTransform="matrix(0.839788,0,0,0.88527,150.222,-1.762836)" gradientUnits="userSpaceOnUse" id="linearGradient5494" inkscape:collect="always" /> @@ -280,20 +211,20 @@ <linearGradient xlink:href="#linearGradient1887" gradientTransform="matrix(1,0,0,0.900774,0,8.915579)" gradientUnits="userSpaceOnUse" y2="88.23264" x2="499.0386" y1="83.8125" x1="494.3125" id="linearGradient5761" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient900" y2="266.8492" x2="368.4475" y1="259.1585" x1="359.5376" gradientTransform="matrix(1.270957,0,0,1.195374,110.6171,-279.6099)" gradientUnits="userSpaceOnUse" id="linearGradient6204" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" gradientUnits="userSpaceOnUse" y2="28.3706" x2="572.5851" y1="26.23856" x1="573.1181" id="linearGradient6220" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="38.68793" x2="575.8765" y1="24.52513" x1="558.0709" id="linearGradient6255" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientUnits="userSpaceOnUse" y2="28.21831" x2="574.5176" y1="22.43135" x1="562.2006" id="linearGradient6263" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="34.17011" x2="570.1624" y1="26.23856" x1="566.2487" gradientUnits="userSpaceOnUse" id="linearGradient6330" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" y2="33.63204" x2="576.5" y1="28.64459" x1="574.6573" gradientTransform="translate(-6)" gradientUnits="userSpaceOnUse" id="linearGradient6332" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="38.68793" x2="575.8765" y1="24.52513" x1="558.0709" id="linearGradient6255" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="28.21831" x2="574.5176" y1="22.43135" x1="562.2006" id="linearGradient6263" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="34.17011" x2="570.1624" y1="26.23856" x1="566.2487" gradientUnits="userSpaceOnUse" id="linearGradient6330" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="33.63204" x2="576.5" y1="28.64459" x1="574.6573" gradientTransform="translate(-6)" gradientUnits="userSpaceOnUse" id="linearGradient6332" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="120.5792" x2="98.37736" y1="120.625" x1="95.23788" gradientTransform="matrix(0.833333,0,0,1,7.291667,1.125)" gradientUnits="userSpaceOnUse" id="linearGradient4723" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="128.7048" x2="70.21282" y1="132.3595" x1="66.82119" gradientTransform="matrix(0.845944,0,0,1,30.52281,-4.619314)" gradientUnits="userSpaceOnUse" id="linearGradient4726" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="128.7048" x2="70.21282" y1="132.3595" x1="66.82119" gradientTransform="matrix(0.845944,0,0,1,30.52281,-4.619314)" gradientUnits="userSpaceOnUse" id="linearGradient4726" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5858" y2="120.8261" x2="73.44604" y1="122.5006" x1="64.94328" gradientTransform="matrix(0.845944,0,0,1,30.563,-0.625005)" gradientUnits="userSpaceOnUse" id="linearGradient4728" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" gradientUnits="userSpaceOnUse" y2="125.9596" x2="89.70349" y1="125.8732" x1="85.64042" id="linearGradient5476" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" gradientUnits="userSpaceOnUse" y2="118.8367" x2="89.00298" y1="120.6427" x1="85.86581" id="linearGradient5492" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" y2="41.695" x2="-21.25" y1="34.12175" x1="-26.25288" gradientTransform="translate(200,120)" gradientUnits="userSpaceOnUse" id="linearGradient5524" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" gradientUnits="userSpaceOnUse" y2="146.119" x2="172.708" y1="167.853" x1="182.981" id="linearGradient5536" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="41.695" x2="-21.25" y1="34.12175" x1="-26.25288" gradientTransform="translate(200,120)" gradientUnits="userSpaceOnUse" id="linearGradient5524" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" gradientUnits="userSpaceOnUse" y2="146.119" x2="172.708" y1="167.853" x1="182.981" id="linearGradient5536" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient16137" gradientTransform="translate(-474.994,-196)" y2="304.7992" x2="496.6998" y1="311.0814" x1="503.4623" gradientUnits="userSpaceOnUse" id="linearGradient14646" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient700" gradientTransform="translate(-474.994,-196)" y2="298.3802" x2="502.1328" y1="299.7858" x1="505.6819" gradientUnits="userSpaceOnUse" id="linearGradient14650" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-474.994,-196)" y2="301.2458" x2="503.2033" y1="296.2422" x1="494.7954" gradientUnits="userSpaceOnUse" id="linearGradient14652" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-474.994,-196)" y2="301.2458" x2="503.2033" y1="296.2422" x1="494.7954" gradientUnits="userSpaceOnUse" id="linearGradient14652" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient14614" gradientTransform="translate(-474.994,-196)" y2="300.8249" x2="500.2523" y1="302.0055" x1="503.9067" gradientUnits="userSpaceOnUse" id="linearGradient14654" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="213.663" x2="15.9855" y1="219.5232" x1="19.47374" gradientTransform="matrix(0.75262,0,0,0.59916,3.63262,86.9905)" gradientUnits="userSpaceOnUse" id="linearGradient5679" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" gradientTransform="translate(-0.93075)" gradientUnits="userSpaceOnUse" y2="219.0135" x2="20.6591" y1="215.0097" x1="17.62746" id="linearGradient5694" inkscape:collect="always" /> @@ -329,7 +260,7 @@ <linearGradient xlink:href="#linearGradient5704" y2="210.8717" x2="16.80415" y1="205.4478" x1="11.87961" gradientTransform="matrix(1.49944,0,0,1.713117,-7.27874,-143.5936)" gradientUnits="userSpaceOnUse" id="linearGradient6138" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="215.1112" x2="14.53613" y1="219.2215" x1="21.80956" gradientTransform="matrix(1.66352,0,0,3.319677,-16.32051,-505.9534)" gradientUnits="userSpaceOnUse" id="linearGradient6140" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.2771" x2="17.98802" y1="214.6474" x1="16.35263" gradientTransform="matrix(1.252006,0,0,1.989026,-8.72932,-217.1732)" gradientUnits="userSpaceOnUse" id="linearGradient6142" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3466" gradientUnits="userSpaceOnUse" y2="78.5" x2="258.9182" y1="80.00585" x1="256.3262" id="linearGradient6187" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient2485" gradientUnits="userSpaceOnUse" y2="78.5" x2="258.9182" y1="80.00585" x1="256.3262" id="linearGradient6187" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="211.8799" x2="15.65274" y1="205.4478" x1="11.87961" gradientTransform="matrix(1.249566,0,0,1.420757,477.3232,-211.4881)" gradientUnits="userSpaceOnUse" id="linearGradient6224" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="214.445" x2="16.37369" y1="219.0054" x1="21.88428" gradientTransform="matrix(1.332493,0,0,2.661873,470.7912,-492.2235)" gradientUnits="userSpaceOnUse" id="linearGradient6226" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.1995" x2="17.85282" y1="214.6697" x1="16.46609" gradientTransform="matrix(1.002867,0,0,1.594894,476.8719,-260.6659)" gradientUnits="userSpaceOnUse" id="linearGradient6228" inkscape:collect="always" /> @@ -338,7 +269,7 @@ <linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="25.59215" x2="283.1054" y1="22.03839" x1="279.645" id="linearGradient5620" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientUnits="userSpaceOnUse" y2="309.5" x2="81.92466" y1="306.8306" x1="79.59917" id="linearGradient5632" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(1,-1.24044)" gradientUnits="userSpaceOnUse" y2="169.5792" x2="21.9317" y1="167.0667" x1="19.57576" id="linearGradient5670" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient5663" gradientTransform="rotate(-12.16379,92.75996,132.2011)" gradientUnits="userSpaceOnUse" y2="120.936" x2="87.87154" y1="124.9658" x1="94.05392" id="linearGradient6123" inkscape:collect="always" /> +<linearGradient xlink:href="#BlackTransparent" gradientTransform="rotate(-12.16379,92.75996,132.2011)" gradientUnits="userSpaceOnUse" y2="120.936" x2="87.87154" y1="124.9658" x1="94.05392" id="linearGradient6123" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="247.0562" x2="497.458" y1="250.0241" x1="500.0935" gradientTransform="rotate(-12.16378,-271.0474,2116.582)" gradientUnits="userSpaceOnUse" id="linearGradient6168" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="121.3373" x2="97.37693" y1="118.015" x1="94.58905" gradientTransform="matrix(0.97755,-0.210707,0.218379,1.013142,-30.17658,18.69473)" gradientUnits="userSpaceOnUse" id="linearGradient6170" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(0.30283,0.11441)" gradientUnits="userSpaceOnUse" y2="129.0092" x2="86.0206" y1="115.2534" x1="75.09241" id="linearGradient6189" inkscape:collect="always" /> @@ -366,17 +297,17 @@ <linearGradient xlink:href="#linearGradient5740" y2="234.0031" x2="112.201" y1="221.0688" x1="101.0939" gradientTransform="matrix(1.13356,0,0,1.133368,339.5737,-131.407)" gradientUnits="userSpaceOnUse" id="linearGradient9254" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="188.4128" x2="176.8627" y1="157.8208" x1="144.0824" gradientTransform="matrix(0.809546,0,0,0.809417,342.9983,-4.125322)" gradientUnits="userSpaceOnUse" id="linearGradient9256" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="1.491036" x2="223.9659" y1="15.97338" x1="206.4689" gradientTransform="matrix(1.006993,0,0,1,-1.456289,0.0155694)" gradientUnits="userSpaceOnUse" id="linearGradient6160" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient4528" r="8" fy="72.99935" fx="717.9988" cy="72.99935" cx="717.9988" gradientTransform="matrix(1.12634,-0.471221,0.445195,1.164731,-121.1975,328.3106)" gradientUnits="userSpaceOnUse" id="radialGradient4374" inkscape:collect="always" /> +<radialGradient xlink:href="#linearGradient5740" r="8" fy="72.99935" fx="717.9988" cy="72.99935" cx="717.9988" gradientTransform="matrix(1.12634,-0.471221,0.445195,1.164731,-121.1975,328.3106)" gradientUnits="userSpaceOnUse" id="radialGradient4374" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6524" y2="28.96459" x2="843.9635" y1="45.30668" x1="860.239" gradientUnits="userSpaceOnUse" id="linearGradient3749" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6524" y2="28.96459" x2="843.9635" y1="45.30668" x1="860.239" gradientUnits="userSpaceOnUse" id="linearGradient3755" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" y2="153.3422" x2="176.0136" y1="167.8534" x1="182.9813" gradientUnits="userSpaceOnUse" id="linearGradient8492" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" y2="37.21967" x2="-23.22442" y1="34.12175" x1="-26.25288" gradientTransform="translate(200,120)" gradientUnits="userSpaceOnUse" id="linearGradient8494" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="153.3422" x2="176.0136" y1="167.8534" x1="182.9813" gradientUnits="userSpaceOnUse" id="linearGradient8492" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="37.21967" x2="-23.22442" y1="34.12175" x1="-26.25288" gradientTransform="translate(200,120)" gradientUnits="userSpaceOnUse" id="linearGradient8494" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="120.5792" x2="98.37736" y1="120.625" x1="95.23788" gradientTransform="matrix(0.833333,0,0,1,7.291667,1.125)" gradientUnits="userSpaceOnUse" id="linearGradient8496" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="117.8514" x2="89.75233" y1="119.8891" x1="85.2589" gradientUnits="userSpaceOnUse" id="linearGradient8498" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5858" y2="117.4021" x2="75.1424" y1="123.2129" x1="65.27716" gradientTransform="matrix(0.845944,0,0,1,30.563,-0.625005)" gradientUnits="userSpaceOnUse" id="linearGradient8500" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="125.9596" x2="89.70349" y1="125.8732" x1="85.64042" gradientUnits="userSpaceOnUse" id="linearGradient8502" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient4528" y2="246.8192" x2="683.847" y1="252.3578" x1="673.6465" gradientUnits="userSpaceOnUse" id="linearGradient8709" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient4528" y2="251.9159" x2="678.7324" y1="256.0717" x1="671.7674" gradientUnits="userSpaceOnUse" id="linearGradient8711" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="246.8192" x2="683.847" y1="252.3578" x1="673.6465" gradientUnits="userSpaceOnUse" id="linearGradient8709" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="251.9159" x2="678.7324" y1="256.0717" x1="671.7674" gradientUnits="userSpaceOnUse" id="linearGradient8711" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient4218" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient4220" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient4249" inkscape:collect="always" /> @@ -394,9 +325,9 @@ <linearGradient xlink:href="#linearGradient5740" y2="212.9507" x2="10.29425" y1="219.117" x1="21.80956" gradientTransform="matrix(1.66352,0,0,3.319677,-16.32051,-505.9534)" gradientUnits="userSpaceOnUse" id="linearGradient5956" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.2771" x2="17.98802" y1="213.6587" x1="16.81461" gradientTransform="matrix(1.252006,0,0,1.989026,-8.72932,-217.1732)" gradientUnits="userSpaceOnUse" id="linearGradient5958" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="264.6892" x2="366.0981" y1="261.2473" x1="361.7094" gradientTransform="matrix(1.02198,0,0,1,-306.8063,31.29639)" gradientUnits="userSpaceOnUse" id="linearGradient5960" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,-158.6115,251.2932)" gradientUnits="userSpaceOnUse" id="linearGradient5962" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,-158.6115,251.2932)" gradientUnits="userSpaceOnUse" id="linearGradient5962" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="264.6892" x2="366.0981" y1="261.2473" x1="361.7094" gradientTransform="matrix(1.02198,0,0,1,-307.3063,52.7964)" gradientUnits="userSpaceOnUse" id="linearGradient6122" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,-159.1115,272.7932)" gradientUnits="userSpaceOnUse" id="linearGradient6125" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="178.6575" x2="-33.69472" y1="187.863" x1="-37.33073" gradientTransform="matrix(0,1,-1.02198,0,-159.1115,272.7932)" gradientUnits="userSpaceOnUse" id="linearGradient6125" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="212.9507" x2="10.29425" y1="219.117" x1="21.80956" gradientTransform="matrix(1.66352,0,0,3.319677,33.71939,-404.9123)" gradientUnits="userSpaceOnUse" id="linearGradient6146" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.2771" x2="17.98802" y1="213.6587" x1="16.81461" gradientTransform="matrix(1.252006,0,0,1.989026,41.31058,-116.1321)" gradientUnits="userSpaceOnUse" id="linearGradient6148" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="210.8717" x2="16.80415" y1="205.4478" x1="11.87961" gradientTransform="matrix(1.49944,0,0,1.713117,42.76116,-42.5525)" gradientUnits="userSpaceOnUse" id="linearGradient6151" inkscape:collect="always" /> @@ -418,17 +349,17 @@ <linearGradient xlink:href="#linearGradient4721" y2="107.4082" x2="334.4963" y1="86.63547" x1="334.4035" gradientTransform="matrix(0.898695,0,0,0.666666,43.41501,33.33337)" gradientUnits="userSpaceOnUse" id="linearGradient4718" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient5684" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient5686" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-105,-15)" y2="213" x2="176" y1="213" x1="160" gradientUnits="userSpaceOnUse" id="linearGradient5692" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" gradientTransform="translate(-105,-15)" y2="213.0785" x2="175.2934" y1="213" x1="160" gradientUnits="userSpaceOnUse" id="linearGradient5696" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-105,-15)" y2="213" x2="176" y1="213" x1="160" gradientUnits="userSpaceOnUse" id="linearGradient5692" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" gradientTransform="translate(-105,-15)" y2="213.0785" x2="175.2934" y1="213" x1="160" gradientUnits="userSpaceOnUse" id="linearGradient5696" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient5728" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient5730" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient5750" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient5752" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="311.079" x2="698.2679" y1="303.7007" x1="693.279" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" id="linearGradient5777" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="311.8198" x2="696.8668" y1="306.0704" x1="693.4026" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" id="linearGradient5779" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="213" x2="176" y1="213" x1="160" gradientTransform="translate(-147.4999,-94.5)" gradientUnits="userSpaceOnUse" id="linearGradient5841" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="311.079" x2="698.2679" y1="303.7007" x1="693.279" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" id="linearGradient5777" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="311.8198" x2="696.8668" y1="306.0704" x1="693.4026" gradientTransform="translate(-0.999998,-0.937496)" gradientUnits="userSpaceOnUse" id="linearGradient5779" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="213" x2="176" y1="213" x1="160" gradientTransform="translate(-147.4999,-94.5)" gradientUnits="userSpaceOnUse" id="linearGradient5841" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="218.5416" x2="173.724" y1="209.1406" x1="163.8594" gradientTransform="matrix(1.102855,0,0,1.148517,-164.5451,-124.7814)" gradientUnits="userSpaceOnUse" id="linearGradient5844" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-165.0966,-125.3557)" gradientUnits="userSpaceOnUse" id="linearGradient5846" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-165.0966,-125.3557)" gradientUnits="userSpaceOnUse" id="linearGradient5846" inkscape:collect="always" /> <radialGradient xlink:href="#linearGradient4798" r="9.41594" fy="-2729.78" fx="-293.812" cy="-2729.78" cx="-293.812" gradientTransform="matrix(1.20758,0.0165454,0.27747,1.03554,1573.42,3294.03)" gradientUnits="userSpaceOnUse" id="radialGradient4365" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient4935" gradientTransform="matrix(1.00712,0,0,1.00712,16.0574,-204.726)" y2="96.397" x2="-14.7622" y1="107.85" x1="-0.535315" gradientUnits="userSpaceOnUse" id="linearGradient4246" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1610" gradientTransform="matrix(1.062197,0,0,0.9973142,-1261.924,1.593331)" gradientUnits="userSpaceOnUse" y2="308.5" x2="536.5" y1="308.5" x1="522.991" id="linearGradient9331" inkscape:collect="always" /> @@ -446,7 +377,7 @@ <linearGradient xlink:href="#linearGradient4832" gradientTransform="matrix(0.7598957,0,0,0.7598957,329.9618,-256.886)" y2="481.6766" x2="373.9961" y1="508.1568" x1="348.706" gradientUnits="userSpaceOnUse" id="linearGradient5190" inkscape:collect="always" /> <linearGradient id="linearGradient19967-4-5"> <stop id="stop19969-37-6" offset="0" style="stop-color:#73d216" /> -<stop id="stop19971-1-4" offset="1.0000000" style="stop-color:#4e9a06;stop-opacity:1" /> +<stop id="stop19971-1-4" offset="1" style="stop-color:#4e9a06;stop-opacity:1" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient19967-4-5" id="radialSnotBall" gradientUnits="userSpaceOnUse" cx="366.7874" cy="1670.756" fx="366.7874" fy="1670.756" r="4.275793" /> <clipPath id="cieClip" clipPathUnits="userSpaceOnUse"> @@ -454,8 +385,8 @@ </clipPath> <radialGradient xlink:href="#linearGradient5724" r="11.5" fy="216.4737" fx="778" cy="216.4737" cx="778" gradientTransform="matrix(1,0,0,0.826087,0,38.17391)" gradientUnits="userSpaceOnUse" id="radialGradient8472" inkscape:collect="always" /> <radialGradient xlink:href="#linearGradient5724" r="11.5" fy="209.35" fx="777" cy="209.35" cx="777" gradientTransform="matrix(1.434932,0,0,0.608696,-337.9418,82.56952)" gradientUnits="userSpaceOnUse" id="radialGradient8474" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient8482" gradientUnits="userSpaceOnUse" y2="214.25" x2="783" y1="200.25" x1="770.5" id="linearGradient5633" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient8482" gradientUnits="userSpaceOnUse" y2="218.25" x2="782" y1="216.875" x1="763" id="linearGradient5637" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient10585" gradientUnits="userSpaceOnUse" y2="214.25" x2="783" y1="200.25" x1="770.5" id="linearGradient5633" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient10585" gradientUnits="userSpaceOnUse" y2="218.25" x2="782" y1="216.875" x1="763" id="linearGradient5637" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6206" id="linearGradient6212" x1="-15.4575" y1="94.60669" x2="-0.9575" y2="109.6067" gradientUnits="userSpaceOnUse" /> <clipPath clipPathUnits="userSpaceOnUse" id="clipoutline1"> <path id="outline1" d="M 54.1,12.5 12.9,54.7 C -2.7,70.3 23,69 32.3,74.9 36.6,77.7 18.5,81.3 22.2,85 25.8,88.7 43.9,92.1 47.5,95.7 51.1,99.4 40.2,103.3 43.8,107 47.3,110.7 55.7,107.2 57.2,115.6 58.3,121.8 72.6,118.7 79,113.4 83,110 72.1,110 75.7,106.3 84.7,97.2 92.7,102.2 96,93.8 97.8,89.3 82.4,86.1 86.5,83.2 96.3,76.3 132.3,72.8 115.7,56.2 L 73,12.5 C 67.7,7.5 59,7.5 54.1,12.5 Z M 44.2,77.2 C 45.1,77.2 75,81.2 63.5,84.3 59.1,85.5 38.9,77.2 44.2,77.2 Z M 101.4,93.8 C 101.4,95.9 117.7,97.1 116.8,93.3 115.5,86.9 103.2,87.4 101.4,93.8 Z M 31.9,104.9 C 35.6,108.1 41.2,104.2 43,99.7 39.4,95 26.1,100 31.9,104.9 Z M 99.4,98.2 C 94.8,102.4 100.2,106.8 104.7,103.9 105.9,103.1 104.6,99.2 99.4,98.2 Z" inkscape:connector-curvature="0" /> @@ -465,11 +396,7 @@ <stop style="stop-color:white;stop-opacity:1" offset="0" id="stop7" /> <stop style="stop-color:white;stop-opacity:0" offset="1" id="stop9" /> </linearGradient> -<linearGradient xlink:href="#linearGradient3391" y2="40" x2="60" y1="20" x1="80" gradientUnits="userSpaceOnUse" id="linearGradient3733" inkscape:collect="always" /> -<linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3391"> -<stop id="stop3393" offset="0" style="stop-color:white;stop-opacity:1" /> -<stop id="stop3395" offset="1" style="stop-color:white;stop-opacity:0" /> -</linearGradient> +<linearGradient xlink:href="#WhiteTransparent" y2="40" x2="60" y1="20" x1="80" gradientUnits="userSpaceOnUse" id="linearGradient3733" inkscape:collect="always" /> <linearGradient xlink:href="#WhiteTransparent" y2="60" x2="58" y1="35" x1="33" gradientUnits="userSpaceOnUse" id="linearGradient3735" inkscape:collect="always" /> <linearGradient xlink:href="#BlackTransparent" y2="64" x2="0" y1="128" x1="0" gradientUnits="userSpaceOnUse" id="linearGradient3737" inkscape:collect="always" /> <linearGradient id="BlackTransparent" gradientUnits="userSpaceOnUse"> @@ -478,8 +405,8 @@ </linearGradient> <linearGradient xlink:href="#WhiteTransparent" y2="50" x2="90" y1="20" x1="60" gradientUnits="userSpaceOnUse" id="linearGradient3739" inkscape:collect="always" /> <linearGradient id="eraserFill"> -<stop id="stop5742_1" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744_1" offset="1.0000000" style="stop-color:#f3b698;stop-opacity:1" /> +<stop id="stop5742_1" offset="0" style="stop-color:#ffffff;stop-opacity:1" /> +<stop id="stop5744_1" offset="1" style="stop-color:#f3b698;stop-opacity:1" /> </linearGradient> <linearGradient xlink:href="#eraserFill" y2="234.0031" x2="112.201" y1="221.0688" x1="101.0939" gradientTransform="matrix(1.13356,0,0,1.133368,339.5737,-131.407)" gradientUnits="userSpaceOnUse" id="linearGradient7424" inkscape:collect="always" /> <linearGradient xlink:href="#eraserFill" y2="188.4128" x2="176.8627" y1="157.8208" x1="144.0824" gradientTransform="matrix(0.809546,0,0,0.809417,342.9983,-4.125322)" gradientUnits="userSpaceOnUse" id="linearGradient7426" inkscape:collect="always" /> @@ -492,7 +419,7 @@ <linearGradient xlink:href="#linearGradient5704" y2="211.605" x2="18.58443" y1="205.4478" x1="11.87961" gradientTransform="matrix(1,0,0,0.570788,0,88.25561)" gradientUnits="userSpaceOnUse" id="linearGradient5609" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="214.7454" x2="17.68847" y1="221.1125" x1="19.51159" gradientTransform="matrix(0.997569,0,0,0.654301,-3.963176,65.55004)" gradientUnits="userSpaceOnUse" id="linearGradient5611" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="222.8609" x2="17.28477" y1="213.2477" x1="14.87326" gradientTransform="matrix(0.750795,0,0,0.392032,0.589107,122.468)" gradientUnits="userSpaceOnUse" id="linearGradient5613" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient5663" y2="521.0983" x2="36.86864" y1="509.9999" x1="26.00001" gradientTransform="translate(937,-210.9999)" gradientUnits="userSpaceOnUse" id="linearGradient5617" inkscape:collect="always" /> +<linearGradient xlink:href="#BlackTransparent" y2="521.0983" x2="36.86864" y1="509.9999" x1="26.00001" gradientTransform="translate(937,-210.9999)" gradientUnits="userSpaceOnUse" id="linearGradient5617" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="174.9988" x2="-40.94155" y1="192.3364" x1="-29" gradientTransform="translate(714.9212,-135)" gradientUnits="userSpaceOnUse" id="linearGradient5619" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="214.9016" x2="16.94643" y1="219.0517" x1="22.00903" gradientTransform="matrix(1,0,0,1.66306,-4.001611,-151.8935)" gradientUnits="userSpaceOnUse" id="linearGradient5677" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.8026" x2="17.49814" y1="213.2351" x1="14.82746" gradientTransform="matrix(0.752624,0,0,0.996445,0.561763,-7.22312)" gradientUnits="userSpaceOnUse" id="linearGradient5680" inkscape:collect="always" /> @@ -513,8 +440,8 @@ <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient5791" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient5793" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="218.5416" x2="173.724" y1="209.1406" x1="163.8594" gradientTransform="matrix(1.102855,0,0,1.148517,-167.5042,-41.73143)" gradientUnits="userSpaceOnUse" id="linearGradient5795" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-168.0557,-42.30568)" gradientUnits="userSpaceOnUse" id="linearGradient5797" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="213" x2="176" y1="213" x1="160" gradientTransform="translate(-150.459,-11.45)" gradientUnits="userSpaceOnUse" id="linearGradient5799" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-168.0557,-42.30568)" gradientUnits="userSpaceOnUse" id="linearGradient5797" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="213" x2="176" y1="213" x1="160" gradientTransform="translate(-150.459,-11.45)" gradientUnits="userSpaceOnUse" id="linearGradient5799" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="211.605" x2="18.58443" y1="205.4478" x1="11.87961" gradientTransform="matrix(1,0,0,0.570788,0,88.25561)" gradientUnits="userSpaceOnUse" id="linearGradient5801" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="214.7454" x2="17.68847" y1="218.2885" x1="20.1778" gradientTransform="matrix(0.997569,0,0,0.654301,-3.963176,65.55004)" gradientUnits="userSpaceOnUse" id="linearGradient5803" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="218.8375" x2="17.88475" y1="213.2477" x1="14.87326" gradientTransform="matrix(0.750795,0,0,0.392032,0.589107,122.468)" gradientUnits="userSpaceOnUse" id="linearGradient5805" inkscape:collect="always" /> @@ -531,48 +458,27 @@ <linearGradient xlink:href="#linearGradient6684" y2="218.8156" x2="20.98923" y1="215.0097" x1="17.48326" gradientTransform="matrix(1.165669,0,0,1.655559,338.7499,-97.1359)" gradientUnits="userSpaceOnUse" id="linearGradient5827" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="214.3821" x2="16.10928" y1="219.6944" x1="19.08596" gradientTransform="matrix(0.87731,0,0,0.991952,344.0693,46.88201)" gradientUnits="userSpaceOnUse" id="linearGradient5829" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="179.493" x2="-24.43123" y1="179.493" x1="-47.74164" gradientTransform="matrix(1,0,0,0.957993,-0.0384184,13.49742)" gradientUnits="userSpaceOnUse" id="linearGradient5831" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="181.0886" x2="-29.50463" y1="181.0886" x1="-44.41746" gradientTransform="matrix(1,0,0,0.963346,-0.0384184,12.50071)" gradientUnits="userSpaceOnUse" id="linearGradient5833" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="175.9908" x2="-29.01316" y1="175.9908" x1="-37.77876" gradientTransform="translate(-8.989043)" gradientUnits="userSpaceOnUse" id="linearGradient5835" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="181.0886" x2="-29.50463" y1="181.0886" x1="-44.41746" gradientTransform="matrix(1,0,0,0.963346,-0.0384184,12.50071)" gradientUnits="userSpaceOnUse" id="linearGradient5833" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="175.9908" x2="-29.01316" y1="175.9908" x1="-37.77876" gradientTransform="translate(-8.989043)" gradientUnits="userSpaceOnUse" id="linearGradient5835" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="179.493" x2="-27.0385" y1="179.493" x1="-48.42912" gradientTransform="matrix(1,0,0,0.957993,0,7.509185)" gradientUnits="userSpaceOnUse" id="linearGradient5837" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="181.645" x2="-29.63546" y1="181.5494" x1="-44.36454" gradientTransform="matrix(1,0,0,0.963346,0,6.51247)" gradientUnits="userSpaceOnUse" id="linearGradient5839" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="181.9908" x2="-29.00001" y1="181.9908" x1="-37.50076" gradientTransform="matrix(1.592997,0,0,1,11.72818,4)" gradientUnits="userSpaceOnUse" id="linearGradient5842" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="255.5" x2="12.50002" y1="249.821" x1="10.19293" gradientUnits="userSpaceOnUse" id="linearGradient5845" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="255.5312" x2="12.53125" y1="251.0312" x1="9.03125" gradientUnits="userSpaceOnUse" id="linearGradient5847" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="181.645" x2="-29.63546" y1="181.5494" x1="-44.36454" gradientTransform="matrix(1,0,0,0.963346,0,6.51247)" gradientUnits="userSpaceOnUse" id="linearGradient5839" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="181.9908" x2="-29.00001" y1="181.9908" x1="-37.50076" gradientTransform="matrix(1.592997,0,0,1,11.72818,4)" gradientUnits="userSpaceOnUse" id="linearGradient5842" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="255.5" x2="12.50002" y1="249.821" x1="10.19293" gradientUnits="userSpaceOnUse" id="linearGradient5845" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="255.5312" x2="12.53125" y1="251.0312" x1="9.03125" gradientUnits="userSpaceOnUse" id="linearGradient5847" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="221.6924" x2="20.35862" y1="214.0084" x1="15.15684" gradientTransform="matrix(0.625152,0,0,1.007875,-0.61217,35.29459)" gradientUnits="userSpaceOnUse" id="linearGradient5849" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="217.0116" x2="19.15613" y1="215.6721" x1="17.07591" gradientTransform="matrix(0.501399,0,0,1.00217,1.674173,36.50449)" gradientUnits="userSpaceOnUse" id="linearGradient5851" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6684" y2="215.4618" x2="16.23219" y1="220.3433" x1="19.76252" gradientTransform="matrix(0.377364,0,0,0.600465,3.962295,123.6837)" gradientUnits="userSpaceOnUse" id="linearGradient5853" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient2888" r="7.469679" fy="153.063" fx="171.7755" cy="153.063" cx="171.7755" gradientTransform="matrix(1.122233,1.252981,-2.05495,1.830229,297.3402,-339.2527)" gradientUnits="userSpaceOnUse" id="radialGradient5855" inkscape:collect="always" /> +<radialGradient xlink:href="#linearGradient5740" r="7.469679" fy="153.063" fx="171.7755" cy="153.063" cx="171.7755" gradientTransform="matrix(1.122233,1.252981,-2.05495,1.830229,297.3402,-339.2527)" gradientUnits="userSpaceOnUse" id="radialGradient5855" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="138.5" x2="36.18673" y1="132.9464" x1="31.37247" gradientUnits="userSpaceOnUse" id="linearGradient5857" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="137.4738" x2="42.18301" y1="137.5165" x1="34.5194" gradientTransform="translate(-1.5,7.5244)" gradientUnits="userSpaceOnUse" id="linearGradient5859" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7772" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7778" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7780" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7786" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7788" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7794" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7796" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7802" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7804" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7810" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7812" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7818" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7820" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7826" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7828" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7834" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient7836" gradientUnits="userSpaceOnUse" r="1.111868" fy="137.9821" fx="375.0941" cy="137.9821" cx="375.0941" id="radialGradient7842" inkscape:collect="always" /> -<linearGradient id="linearGradient2485-9"> -<stop id="stop2486-3" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop2487-1" offset="1.0000000" style="stop-color:#aaaaaa;stop-opacity:1" /> -</linearGradient> -<linearGradient id="linearGradient3480-8"> -<stop id="stop3482-9" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-6" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient2485-9" inkscape:collect="always" id="linearGradient6465" gradientUnits="userSpaceOnUse" x1="61.44776" y1="236.4112" x2="64.5183" y2="240.354" gradientTransform="matrix(1.743698,0,0,1.75,717.0189,-377.6785)" /> -<linearGradient xlink:href="#linearGradient3480-8" inkscape:collect="always" id="linearGradient6467" gradientUnits="userSpaceOnUse" x1="59" y1="235.1341" x2="62.5" y2="239.4902" gradientTransform="matrix(1.743698,0,0,1.75,717.0189,-377.6785)" /> +<linearGradient xlink:href="#linearGradient5704" y2="137.4738" x2="42.18301" y1="137.5165" x1="34.5194" gradientTransform="translate(-1.5,7.5244)" gradientUnits="userSpaceOnUse" id="linearGradient5859" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient2485" inkscape:collect="always" id="linearGradient6465" gradientUnits="userSpaceOnUse" x1="61.44776" y1="236.4112" x2="64.5183" y2="240.354" gradientTransform="matrix(1.743698,0,0,1.75,717.0189,-377.6785)" /> +<linearGradient xlink:href="#linearGradient5704" inkscape:collect="always" id="linearGradient6467" gradientUnits="userSpaceOnUse" x1="59" y1="235.1341" x2="62.5" y2="239.4902" gradientTransform="matrix(1.743698,0,0,1.75,717.0189,-377.6785)" /> <linearGradient xlink:href="#linearGradient5704" y2="183.3223" x2="117.8272" y1="174.4991" x1="110" gradientTransform="matrix(1.004126,0,0,0.991974,339.8742,1.209495)" gradientUnits="userSpaceOnUse" id="linearGradient5936" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6679" y2="178.0064" x2="452.4859" y1="187.2543" x1="456.7332" gradientTransform="matrix(0.9975701,0,0,1.002994,1.42143,-0.2844345)" gradientUnits="userSpaceOnUse" id="linearGradient5939" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient6679" y2="180.2034" x2="454.0355" y1="190.8572" x1="464.5001" gradientTransform="matrix(0.9975701,0,0,1.002994,1.42143,-0.2844345)" gradientUnits="userSpaceOnUse" id="linearGradient5941" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient6679-6" gradientUnits="userSpaceOnUse" y2="191.2326" x2="98.80204" y1="197.6577" x1="102.7218" id="linearGradient6636-2" inkscape:collect="always" /> -<linearGradient id="linearGradient6679-6"> -<stop style="stop-color:#ffeb74;stop-opacity:1" offset="0" id="stop6681-6" /> -<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop6683-7" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient6679-6" gradientUnits="userSpaceOnUse" y2="190.2852" x2="99.93163" y1="199.9722" x1="109.2829" id="linearGradient6625-4" inkscape:collect="always" /> -<radialGradient xlink:href="#linearGradient5602" r="0.75" fy="222.75" fx="842.7534" cy="222.75" cx="842.25" gradientTransform="matrix(1,0,0,1.666667,0,-148.5)" gradientUnits="userSpaceOnUse" id="radialGradient5496" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient6679" gradientUnits="userSpaceOnUse" y2="191.2326" x2="98.80204" y1="197.6577" x1="102.7218" id="linearGradient6636-2" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient6679" gradientUnits="userSpaceOnUse" y2="190.2852" x2="99.93163" y1="199.9722" x1="109.2829" id="linearGradient6625-4" inkscape:collect="always" /> +<radialGradient xlink:href="#linearGradient10585" r="0.75" fy="222.75" fx="842.7534" cy="222.75" cx="842.25" gradientTransform="matrix(1,0,0,1.666667,0,-148.5)" gradientUnits="userSpaceOnUse" id="radialGradient5496" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="209.2774" x2="14.01084" y1="203.3658" x1="10.04167" gradientTransform="matrix(2.8752,0,0,0.854533,980.2863,352.892)" gradientUnits="userSpaceOnUse" id="linearGradient5769" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="215.0088" x2="18.70757" y1="218.5568" x1="20.10132" gradientTransform="matrix(3.494239,0,0,1.325753,957.3304,243.8052)" gradientUnits="userSpaceOnUse" id="linearGradient5771" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="220.3475" x2="18.5289" y1="213.6631" x1="15.24248" gradientTransform="matrix(2.629849,0,0,0.794339,973.2757,359.133)" gradientUnits="userSpaceOnUse" id="linearGradient5773" inkscape:collect="always" /> @@ -657,161 +563,89 @@ <linearGradient xlink:href="#linearGradient5740" y2="219.4184" x2="19.38252" y1="213.872" x1="15.74156" gradientTransform="matrix(1.62862,0,0,1.593929,882.7572,-100.3862)" gradientUnits="userSpaceOnUse" id="linearGradient5762" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="209.2774" x2="14.01084" y1="203.3658" x1="10.04167" gradientTransform="matrix(1.629558,0,0,0.429186,88.20441,232.3331)" gradientUnits="userSpaceOnUse" id="linearGradient5764" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="220.3475" x2="18.5289" y1="213.6631" x1="15.24248" gradientTransform="matrix(1.387116,0,0,0.200828,86.1208,278.4604)" gradientUnits="userSpaceOnUse" id="linearGradient5767" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient5663" y2="57.5" x2="865.5" y1="66" x1="872" gradientTransform="translate(20)" gradientUnits="userSpaceOnUse" id="linearGradient5824" inkscape:collect="always" /> +<linearGradient xlink:href="#BlackTransparent" y2="57.5" x2="865.5" y1="66" x1="872" gradientTransform="translate(20)" gradientUnits="userSpaceOnUse" id="linearGradient5824" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient2485" y2="30.79385" x2="917.3691" y1="19.1921" x1="905.4675" gradientTransform="matrix(1.159934,0,0,1.224222,-143.4594,-12.87852)" gradientUnits="userSpaceOnUse" id="linearGradient5826" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5704" y2="27.32372" x2="922.5571" y1="20.45271" x1="915.0701" gradientUnits="userSpaceOnUse" id="linearGradient5828" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient700" inkscape:collect="always" id="linearGradient7059" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,33.80746)" x1="606.9615" y1="220.3636" x2="602.0698" y2="221.2004" /> <linearGradient xlink:href="#linearGradient800" inkscape:collect="always" id="linearGradient7062" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,33.80746)" x1="593.1874" y1="195.5188" x2="599.2378" y2="204.916" /> <linearGradient xlink:href="#linearGradient700" inkscape:collect="always" id="linearGradient7065" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,33.80746)" x1="587.9551" y1="222.3478" x2="582.4935" y2="220.8004" /> <linearGradient xlink:href="#linearGradient800" inkscape:collect="always" id="linearGradient7069" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,33.80746)" x1="593.3162" y1="186.6364" x2="597.3068" y2="188.5494" /> -<linearGradient xlink:href="#linearGradient2888" inkscape:collect="always" id="linearGradient7072" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,34.89977)" x1="594.8112" y1="213.1902" x2="594.861" y2="216.7914" /> +<linearGradient xlink:href="#linearGradient5740" inkscape:collect="always" id="linearGradient7072" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2940938,0.2512907,-0.2512907,0.2940938,396.0589,34.89977)" x1="594.8112" y1="213.1902" x2="594.861" y2="216.7914" /> <linearGradient xlink:href="#linearGradient800" inkscape:collect="always" id="linearGradient7074" gradientUnits="userSpaceOnUse" x1="609.5726" y1="215.402" x2="612.2578" y2="216.4033" /> -<linearGradient xlink:href="#linearGradient3480" inkscape:collect="always" id="linearGradient7102" gradientUnits="userSpaceOnUse" x1="591.3853" y1="198.5761" x2="592.8656" y2="198.5761" /> +<linearGradient xlink:href="#linearGradient5704" inkscape:collect="always" id="linearGradient7102" gradientUnits="userSpaceOnUse" x1="591.3853" y1="198.5761" x2="592.8656" y2="198.5761" /> <linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientUnits="userSpaceOnUse" id="linearGradient2876" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient5740" y2="46.339" x2="414.2602" y1="46.33899" x1="404.6787" gradientTransform="matrix(1.001797,0,0,0.906445,-290.1978,295.2598)" gradientUnits="userSpaceOnUse" id="linearGradient2878" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient2888" y2="216.7914" x2="594.861" y1="213.1902" x1="594.8112" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.556,-101.4348)" gradientUnits="userSpaceOnUse" id="linearGradient2880" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="216.7914" x2="594.861" y1="213.1902" x1="594.8112" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.556,-101.4348)" gradientUnits="userSpaceOnUse" id="linearGradient2880" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="188.5494" x2="597.3068" y1="186.6364" x1="593.3162" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.8846,-102.259)" gradientUnits="userSpaceOnUse" id="linearGradient2882" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient700" y2="220.8004" x2="582.4935" y1="222.3478" x1="587.9551" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.8846,-102.259)" gradientUnits="userSpaceOnUse" id="linearGradient2884" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="204.916" x2="599.2378" y1="195.5188" x1="593.1874" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.8846,-102.259)" gradientUnits="userSpaceOnUse" id="linearGradient2886" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient700" y2="221.2004" x2="602.0698" y1="220.3636" x1="606.9615" gradientTransform="matrix(0.1463004,0.278073,-0.278073,0.1463004,868.8846,-102.259)" gradientUnits="userSpaceOnUse" id="linearGradient2889" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient800" y2="216.4033" x2="612.2578" y1="215.402" x1="609.5726" gradientUnits="userSpaceOnUse" id="linearGradient2891" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient3480" y2="198.5761" x2="592.8656" y1="198.5761" x1="591.3853" gradientUnits="userSpaceOnUse" id="linearGradient2893" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="198.5761" x2="592.8656" y1="198.5761" x1="591.3853" gradientUnits="userSpaceOnUse" id="linearGradient2893" inkscape:collect="always" /> <linearGradient xlink:href="#linearGradient1887" y2="132.8273" x2="906.6448" y1="116.8648" x1="899.6934" gradientUnits="userSpaceOnUse" id="linearGradient3740" inkscape:collect="always" /> <linearGradient x1="348.6006" y1="338.0772" x2="375.3615" y2="318.0103" id="linearGradient6466-2" xlink:href="#linearGradient6618" gradientUnits="userSpaceOnUse" gradientTransform="translate(19.05203,-3.089519)" /> <linearGradient x1="348.6006" y1="338.0772" x2="375.3615" y2="318.0103" id="linearGradient6468-0" xlink:href="#linearGradient6618" gradientUnits="userSpaceOnUse" gradientTransform="translate(4.119358,37.58914)" /> <linearGradient x1="348.6006" y1="338.0772" x2="375.3615" y2="318.0103" id="linearGradient6563-3" xlink:href="#linearGradient6618" gradientUnits="userSpaceOnUse" gradientTransform="translate(28.32058,70.02908)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6618" id="linearGradient5783-6-3" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.8269532,0,0,0.8236011,90.7184,44.23329)" x1="348.6006" y1="338.0772" x2="375.3615" y2="318.0103" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6618" id="linearGradient6583-7" x1="371.2368" y1="322.8861" x2="395.2692" y2="322.8861" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3379059,-0.1655273)" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient10585-7" id="linearGradient5209" gradientUnits="userSpaceOnUse" x1="5.644915" y1="209.9819" x2="13.52223" y2="214.7789" /> -<linearGradient id="linearGradient10585-7"> -<stop style="stop-color:#d7d7d7;stop-opacity:1" offset="0.0000000" id="stop10587-0" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop10595-2" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient10585-7" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8278-4" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient10585-7" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8276-2" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient10585-7" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8290-1" inkscape:collect="always" /> -<linearGradient xlink:href="#linearGradient10585-7" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8288-3" inkscape:collect="always" /> -<linearGradient id="linearGradient5704-1"> -<stop id="stop5706-5" offset="0" style="stop-color:#5a5a5a;stop-opacity:1" /> -<stop id="stop5708-0" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient id="linearGradient6684-6"> -<stop id="stop6686-3" offset="0.0000000" style="stop-color:#ffbf00;stop-opacity:1" /> -<stop id="stop6688-7" offset="1.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -</linearGradient> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient10585" id="linearGradient5209" gradientUnits="userSpaceOnUse" x1="5.644915" y1="209.9819" x2="13.52223" y2="214.7789" /> +<linearGradient xlink:href="#linearGradient10585" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8278-4" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient10585" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8276-2" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient10585" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8290-1" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient10585" y2="214.7789" x2="13.52223" y1="209.9819" x1="5.644915" gradientUnits="userSpaceOnUse" id="linearGradient8288-3" inkscape:collect="always" /> <linearGradient id="linearGradient24464"> <stop id="stop24466" offset="0" style="stop-color:#499204;stop-opacity:1" /> -<stop id="stop24468" offset="1.0000000" style="stop-color:#a7e26e;stop-opacity:1" /> +<stop id="stop24468" offset="1" style="stop-color:#a7e26e;stop-opacity:1" /> </linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient6684-6" id="linearGradient7067" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.061943,0.6131129,-0.6131129,-1.061943,1168.341,499.529)" x1="501.3698" y1="278.6932" x2="498.0183" y2="275.9288" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-1" id="linearGradient7070" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.061943,0.6131129,-0.6131129,-1.061943,1170.473,499.786)" x1="497.1992" y1="276.5925" x2="501.1567" y2="279.6869" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient6684" id="linearGradient7067" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.061943,0.6131129,-0.6131129,-1.061943,1168.341,499.529)" x1="501.3698" y1="278.6932" x2="498.0183" y2="275.9288" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient7070" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-1.061943,0.6131129,-0.6131129,-1.061943,1170.473,499.786)" x1="497.1992" y1="276.5925" x2="501.1567" y2="279.6869" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient24464" id="linearGradient7073" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.9089148,0.8231073,-0.8530767,-0.9420083,659.3328,552.0315)" x1="99.27937" y1="121.4717" x2="95.75075" y2="118.6402" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-0" id="linearGradient8980" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient id="linearGradient5704-0"> -<stop style="stop-color:#5a5a5a;stop-opacity:1" offset="0" id="stop5706-2" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5708-9" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-6" id="linearGradient8982" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient id="linearGradient5734-6"> -<stop id="stop5736-0" offset="0" style="stop-color:#8ab3df;stop-opacity:1" /> -<stop id="stop5738-9" offset="1" style="stop-color:#ffffff" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-3" id="linearGradient8984" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient id="linearGradient5740-3"> -<stop id="stop5742-5" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744-4" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-0" id="linearGradient8986" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-6" id="linearGradient8988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-3" id="linearGradient8990" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-0" id="linearGradient8772" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-6" id="linearGradient8774" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-3" id="linearGradient8776" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-0" id="linearGradient8766" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-6" id="linearGradient8768" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-3" id="linearGradient8770" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-3" id="linearGradient6608" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient id="linearGradient5704-3"> -<stop style="stop-color:#5a5a5a;stop-opacity:1" offset="0" id="stop5706-7" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5708-90" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-2" id="linearGradient6610" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient id="linearGradient5734-2"> -<stop id="stop5736-3" offset="0" style="stop-color:#8ab3df;stop-opacity:1" /> -<stop id="stop5738-99" offset="1" style="stop-color:#ffffff" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-7" id="linearGradient6612" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient id="linearGradient5740-7"> -<stop id="stop5742-0" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744-3" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704-3" id="linearGradient6614" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734-2" id="linearGradient6616" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740-7" id="linearGradient6618-9" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> -<linearGradient xlink:href="#linearGradient5704-46" y2="351.125" x2="511.4375" y1="347.1808" x1="508.1888" gradientUnits="userSpaceOnUse" id="linearGradient5857-1" inkscape:collect="always" /> -<linearGradient id="linearGradient5704-46"> -<stop style="stop-color:#5a5a5a;stop-opacity:1" offset="0" id="stop668" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5708-01" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient5704-48" y2="352.1231" x2="518.6993" y1="346.5179" x1="515.2157" gradientUnits="userSpaceOnUse" id="linearGradient5857-64" inkscape:collect="always" /> -<linearGradient id="linearGradient5704-48"> -<stop style="stop-color:#5a5a5a;stop-opacity:1" offset="0" id="stop673" /> -<stop style="stop-color:#000000;stop-opacity:1" offset="1.0000000" id="stop5708-16" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient4698-52" y2="350.407" x2="532.363" y1="347.4531" x1="529.5001" gradientUnits="userSpaceOnUse" id="linearGradient5621-6" inkscape:collect="always" /> -<linearGradient id="linearGradient4698-52"> -<stop id="stop4700-98" offset="0" style="stop-color:#a2d3ff;stop-opacity:1" /> -<stop id="stop4702-1" offset="1.0000000" style="stop-color:#004c91;stop-opacity:1" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient4698-1" y2="350.5838" x2="538.064" y1="346.8714" x1="534.5285" gradientUnits="userSpaceOnUse" id="linearGradient5621-8" inkscape:collect="always" /> -<linearGradient id="linearGradient4698-1"> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient8980" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient8982" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient8984" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient8986" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient8988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient8990" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient8772" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient8774" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient8776" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient8766" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient8768" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient8770" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient6608" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient6610" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient6612" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient6614" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.209494,0,0,1.382055,-12.2469,758.2004)" x1="11.87961" y1="205.4478" x2="18.58443" y2="211.605" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient6616" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.306645,0,0,2.608597,-18.88425,480.9675)" x1="16.3967" y1="214.8097" x2="21.32992" y2="218.8141" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5740" id="linearGradient6618-9" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9834125,0,0,1.562975,-12.92154,707.8904)" x1="15.64649" y1="214.5411" x2="17.49814" y2="218.8026" /> +<linearGradient xlink:href="#linearGradient5704" y2="351.125" x2="511.4375" y1="347.1808" x1="508.1888" gradientUnits="userSpaceOnUse" id="linearGradient5857-1" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5704" y2="352.1231" x2="518.6993" y1="346.5179" x1="515.2157" gradientUnits="userSpaceOnUse" id="linearGradient5857-64" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient4698" y2="350.407" x2="532.363" y1="347.4531" x1="529.5001" gradientUnits="userSpaceOnUse" id="linearGradient5621-6" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient4698" y2="350.5838" x2="538.064" y1="346.8714" x1="534.5285" gradientUnits="userSpaceOnUse" id="linearGradient5621-8" inkscape:collect="always" /> +<linearGradient id="linearGradient4698"> <stop id="stop4700-5" offset="0" style="stop-color:#a2d3ff;stop-opacity:1" /> -<stop id="stop4702-2" offset="1.0000000" style="stop-color:#004c91;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-9" id="linearGradient12203" x1="515.9623" y1="349.3102" x2="523.4155" y2="346.7762" gradientUnits="userSpaceOnUse" /> -<linearGradient id="linearGradient3480-9"> -<stop id="stop3482-6" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-0" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-9" id="linearGradient12201" x1="519.4526" y1="354.5319" x2="521.2233" y2="351.8581" gradientUnits="userSpaceOnUse" /> -<linearGradient gradientTransform="rotate(15,511.8463,316.8629)" y2="351.8581" x2="521.2233" y1="354.5319" x1="519.4526" gradientUnits="userSpaceOnUse" id="linearGradient12220" xlink:href="#linearGradient3480-4" inkscape:collect="always" /> -<linearGradient id="linearGradient3480-4"> -<stop id="stop3482-7" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-8" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> +<stop id="stop4702-2" offset="1" style="stop-color:#004c91;stop-opacity:1" /> </linearGradient> -<linearGradient id="linearGradient4698-8"> -<stop id="stop4700-6" offset="0" style="stop-color:#a2d3ff;stop-opacity:1" /> -<stop id="stop4702-24" offset="1.0000000" style="stop-color:#004c91;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient4698-8" id="linearGradient12388" gradientUnits="userSpaceOnUse" x1="31.37247" y1="132.9464" x2="36.18673" y2="138.5" /> -<radialGradient inkscape:collect="always" xlink:href="#linearGradient4698-8" id="radialGradient12390" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.153846,0,120.5976)" cx="35.25" cy="142.5244" fx="35.25" fy="142.5244" r="3.25" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient4698-8" id="linearGradient12392" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.5,7.5244)" x1="34.5194" y1="137.5165" x2="42.18301" y2="137.4738" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient12203" x1="515.9623" y1="349.3102" x2="523.4155" y2="346.7762" gradientUnits="userSpaceOnUse" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient12201" x1="519.4526" y1="354.5319" x2="521.2233" y2="351.8581" gradientUnits="userSpaceOnUse" /> +<linearGradient gradientTransform="rotate(15,511.8463,316.8629)" y2="351.8581" x2="521.2233" y1="354.5319" x1="519.4526" gradientUnits="userSpaceOnUse" id="linearGradient12220" xlink:href="#linearGradient5704" inkscape:collect="always" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient4698" id="linearGradient12388" gradientUnits="userSpaceOnUse" x1="31.37247" y1="132.9464" x2="36.18673" y2="138.5" /> +<radialGradient inkscape:collect="always" xlink:href="#linearGradient4698" id="radialGradient12390" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.153846,0,120.5976)" cx="35.25" cy="142.5244" fx="35.25" fy="142.5244" r="3.25" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient4698" id="linearGradient12392" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.5,7.5244)" x1="34.5194" y1="137.5165" x2="42.18301" y2="137.4738" /> <linearGradient inkscape:collect="always" id="linearGradient5912"> <stop style="stop-color:#000000;stop-opacity:1" offset="0" id="stop5914" /> <stop style="stop-color:#808080;stop-opacity:1" offset="1" id="stop5916" /> </linearGradient> -<linearGradient id="linearGradient6784-4" inkscape:collect="always"> -<stop id="stop6786-7" offset="0" style="stop-color:#000000;stop-opacity:1" /> -<stop id="stop6788-0" offset="1" style="stop-color:#808080;stop-opacity:1" /> -</linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5912" id="linearGradient5918" x1="643.5" y1="311" x2="634.5" y2="299.5" gradientUnits="userSpaceOnUse" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient6784-4" id="linearGradient5918-3-6" x1="675.5" y1="310" x2="664.5" y2="297.5" gradientUnits="userSpaceOnUse" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5912" id="linearGradient5918-3-6" x1="675.5" y1="310" x2="664.5" y2="297.5" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" id="linearGradient5926"> <stop style="stop-color:#004c91;stop-opacity:1" offset="0" id="stop5928" /> <stop style="stop-color:#91c5f3;stop-opacity:1" offset="1" id="stop5930" /> </linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient5926-0-9"> -<stop style="stop-color:#004c91;stop-opacity:1" offset="0" id="stop5928-3-1" /> -<stop style="stop-color:#91c5f3;stop-opacity:1" offset="1" id="stop5930-5-6" /> -</linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient5926" id="linearGradient5932" gradientUnits="userSpaceOnUse" x1="656.1874" y1="305.6875" x2="647" y2="293.5" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient5926-0-9" id="linearGradient5932-9-2" gradientUnits="userSpaceOnUse" x1="686.5" y1="318.5" x2="677.5" y2="306.5" /> -<linearGradient inkscape:collect="always" xlink:href="#eraserFill-6" id="linearGradient10236" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.13356,0,0,1.133368,-243.4437,205.1983)" x1="101.0939" y1="221.0688" x2="112.201" y2="234.0031" /> -<linearGradient id="eraserFill-6"> -<stop id="stop5742_1-1" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744_1-5" offset="1.0000000" style="stop-color:#f3b698;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#eraserFill-6" id="linearGradient10238" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.809546,0,0,0.809417,-240.0191,332.4799)" x1="144.0824" y1="157.8208" x2="176.8627" y2="188.4128" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5926" id="linearGradient5932-9-2" gradientUnits="userSpaceOnUse" x1="686.5" y1="318.5" x2="677.5" y2="306.5" /> +<linearGradient inkscape:collect="always" xlink:href="#eraserFill" id="linearGradient10236" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.13356,0,0,1.133368,-243.4437,205.1983)" x1="101.0939" y1="221.0688" x2="112.201" y2="234.0031" /> +<linearGradient inkscape:collect="always" xlink:href="#eraserFill" id="linearGradient10238" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.809546,0,0,0.809417,-240.0191,332.4799)" x1="144.0824" y1="157.8208" x2="176.8627" y2="188.4128" /> <linearGradient inkscape:collect="always" id="gray_to_white"> <stop id="stop7750-9" offset="0" style="stop-color:#afafaf;stop-opacity:1" /> <stop id="stop7748-6" offset="1" style="stop-color:#e6e6e6;stop-opacity:1" /> @@ -819,56 +653,32 @@ <linearGradient y2="536.965" x2="217.426" y1="536.767" x1="263.478" gradientTransform="matrix(0.117347,0,0,0.117347,252.7175,248.3363)" gradientUnits="userSpaceOnUse" id="linearGradient7163" xlink:href="#gray_to_white" inkscape:collect="always" /> <radialGradient r="62.3947" fy="542.529" fx="234.355" cy="542.529" cx="234.355" gradientTransform="matrix(1,0,0,0.263368,0,365.571)" gradientUnits="userSpaceOnUse" id="radialGradient7218" xlink:href="#BlackTransparent" inkscape:collect="always" /> <radialGradient r="62.3947" fy="542.529" fx="234.355" cy="542.529" cx="234.355" gradientTransform="matrix(1,0,0,0.263368,0,365.571)" gradientUnits="userSpaceOnUse" id="radialGradient7220" xlink:href="#WhiteTransparent" inkscape:collect="always" /> -<linearGradient y2="376.4393" x2="-557.8917" y1="115.2545" x1="-815.2852" gradientTransform="matrix(1,0,0,0.997925,315.4232,-138.2771)" gradientUnits="userSpaceOnUse" id="linearGradient15270-5" xlink:href="#linearGradient3480-7-6" inkscape:collect="always" /> -<linearGradient id="linearGradient3480-7-6"> -<stop id="stop3482-77-2" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-3-2" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient5740-1-4-6" y2="180.6826" x2="164.3598" y1="172.2059" x1="161.736" gradientTransform="matrix(2.499161,0,0,1.671823,-82.24308,-178.7565)" gradientUnits="userSpaceOnUse" id="linearGradient5545-0-70" inkscape:collect="always" /> -<linearGradient id="linearGradient5740-1-4-6"> -<stop id="stop5742-8-4-8" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1" /> -<stop id="stop5744-32-6-3" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1" /> -</linearGradient> -<linearGradient xlink:href="#linearGradient1887-3" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,165.9423,-181.2098)" gradientUnits="userSpaceOnUse" id="linearGradient15175-8" inkscape:collect="always" /> -<linearGradient id="linearGradient1887-3"> -<stop id="stop1888-2" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1" /> -<stop id="stop1889-94" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient10331" id="linearGradient10399" gradientUnits="userSpaceOnUse" x1="255.513" y1="92.579" x2="264.6582" y2="83.39406" /> +<linearGradient y2="376.4393" x2="-557.8917" y1="115.2545" x1="-815.2852" gradientTransform="matrix(1,0,0,0.997925,315.4232,-138.2771)" gradientUnits="userSpaceOnUse" id="linearGradient15270-5" xlink:href="#linearGradient5704" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient5740" y2="180.6826" x2="164.3598" y1="172.2059" x1="161.736" gradientTransform="matrix(2.499161,0,0,1.671823,-82.24308,-178.7565)" gradientUnits="userSpaceOnUse" id="linearGradient5545-0-70" inkscape:collect="always" /> +<linearGradient xlink:href="#linearGradient1887" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,165.9423,-181.2098)" gradientUnits="userSpaceOnUse" id="linearGradient15175-8" inkscape:collect="always" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient1610" id="linearGradient10399" gradientUnits="userSpaceOnUse" x1="255.513" y1="92.579" x2="264.6582" y2="83.39406" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient10359" id="linearGradient33193" gradientUnits="userSpaceOnUse" x1="14.56176" y1="185.4726" x2="22.91343" y2="193.8308" /> <linearGradient id="linearGradient10359" inkscape:collect="always"> <stop id="stop10361" offset="0" style="stop-color:#c80000" /> <stop id="stop10363" offset="1" style="stop-color:#f99e9e;stop-opacity:1" /> </linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-8-6" id="linearGradient33195" gradientUnits="userSpaceOnUse" x1="7.859756" y1="190.7533" x2="25.59999" y2="190.0497" /> -<linearGradient id="linearGradient3480-8-6"> -<stop id="stop3482-9-9" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-6-1" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-8-6" id="linearGradient33210" gradientUnits="userSpaceOnUse" x1="11.04291" y1="190.3311" x2="23.16458" y2="191.3432" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-3" id="linearGradient33212" gradientUnits="userSpaceOnUse" x1="11.04291" y1="190.3311" x2="21.57254" y2="190.0497" /> -<linearGradient id="linearGradient3480-3"> -<stop id="stop3482-8" offset="0.0000000" style="stop-color:#646464;stop-opacity:1" /> -<stop id="stop3484-5" offset="1.0000000" style="stop-color:#000000;stop-opacity:1" /> -</linearGradient> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient33195" gradientUnits="userSpaceOnUse" x1="7.859756" y1="190.7533" x2="25.59999" y2="190.0497" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient33210" gradientUnits="userSpaceOnUse" x1="11.04291" y1="190.3311" x2="23.16458" y2="191.3432" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient33212" gradientUnits="userSpaceOnUse" x1="11.04291" y1="190.3311" x2="21.57254" y2="190.0497" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient10359" id="linearGradient33191" gradientUnits="userSpaceOnUse" x1="24.49481" y1="214.0368" x2="14.87818" y2="201.604" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient10349" id="linearGradient33206" gradientUnits="userSpaceOnUse" x1="14.95977" y1="203.6547" x2="23.60995" y2="211.0178" /> <linearGradient inkscape:collect="always" id="linearGradient10349"> <stop style="stop-color:#a2f156;stop-opacity:1" offset="0" id="stop10351" /> <stop style="stop-color:#a2f156;stop-opacity:0" offset="1" id="stop10353" /> </linearGradient> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-8-6" id="linearGradient33208" gradientUnits="userSpaceOnUse" x1="8.364343" y1="207.3121" x2="25.59999" y2="207.5353" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient3480-8-6" id="linearGradient33214" gradientUnits="userSpaceOnUse" x1="11.89733" y1="207.3945" x2="22.12529" y2="207.5352" /> -<linearGradient inkscape:collect="always" xlink:href="#linearGradient900-2" id="linearGradient33204" gradientUnits="userSpaceOnUse" x1="14.22924" y1="201.6041" x2="23.09063" y2="212.7821" /> -<linearGradient id="linearGradient900-2"> -<stop id="stop1014-7" offset="0.0000000" style="stop-color:#e4ffa6;stop-opacity:1" /> -<stop id="stop1015-3" offset="1.0000000" style="stop-color:#3a7801;stop-opacity:1" /> -</linearGradient> -<linearGradient inkscape:collect="always" id="linearGradient5799-9" gradientUnits="userSpaceOnUse" gradientTransform="translate(-157.4999,-207.5)" x1="160" y1="213" x2="176" y2="213" xlink:href="#linearGradient3480" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient33208" gradientUnits="userSpaceOnUse" x1="8.364343" y1="207.3121" x2="25.59999" y2="207.5353" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient33214" gradientUnits="userSpaceOnUse" x1="11.89733" y1="207.3945" x2="22.12529" y2="207.5352" /> +<linearGradient inkscape:collect="always" xlink:href="#linearGradient900" id="linearGradient33204" gradientUnits="userSpaceOnUse" x1="14.22924" y1="201.6041" x2="23.09063" y2="212.7821" /> +<linearGradient inkscape:collect="always" id="linearGradient5799-9" gradientUnits="userSpaceOnUse" gradientTransform="translate(-157.4999,-207.5)" x1="160" y1="213" x2="176" y2="213" xlink:href="#linearGradient5704" /> <linearGradient y2="218.5416" x2="173.724" y1="209.14059" x1="163.85941" gradientTransform="matrix(1.102855,0,0,1.148517,-174.5451,-237.7814)" gradientUnits="userSpaceOnUse" id="linearGradient20188" xlink:href="#linearGradient1887" inkscape:collect="always" /> -<linearGradient y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-175.0966,-238.3557)" gradientUnits="userSpaceOnUse" id="linearGradient20190" xlink:href="#linearGradient3480" inkscape:collect="always" /> +<linearGradient y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-175.0966,-238.3557)" gradientUnits="userSpaceOnUse" id="linearGradient20190" xlink:href="#linearGradient5704" inkscape:collect="always" /> <linearGradient y2="218.5416" x2="173.724" y1="209.14059" x1="163.85941" gradientTransform="matrix(1.102855,0,0,1.148517,-174.5451,-237.7814)" gradientUnits="userSpaceOnUse" id="linearGradient20197" xlink:href="#linearGradient1887" inkscape:collect="always" /> -<linearGradient y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-175.0966,-238.3557)" gradientUnits="userSpaceOnUse" id="linearGradient20199" xlink:href="#linearGradient3480" inkscape:collect="always" /> +<linearGradient y2="217.2552" x2="173.0313" y1="207.7552" x1="161.2865" gradientTransform="matrix(1.102855,0,0,1.148517,-175.0966,-238.3557)" gradientUnits="userSpaceOnUse" id="linearGradient20199" xlink:href="#linearGradient5704" inkscape:collect="always" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient6524" @@ -3630,21 +3440,21 @@ http://www.inkscape.org/</dc:description> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7672" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.184974,0,0,1.184974,-70.48049,-15.94187)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7674" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.111722,0,0,1.111722,-37.0964,-14.9165)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7676" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.181829,0,0,1.181829,-69.30058,-21.56258)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7678" style="color:#000000;fill:url(#radialGradient7818);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3604,-63.50353)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7680" style="color:#000000;fill:url(#radialGradient7802);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3597,-57.44874)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7682" style="color:#000000;fill:url(#radialGradient7826);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-177.4064,-63.50356)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7684" style="color:#000000;fill:url(#radialGradient7834);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-174.4526,-63.50354)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7686" style="color:#000000;fill:url(#radialGradient7810);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3605,-60.47619)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7688" style="color:#000000;fill:url(#radialGradient7794);stroke-width:0.2773579" transform="matrix(1.4858,0,0,1.4858,-177.4101,-57.45014)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7692" style="color:#000000;fill:url(#radialGradient7842);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-174.4524,-60.47613)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7694" style="color:#000000;fill:url(#radialGradient7786);stroke-width:0.2773579" transform="matrix(1.492675,0,0,1.492675,-177.0357,-58.39903)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7678" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3604,-63.50353)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7680" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3597,-57.44874)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7682" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-177.4064,-63.50356)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7684" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-174.4526,-63.50354)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7686" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-180.3605,-60.47619)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7688" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.4858,0,0,1.4858,-177.4101,-57.45014)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7692" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.485788,0,0,1.485788,-174.4524,-60.47613)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7694" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(1.492675,0,0,1.492675,-177.0357,-58.39903)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7696" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.191739,0,0,1.191739,-64.1566,-13.84799)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7698" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.181973,0,0,1.181973,-57.53942,-15.52772)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7700" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.20571,0,0,1.20571,-78.25832,-15.77568)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7702" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.193386,0,0,1.193386,-70.68201,-14.07527)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7704" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.121575,0,0,1.121575,-40.79199,-4.166495)" cx="375.0941" cy="137.9821" r="1.111868" /> <circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7706" style="color:#000000;stroke:#ffffff;stroke-width:0.2773579" transform="matrix(1.20571,0,0,1.20571,-66.44314,-15.77568)" cx="375.0941" cy="137.9821" r="1.111868" /> -<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7690" style="color:#000000;fill:url(#radialGradient7778);stroke-width:0.2773579" transform="matrix(6.75293,0,0,6.75293,-2153.081,-787.2478)" cx="375.0941" cy="137.9821" r="1.111868" /> +<circle inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" id="use7690" style="color:#000000;fill:url(#radialBlackTransparent);stroke-width:0.2773579" transform="matrix(6.75293,0,0,6.75293,-2153.081,-787.2478)" cx="375.0941" cy="137.9821" r="1.111868" /> </g> <g inkscape:label="#node_symmetric" transform="translate(736.4717,-120)" id="node-type-auto-smooth"> <path sodipodi:nodetypes="csc" id="path5383" d="M -44.41296,176.5635 C -44.94008,180.0159 -43.02606,185.9502 -37.02606,185.9502 -31.02606,185.9502 -29.0373,180.0159 -29.51018,176.5635" style="fill:none;stroke:#646464;stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0" inkscape:connector-curvature="0" /> @@ -4399,4 +4209,15 @@ http://www.inkscape.org/</dc:description> <use xlink:href="#use7718" transform="translate(0,4)" height="100%" width="100%" y="0" x="0"/> <rect style="fill:#4776a7" height="14" width="14" y="430" x="954"/> </g> + <g transform="translate(-163.3209,111.663)" id="object-ungroup-pop-selection" inkscape:label="#object-ungroup-pop-selection"> + <g id="g6068-8"> + <rect style="color:#000000;fill:none;stroke:url(#linearGradient7927);stroke-width:1;stroke-linejoin:round;stroke-miterlimit:0" id="rect9496-1" width="9" height="7" x="356" y="259" /> + <rect style="color:#000000;fill:url(#linearGradient7929);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7931);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0" id="rect9498-0" width="7" height="5" x="357" y="260" /> + </g> + <use xlink:href="#rect10765" height="1250" width="1250" id="use8598-1" y="0" x="0" transform="translate(4.959,-0.03898)" /> + <use xlink:href="#rect10765" height="1250" width="1250" id="use8601-8" y="0" x="0" transform="translate(13.959,-0.0389847)" /> + <rect y="261" x="367" height="2" width="2" id="use8605-4" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:1" /> + <use xlink:href="#use8598-1" height="1250" width="1250" transform="translate(5.073548e-8,9)" id="use9484-9" y="0" x="0" /> + <use xlink:href="#g10421" height="1250" width="1250" id="use10425-1" y="0" x="0" transform="translate(-0.0348992,-0.0284392)" /> + </g> </svg> diff --git a/share/keys/default.xml b/share/keys/default.xml index 07192cb37..f16be0689 100644 --- a/share/keys/default.xml +++ b/share/keys/default.xml @@ -297,8 +297,7 @@ override) the bindings in the main default.xml. <bind key="z" modifiers="Ctrl" action="EditUndo" display="true" /> <bind key="Z" modifiers="Ctrl" action="EditUndo" /> - <bind key="y" modifiers="Ctrl,Shift" action="EditUndo" /> - <bind key="Y" modifiers="Ctrl,Shift" action="EditUndo" /> + <!--Do not put in Ctrl,Shift+Y, already used--> <bind key="z" modifiers="Ctrl,Shift" action="EditRedo" display="true" /> <bind key="Z" modifiers="Ctrl,Shift" action="EditRedo" /> @@ -384,6 +383,9 @@ override) the bindings in the main default.xml. <bind key="7" action="EditNextPathEffectParameter" display="true" /> + <bind key="r" modifiers="Ctrl,Shift" action="FitCanvasToSelectionOrDrawing" display="true" /> + <bind key="R" modifiers="Ctrl,Shift" action="FitCanvasToSelectionOrDrawing" display="true" /> + <!-- Objects/selection --> <bind key="h" action="ObjectFlipHorizontally" display="true" /> diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93eea1e2a..e44eb757d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -526,6 +526,10 @@ endif() add_dependencies(inkscape inkscape_version) +if(WITH_DBUS) + add_dependencies(inkscape inkscape_dbus) +endif() + set(INKSCAPE_TARGET_LIBS # order from automake #sp_LIB diff --git a/src/desktop.cpp b/src/desktop.cpp index 331ab3351..d482d0d7f 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -111,7 +111,6 @@ SPDesktop::SPDesktop() : sketch( NULL ), controls( NULL ), tempgroup ( NULL ), - table( NULL ), page( NULL ), page_border( NULL ), current( NULL ), @@ -211,11 +210,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid g_signal_connect (G_OBJECT (main), "event", G_CALLBACK (sp_desktop_root_handler), this); /* This is the background the page sits on. */ - table = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); - SP_CTRLRECT(table)->setRectangle(Geom::Rect(Geom::Point(-80000, -80000), Geom::Point(80000, 80000))); - SP_CTRLRECT(table)->setColor(0x00000000, true, 0x00000000); - SP_CTRLRECT(table)->setCheckerboard( false ); - sp_canvas_item_move_to_z (table, 0); + canvas->setBackgroundColor(0xffffff00); page = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); ((CtrlRect *) page)->setColor(0x00000000, FALSE, 0x00000000); @@ -1733,17 +1728,11 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) SPNamedView *nv=SP_NAMEDVIEW(obj); if (flags & SP_OBJECT_MODIFIED_FLAG) { - - /* Set page background */ - sp_canvas_item_show (desktop->table); if (nv->pagecheckerboard) { - ((CtrlRect *) desktop->table)->setCheckerboard( true ); - ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor ); // | 0xff); + desktop->canvas->setBackgroundCheckerboard(); } else { - ((CtrlRect *) desktop->table)->setCheckerboard( false ); - ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor | 0xff); + desktop->canvas->setBackgroundColor(nv->pagecolor); } - sp_canvas_item_move_to_z (desktop->table, 0); /* Show/hide page border */ if (nv->showborder) { @@ -1756,7 +1745,7 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) } // place in the z-order stack if (nv->borderlayer == SP_BORDER_LAYER_BOTTOM) { - sp_canvas_item_move_to_z (desktop->page_border, 2); + sp_canvas_item_move_to_z (desktop->page_border, 1); } else { int order = sp_canvas_item_order (desktop->page_border); int morder = sp_canvas_item_order (desktop->drawing); diff --git a/src/desktop.h b/src/desktop.h index f1444ba7b..3652d4a97 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -174,7 +174,6 @@ public: SPCanvasGroup *sketch; SPCanvasGroup *controls; SPCanvasGroup *tempgroup; ///< contains temporary canvas items - SPCanvasItem *table; ///< outside-of-page background SPCanvasItem *page; ///< page background SPCanvasItem *page_border; ///< page border SPCSSAttr *current; ///< current style diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp index ec99eca9a..366b3c7d1 100644 --- a/src/display/canvas-arena.cpp +++ b/src/display/canvas-arena.cpp @@ -250,7 +250,8 @@ sp_canvas_arena_event (SPCanvasItem *item, GdkEvent *event) arena->c = Geom::Point(event->crossing.x, event->crossing.y); /* fixme: Not sure abut this, but seems the right thing (Lauris) */ - arena->drawing.update(Geom::IntRect::infinite(), arena->ctx, DrawingItem::STATE_PICK, 0); + arena->drawing.update(Geom::IntRect::infinite(), arena->ctx, + DrawingItem::STATE_PICK | DrawingItem::STATE_BBOX, 0); arena->active = arena->drawing.pick(arena->c, arena->drawing.delta, arena->sticky); ret = sp_canvas_arena_send_event (arena, event); } @@ -269,7 +270,8 @@ sp_canvas_arena_event (SPCanvasItem *item, GdkEvent *event) arena->c = Geom::Point(event->motion.x, event->motion.y); /* fixme: Not sure abut this, but seems the right thing (Lauris) */ - arena->drawing.update(Geom::IntRect::infinite(), arena->ctx, DrawingItem::STATE_PICK); + arena->drawing.update(Geom::IntRect::infinite(), arena->ctx, + DrawingItem::STATE_PICK | DrawingItem::STATE_BBOX); new_arena = arena->drawing.pick(arena->c, arena->drawing.delta, arena->sticky); if (new_arena != arena->active) { GdkEventCrossing ec; diff --git a/src/display/nr-filter-tile.cpp b/src/display/nr-filter-tile.cpp index 7172f88ee..c151c8537 100644 --- a/src/display/nr-filter-tile.cpp +++ b/src/display/nr-filter-tile.cpp @@ -32,18 +32,6 @@ FilterTile::~FilterTile() void FilterTile::render_cairo(FilterSlot &slot) { - // FIX ME! - static bool tile_warning = false; - if (!tile_warning) { - g_warning("Renderer for feTile has non-optimal implementation, expect slowness and bugs."); - tile_warning = true; - } - - // Fixing isn't so easy as the Inkscape renderer breaks the canvas into "rendering" tiles for - // faster rendering. (The "rendering" tiles are not the same as the tiles in this primitive.) - // Only if the the feTile tile source falls inside the current "rendering" tile will the tile - // image be available. - // This input source contains only the "rendering" tile. cairo_surface_t *in = slot.getcairo(_input); diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 644da8d5a..decb14184 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -27,6 +27,7 @@ #include "helper/sp-marshal.h" #include <2geom/rect.h> #include <2geom/affine.h> +#include "display/cairo-utils.h" #include "display/sp-canvas.h" #include "display/sp-canvas-group.h" #include "preferences.h" @@ -37,6 +38,7 @@ #include "display/cairo-utils.h" #include "debug/gdk-event-latency-tracker.h" #include "desktop.h" +#include "color.h" using Inkscape::Debug::GdkEventLatencyTracker; @@ -959,6 +961,8 @@ static void sp_canvas_init(SPCanvas *canvas) canvas->_backing_store = NULL; canvas->_clean_region = cairo_region_create(); + canvas->_background = cairo_pattern_create_rgb(1, 1, 1); + canvas->_background_is_checkerboard = false; canvas->_forced_redraw_count = 0; canvas->_forced_redraw_limit = -1; @@ -972,10 +976,7 @@ static void sp_canvas_init(SPCanvas *canvas) void SPCanvas::shutdownTransients() { // Reset the clean region - if (_clean_region && !cairo_region_is_empty(_clean_region)) { - cairo_region_destroy(_clean_region); - _clean_region = cairo_region_create(); - } + dirtyAll(); if (_grabbed_item) { _grabbed_item = NULL; @@ -1006,6 +1007,10 @@ void SPCanvas::dispose(GObject *object) cairo_region_destroy(canvas->_clean_region); canvas->_clean_region = NULL; } + if (canvas->_background) { + cairo_pattern_destroy(canvas->_background); + canvas->_background = NULL; + } canvas->shutdownTransients(); #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) @@ -1149,7 +1154,7 @@ void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation Geom::IntRect new_area = Geom::IntRect::from_xywh(canvas->_x0, canvas->_y0, allocation->width, allocation->height); - // resize backing store; the clean region does not change + // resize backing store cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, allocation->width, allocation->height); if (canvas->_backing_store) { @@ -1162,9 +1167,12 @@ void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation } canvas->_backing_store = new_backing_store; + // Clip the clean region to the new allocation + cairo_rectangle_int_t crect = { canvas->_x0, canvas->_y0, allocation->width, allocation->height }; + cairo_region_intersect_rectangle(canvas->_clean_region, &crect); + gtk_widget_set_allocation (widget, allocation); - // Schedule redraw of new region if (SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed) SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed (canvas->_root, new_area); @@ -1173,6 +1181,7 @@ void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation allocation->x, allocation->y, allocation->width, allocation->height); } + // Schedule redraw of any newly exposed regions canvas->addIdle(); } @@ -1527,44 +1536,23 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect const &canvas_rect, int /*sw*/) { - GtkWidget *widget = GTK_WIDGET (this); - - // Mark the region clean - markRect(paint_rect, 0); - SPCanvasBuf buf; buf.buf = NULL; buf.buf_rowstride = 0; buf.rect = paint_rect; buf.visible_rect = canvas_rect; buf.is_empty = true; - //buf.ct = gdk_cairo_create(widget->window); // create temporary surface cairo_surface_t *imgs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, paint_rect.width(), paint_rect.height()); buf.ct = cairo_create(imgs); - //cairo_translate(buf.ct, -x0, -y0); - - // fix coordinates, clip all drawing to the tile and clear the background - //cairo_translate(buf.ct, paint_rect.left() - canvas->x0, paint_rect.top() - canvas->y0); - //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rect.height()); - //cairo_set_line_width(buf.ct, 3); - //cairo_set_source_rgba(buf.ct, 1.0, 0.0, 0.0, 0.1); - //cairo_stroke_preserve(buf.ct); - //cairo_clip(buf.ct); - -#if GTK_CHECK_VERSION(3,0,0) - GtkStyleContext *context = gtk_widget_get_style_context(widget); - gtk_render_background(context, buf.ct, 0, 0, paint_rect.width(), paint_rect.height()); -#else - GtkStyle *style = gtk_widget_get_style (widget); - gdk_cairo_set_source_color(buf.ct, &style->bg[GTK_STATE_NORMAL]); -#endif + cairo_save(buf.ct); + cairo_translate(buf.ct, -paint_rect.left(), -paint_rect.top()); + cairo_set_source(buf.ct, _background); cairo_set_operator(buf.ct, CAIRO_OPERATOR_SOURCE); - //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rec.height()); cairo_paint(buf.ct); - cairo_set_operator(buf.ct, CAIRO_OPERATOR_OVER); + cairo_restore(buf.ct); if (_root->visible) { SP_CANVAS_ITEM_GET_CLASS(_root)->render(_root, &buf); @@ -1608,8 +1596,8 @@ void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect cairo_destroy(xct); cairo_surface_destroy(imgs); - cairo_rectangle_int_t crect = { paint_rect.left(), paint_rect.right(), paint_rect.width(), paint_rect.height() }; - cairo_region_union_rectangle(_clean_region, &crect); + // Mark the painted rectangle clean + markRect(paint_rect, 0); gtk_widget_queue_draw_area(GTK_WIDGET(this), paint_rect.left() -_x0, paint_rect.top() - _y0, paint_rect.width(), paint_rect.height()); @@ -1799,8 +1787,14 @@ void SPCanvas::endForcedFullRedraws() gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { SPCanvas *canvas = SP_CANVAS(widget); + // Blit from the backing store, without regard for the clean region. + // This is necessary because GTK clears the widget for us, which causes + // severe flicker while drawing if we don't blit the old contents. + cairo_set_source_surface(cr, canvas->_backing_store, 0, 0); + cairo_paint(cr); + cairo_rectangle_list_t *rects = cairo_copy_clip_rectangle_list(cr); - cairo_region_t *draw_region = cairo_region_create(); + cairo_region_t *dirty_region = cairo_region_create(); for (int i = 0; i < rects->num_rectangles; i++) { cairo_rectangle_t rectangle = rects->rectangles[i]; @@ -1808,36 +1802,16 @@ gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { rectangle.width, rectangle.height); Geom::IntRect ir = dr.roundOutwards(); cairo_rectangle_int_t irect = { ir.left(), ir.top(), ir.width(), ir.height() }; - cairo_region_union_rectangle(draw_region, &irect); + cairo_region_union_rectangle(dirty_region, &irect); } cairo_rectangle_list_destroy(rects); - - cairo_region_t *draw_dirty = cairo_region_copy(draw_region); - cairo_region_subtract(draw_dirty, canvas->_clean_region); - cairo_region_intersect(draw_region, canvas->_clean_region); - - // Draw the clean portion - if (!cairo_region_is_empty(draw_region)) { - cairo_region_translate(draw_region, -canvas->_x0, -canvas->_y0); - cairo_save(cr); - int n_rects = cairo_region_num_rectangles(draw_region); - for (int i = 0; i < n_rects; ++i) { - cairo_rectangle_int_t crect; - cairo_region_get_rectangle(draw_region, i, &crect); - cairo_rectangle(cr, crect.x, crect.y, crect.width, crect.height); - } - cairo_clip(cr); - cairo_set_source_surface(cr, canvas->_backing_store, 0, 0); - cairo_paint(cr); - cairo_restore(cr); - } + cairo_region_subtract(dirty_region, canvas->_clean_region); // Render the dirty portion in the background - if (!cairo_region_is_empty(draw_dirty)) { + if (!cairo_region_is_empty(dirty_region)) { canvas->addIdle(); } - cairo_region_destroy(draw_region); - cairo_region_destroy(draw_dirty); + cairo_region_destroy(dirty_region); return TRUE; } @@ -1999,30 +1973,36 @@ void SPCanvas::scrollTo(double cx, double cy, unsigned int clear, bool is_scroll Geom::IntRect old_area = getViewboxIntegers(); Geom::IntRect new_area = old_area + Geom::IntPoint(dx, dy); - - _dx0 = cx; // here the 'd' stands for double, not delta! - _dy0 = cy; - _x0 = ix; - _y0 = iy; gtk_widget_get_allocation(&_widget, &allocation); + // adjust backing store contents assert(_backing_store); cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, allocation.width, allocation.height); cairo_t *cr = cairo_create(new_backing_store); - cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + // Paint the background + cairo_translate(cr, -ix, -iy); + cairo_set_source(cr, _background); cairo_paint(cr); - cairo_set_source_surface(cr, _backing_store, -dx, -dy); + // Copy the old backing store contents + cairo_set_source_surface(cr, _backing_store, _x0, _y0); + cairo_rectangle(cr, _x0, _y0, allocation.width, allocation.height); + cairo_clip(cr); cairo_paint(cr); cairo_destroy(cr); cairo_surface_destroy(_backing_store); _backing_store = new_backing_store; + _dx0 = cx; // here the 'd' stands for double, not delta! + _dy0 = cy; + _x0 = ix; + _y0 = iy; + + // Adjust the clean region if (clear) { - cairo_region_destroy(_clean_region); - _clean_region = cairo_region_create(); + dirtyAll(); } else { cairo_rectangle_int_t crect = { _x0, _y0, allocation.width, allocation.height }; cairo_region_intersect_rectangle(_clean_region, &crect); @@ -2070,6 +2050,35 @@ void SPCanvas::requestRedraw(int x0, int y0, int x1, int y1) addIdle(); } +void SPCanvas::setBackgroundColor(guint32 rgba) { + double new_r = SP_RGBA32_R_F(rgba); + double new_g = SP_RGBA32_G_F(rgba); + double new_b = SP_RGBA32_B_F(rgba); + if (!_background_is_checkerboard) { + double old_r, old_g, old_b; + cairo_pattern_get_rgba(_background, &old_r, &old_g, &old_b, NULL); + if (new_r == old_r && new_g == old_g && new_b == old_b) return; + } + if (_background) { + cairo_pattern_destroy(_background); + } + _background = cairo_pattern_create_rgb(new_r, new_g, new_b); + _background_is_checkerboard = false; + dirtyAll(); + addIdle(); +} + +void SPCanvas::setBackgroundCheckerboard() { + if (_background_is_checkerboard) return; + if (_background) { + cairo_pattern_destroy(_background); + } + _background = ink_cairo_pattern_create_checkerboard(); + _background_is_checkerboard = true; + dirtyAll(); + addIdle(); +} + /** * Sets world coordinates from win and canvas. */ @@ -2175,6 +2184,13 @@ void SPCanvas::dirtyRect(Geom::IntRect const &area) { markRect(area, 1); } +void SPCanvas::dirtyAll() { + if (_clean_region && !cairo_region_is_empty(_clean_region)) { + cairo_region_destroy(_clean_region); + _clean_region = cairo_region_create(); + } +} + void SPCanvas::markRect(Geom::IntRect const &area, uint8_t val) { cairo_rectangle_int_t crect = { area.left(), area.top(), area.width(), area.height() }; diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index a1f8d0a1a..171fdaf67 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -87,6 +87,9 @@ struct SPCanvas { Geom::IntRect getViewboxIntegers() const; SPCanvasGroup *getRoot(); + void setBackgroundColor(guint32 rgba); + void setBackgroundCheckerboard(); + /// Returns new canvas as widget. static GtkWidget *createAA(); @@ -105,7 +108,8 @@ private: /// Marks the specified area as dirty (requiring redraw) void dirtyRect(Geom::IntRect const &area); - /// Marks specific canvas rectangle as clean (val == 0) or dirty (otherwise) + /// Marks the whole widget for redraw + void dirtyAll(); void markRect(Geom::IntRect const &area, uint8_t val); /// Invokes update, paint, and repick on canvas. @@ -177,14 +181,18 @@ public: bool _is_dragging; double _dx0; double _dy0; - int _x0; - int _y0; + int _x0; ///< World coordinate of the leftmost pixels + int _y0; ///< World coordinate of the topmost pixels - /* Area that needs redrawing, stored as a microtile array */ + /// Image surface storing the contents of the widget cairo_surface_t *_backing_store; + /// Area of the widget that has up-to-date content cairo_region_t *_clean_region; + /// Widget background, defaults to white + cairo_pattern_t *_background; + bool _background_is_checkerboard; - /** Last known modifier state, for deferred repick when a button is down. */ + /// Last known modifier state, for deferred repick when a button is down. int _state; /** The item containing the mouse pointer, or NULL if none. */ diff --git a/src/document.cpp b/src/document.cpp index ae03b1ba1..7086fc0be 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -46,6 +46,7 @@ #include "widgets/desktop-widget.h" #include "desktop.h" #include "dir-util.h" +#include "display/drawing.h" #include "display/drawing-item.h" #include "document-private.h" #include "document-undo.h" @@ -1316,6 +1317,7 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro if ( SP_IS_ITEM(o) ) { SPItem *item = SP_ITEM(o); Inkscape::DrawingItem *arenaitem = item->get_arenaitem(dkey); + arenaitem->drawing().update(); if (arenaitem && arenaitem->pick(p, delta, 1) != NULL && (take_insensitive || item->isVisibleAndUnlocked(dkey))) { if (find(list.begin(),list.end(),item)!=list.end() ) { @@ -1380,10 +1382,12 @@ static SPItem *find_item_at_point(std::deque<SPItem*> *nodes, unsigned int dkey, continue; } Inkscape::DrawingItem *arenaitem = child->get_arenaitem(dkey); - - if (arenaitem && arenaitem->pick(p, delta, 1) != NULL) { - seen = child; - break; + if (arenaitem) { + arenaitem->drawing().update(); + if (arenaitem->pick(p, delta, 1) != NULL) { + seen = child; + break; + } } } @@ -1413,6 +1417,7 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) { SPItem *child = SP_ITEM(o); Inkscape::DrawingItem *arenaitem = child->get_arenaitem(dkey); + arenaitem->drawing().update(); // seen remembers the last (topmost) of groups pickable at this point if (arenaitem && arenaitem->pick(p, delta, 1) != NULL) { diff --git a/src/extension/CMakeLists.txt b/src/extension/CMakeLists.txt index a8fd86d39..a5352d0ba 100644 --- a/src/extension/CMakeLists.txt +++ b/src/extension/CMakeLists.txt @@ -246,20 +246,7 @@ if(WITH_IMAGE_MAGICK) endif() if(WITH_DBUS) - list(APPEND extension_SRC - dbus/application-interface.cpp - dbus/dbus-init.cpp - dbus/document-interface.cpp - - # ------ - # Header - dbus/application-interface.h - dbus/dbus-init.h - dbus/document-interface.h - dbus/wrapper/inkscape-dbus-wrapper.h - ) - - include_directories(dbus) + add_subdirectory(dbus) endif() # add_inkscape_lib(extension_LIB "${extension_SRC}") diff --git a/src/extension/dbus/CMakeLists.txt b/src/extension/dbus/CMakeLists.txt new file mode 100644 index 000000000..ad9e1fd7d --- /dev/null +++ b/src/extension/dbus/CMakeLists.txt @@ -0,0 +1,29 @@ +if(WITH_DBUS) +include_directories(${CMAKE_BINARY_DIR}/src/extension/dbus) +set(dbus_SRC "") + list(APPEND dbus_SRC + application-interface.cpp + dbus-init.cpp + document-interface.cpp + ) + add_custom_target(inkscape_dbus + DEPENDS ${CMAKE_BINARY_DIR}/src/extension/dbus/application-server-glue.h ${CMAKE_BINARY_DIR}/src/extension/dbus/document-server-glue.h ${CMAKE_BINARY_DIR}/src/extension/dbus/document-client-glue.h + ) + add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/src/extension/dbus/application-server-glue.h ${CMAKE_BINARY_DIR}/src/extension/dbus/document-server-glue.h ${CMAKE_BINARY_DIR}/src/extension/dbus/document-client-glue.h + DEPENDS ${CMAKE_SOURCE_DIR}/src/extension/dbus/application-interface.xml ${CMAKE_SOURCE_DIR}/src/extension/dbus/document-interface.xml + COMMAND dbus-binding-tool --mode=glib-server --output=${CMAKE_BINARY_DIR}/src/extension/dbus/application-server-glue.h --prefix=application_interface ${CMAKE_SOURCE_DIR}/src/extension/dbus/application-interface.xml + COMMAND dbus-binding-tool --mode=glib-server --output=${CMAKE_BINARY_DIR}/src/extension/dbus/document-server-glue.h --prefix=document_interface ${CMAKE_SOURCE_DIR}/src/extension/dbus/document-interface.xml + COMMAND dbus-binding-tool --mode=glib-client --output=${CMAKE_BINARY_DIR}/src/extension/dbus/document-client-glue.h --prefix=document_interface ${CMAKE_SOURCE_DIR}/src/extension/dbus/document-interface.xml + ) + set_source_files_properties( + ${CMAKE_BINARY_DIR}/src/extension/dbus/application-server-glue.h + PROPERTIES GENERATED TRUE) + set_source_files_properties( + ${CMAKE_BINARY_DIR}/src/extension/dbus/document-server-glue.h + PROPERTIES GENERATED TRUE) + set_source_files_properties( + ${CMAKE_BINARY_DIR}/src/extension/dbus/document-client-glue.h + PROPERTIES GENERATED TRUE) +add_inkscape_source("${dbus_SRC}") +endif() diff --git a/src/libgdl/gdl-dock-bar.c b/src/libgdl/gdl-dock-bar.c index 1d7b33b5f..c1fe21872 100644 --- a/src/libgdl/gdl-dock-bar.c +++ b/src/libgdl/gdl-dock-bar.c @@ -314,7 +314,7 @@ gdl_dock_bar_add_item (GdlDockBar *dockbar, } else if (pixbuf_icon) { image = gtk_image_new_from_pixbuf (pixbuf_icon); } else { - image = gtk_image_new_from_stock (GTK_STOCK_NEW, + image = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_SMALL_TOOLBAR); } gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0); diff --git a/src/libnrtype/Layout-TNG-Compute.cpp b/src/libnrtype/Layout-TNG-Compute.cpp index e862f0657..337d2a656 100644 --- a/src/libnrtype/Layout-TNG-Compute.cpp +++ b/src/libnrtype/Layout-TNG-Compute.cpp @@ -14,6 +14,7 @@ #include "svg/svg-length.h" #include "sp-object.h" #include "Layout-TNG-Scanline-Maker.h" +#include <limits> namespace Inkscape { namespace Text { @@ -1569,8 +1570,8 @@ bool Layout::Calculator::_buildChunksInScanRun(ParagraphInfo const ¶, new_span_height.computeEffective( new_span.start.iter_span->line_height_multiplier ); /* floating point 80-bit/64-bit rounding problems require epsilon. See discussion http://inkscape.gristle.org/2005-03-16.txt around 22:00 */ - if ( new_span_height.ascent > line_height->ascent + FLT_EPSILON || - new_span_height.descent > line_height->descent + FLT_EPSILON) { + if ( new_span_height.ascent > line_height->ascent + std::numeric_limits<float>::epsilon() || + new_span_height.descent > line_height->descent + std::numeric_limits<float>::epsilon() ) { // Take larger of each of the two ascents and two descents per CSS line_height->max(new_span_height); if (!_scanline_maker->canExtendCurrentScanline(*line_height)) { diff --git a/src/libnrtype/Layout-TNG-Scanline-Makers.cpp b/src/libnrtype/Layout-TNG-Scanline-Makers.cpp index dcc973a24..0d6112d19 100644 --- a/src/libnrtype/Layout-TNG-Scanline-Makers.cpp +++ b/src/libnrtype/Layout-TNG-Scanline-Makers.cpp @@ -11,6 +11,7 @@ #include "Layout-TNG-Scanline-Maker.h" #include "livarot/Shape.h" #include "livarot/float-line.h" +#include <limits> namespace Inkscape { namespace Text { @@ -43,7 +44,7 @@ std::vector<Layout::ScanlineMaker::ScanRun> Layout::InfiniteScanlineMaker::makeS { std::vector<ScanRun> runs(1); runs[0].x_start = _x; - runs[0].x_end = FLT_MAX; // we could use DBL_MAX, but this just seems safer + runs[0].x_end = std::numeric_limits<float>::max(); // we could use DBL_MAX, but this just seems safer runs[0].y = _y; _current_line_height = line_height; return runs; diff --git a/src/live_effects/parameter/originalpatharray.cpp b/src/live_effects/parameter/originalpatharray.cpp index 7e3a6f5fe..4ee068ebf 100644 --- a/src/live_effects/parameter/originalpatharray.cpp +++ b/src/live_effects/parameter/originalpatharray.cpp @@ -144,7 +144,7 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() { // Paste path to link button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( GTK_STOCK_PASTE, Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("gtk-stock", Inkscape::ICON_SIZE_BUTTON) ); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -156,7 +156,7 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Remove linked path - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( GTK_STOCK_REMOVE, Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("gtk-remove", Inkscape::ICON_SIZE_BUTTON) ); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -168,7 +168,7 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Move Down - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( GTK_STOCK_GO_DOWN, Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( "gtk-go-down", Inkscape::ICON_SIZE_BUTTON) ); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -180,7 +180,7 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Move Down - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( GTK_STOCK_GO_UP, Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( "gtk-go-up", Inkscape::ICON_SIZE_BUTTON) ); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/menus-skeleton.h b/src/menus-skeleton.h index 8cdfbeb05..9c7c65140 100644 --- a/src/menus-skeleton.h +++ b/src/menus-skeleton.h @@ -86,6 +86,8 @@ static char const menus_skeleton[] = " <verb verb-id=\"EditInvert\" />\n" " <verb verb-id=\"EditDeselect\" />\n" " <separator/>\n" +" <verb verb-id=\"FitCanvasToSelectionOrDrawing\" />\n" +" <separator/>\n" " <verb verb-id=\"EditGuidesAroundPage\" />\n" " <verb verb-id=\"EditGuidesToggleLock\" check=\"yes\" />\n" " <verb verb-id=\"EditRemoveAllGuides\" />\n" @@ -188,6 +190,7 @@ static char const menus_skeleton[] = " <separator/>\n" " <verb verb-id=\"SelectionGroup\" />\n" " <verb verb-id=\"SelectionUnGroup\" />\n" +" <verb verb-id=\"SelectionUnGroupPopSelection\" />\n" " <separator/>\n" " <submenu name=\"" N_("Cli_p") "\">\n" " <verb verb-id=\"ObjectSetClipPath\" />\n" diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index e9a3af83a..7d32477a1 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -791,6 +791,38 @@ static gint clone_depth_descending(gconstpointer a, gconstpointer b) { return -1; } } + +void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop) +{ + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("<b>No objects selected</b> to pop out of group.")); + return; + } + std::vector<SPItem*> selection_list = selection->itemList(); + + std::vector<SPItem*>::const_iterator item = selection_list.begin(); // leaving this because it will be useful for + // future implementation of complex pop ungrouping + SPItem *obj = *item; + SPItem *parent_group = static_cast<SPItem*>(obj->parent); + if (!SP_IS_GROUP(parent_group) || SP_IS_LAYER(parent_group)) { + desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Selection <b>not in a group</b>.")); + return; + } + if (parent_group->firstChild()->getNext() == NULL) { + std::vector<SPItem*> children; + sp_item_group_ungroup(static_cast<SPGroup*>(parent_group), children, false); + } + else { + sp_selection_to_next_layer(desktop, 1); // suppress done + } + + parent_group->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP_POP_SELECTION, + _("Pop selection from group")); + +} + void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) { diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index 4bfa2c0aa..82b91c617 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -76,6 +76,7 @@ void sp_selection_untile(SPDesktop *desktop); void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp index 18f03aa1b..379682668 100644 --- a/src/trace/trace.cpp +++ b/src/trace/trace.cpp @@ -274,6 +274,7 @@ Glib::RefPtr<Gdk::Pixbuf> Tracer::sioxProcessImage(SPImage *img, Glib::RefPtr<Gd for (aIter = arenaItems.begin() ; aIter!=arenaItems.end() ; ++aIter) { Inkscape::DrawingItem *arenaItem = *aIter; + arenaItem->drawing().update(); if (arenaItem->pick(point, 1.0f, 1)) { weHaveAHit = true; diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 7e9d8481a..b70cfcdd4 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -1364,6 +1364,7 @@ FilterEffectsDialog::FilterModifier::FilterModifier(FilterEffectsDialog& d) _list.append_column("#", _columns.count); _list.get_column(2)->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE); _list.get_column(2)->set_expand(false); + _list.get_column(2)->set_reorderable(true); sw->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); _list.get_column(1)->set_resizable(true); @@ -1868,7 +1869,7 @@ void FilterEffectsDialog::PrimitiveList::update() if(f) { bool active_found = false; - _dialog._primitive_box.set_sensitive(true); + _dialog._primitive_box->set_sensitive(true); _dialog.update_filter_general_settings_view(); for(SPObject *prim_obj = f->children; prim_obj && SP_IS_FILTER_PRIMITIVE(prim_obj); @@ -1913,7 +1914,7 @@ void FilterEffectsDialog::PrimitiveList::update() } } else { - _dialog._primitive_box.set_sensitive(false); + _dialog._primitive_box->set_sensitive(false); set_size_request(-1, -1); } } @@ -2760,8 +2761,10 @@ FilterEffectsDialog::FilterEffectsDialog() // Initialize widget hierarchy #if WITH_GTKMM_3_0 Gtk::Paned* hpaned = Gtk::manage(new Gtk::Paned); + _primitive_box = Gtk::manage(new Gtk::Paned); #else Gtk::HPaned* hpaned = Gtk::manage(new Gtk::HPaned); + _primitive_box = Gtk::manage(new Gtk::VPaned); #endif Gtk::ScrolledWindow* sw_prims = Gtk::manage(new Gtk::ScrolledWindow); @@ -2769,25 +2772,40 @@ FilterEffectsDialog::FilterEffectsDialog() Gtk::HBox* infobox = Gtk::manage(new Gtk::HBox(/*homogeneous:*/false, /*spacing:*/4)); Gtk::HBox* hb_prims = Gtk::manage(new Gtk::HBox); Gtk::VBox* vb_prims = Gtk::manage(new Gtk::VBox); + Gtk::VBox* vb_desc = Gtk::manage(new Gtk::VBox); + + Gtk::VBox* prim_vbox_p = Gtk::manage(new Gtk::VBox); + Gtk::VBox* prim_vbox_i = Gtk::manage(new Gtk::VBox); + _primitive_box->pack1(*prim_vbox_p); + _primitive_box->pack2(*prim_vbox_i); + _getContents()->add(*hpaned); hpaned->pack1(_filter_modifier); - hpaned->pack2(_primitive_box); - _primitive_box.pack_start(*sw_prims); - _primitive_box.pack_start(*sw_infobox, false, false); + hpaned->pack2(*_primitive_box); + prim_vbox_p->pack_start(*sw_prims, true, true); + prim_vbox_i->pack_start(*vb_prims, true, true); + sw_prims->add(_primitive_list); - sw_infobox->add(*vb_prims); - infobox->pack_start(_infobox_icon, false, false); - infobox->pack_start(_infobox_desc, false, false); + sw_infobox->add(*infobox); + + _infobox_icon.set_alignment(0, 0); + _infobox_desc.set_alignment(0, 0); + _infobox_desc.set_justify(Gtk::JUSTIFY_LEFT); _infobox_desc.set_line_wrap(true); - _infobox_desc.set_size_request(250, -1); - - vb_prims->pack_start(*hb_prims); - vb_prims->pack_start(*infobox); + _infobox_desc.set_size_request(200, -1); + + infobox->pack_start(_infobox_icon, false, false); + vb_desc->pack_start(_infobox_desc, true, true); + infobox->pack_start(*vb_desc, true, true); + + vb_prims->pack_start(*hb_prims, false, false); + vb_prims->pack_start(*sw_infobox, true, true); hb_prims->pack_start(_add_primitive, false, false); - hb_prims->pack_start(_add_primitive_type, false, false); - _getContents()->pack_start(_settings_tabs, false, false); + + hb_prims->pack_start(_add_primitive_type, true, true); + _getContents()->pack_start(_settings_tabs, true, true); _settings_tabs.append_page(_settings_tab1, _("Effect parameters")); _settings_tabs.append_page(_settings_tab2, _("Filter General Settings")); @@ -2801,7 +2819,7 @@ FilterEffectsDialog::FilterEffectsDialog() sw_prims->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); sw_prims->set_shadow_type(Gtk::SHADOW_IN); - sw_infobox->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER); + sw_infobox->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); // al_settings->set_padding(0, 0, 12, 0); // fr_settings->set_shadow_type(Gtk::SHADOW_NONE); @@ -3026,7 +3044,8 @@ void FilterEffectsDialog::update_primitive_infobox() g_assert(false); break; } - _infobox_icon.set_pixel_size(96); + //_infobox_icon.set_pixel_size(96); + _infobox_icon.set_pixel_size(64); } void FilterEffectsDialog::duplicate_primitive() diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 283abb5b0..90bde23cf 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -28,6 +28,8 @@ #include <gtkmm/notebook.h> #include <gtkmm/sizegroup.h> +#include <gtkmm/paned.h> + namespace Inkscape { namespace UI { namespace Dialog { @@ -279,7 +281,12 @@ private: Gtk::Image _infobox_icon; // View/add primitives - Gtk::VBox _primitive_box; +#if WITH_GTKMM_3_0 + Gtk::Paned* _primitive_box; +#else + Gtk::VPaned* _primitive_box; +#endif + UI::Widget::ComboBoxEnum<Inkscape::Filters::FilterPrimitiveType> _add_primitive_type; Gtk::Button _add_primitive; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 891048beb..27694a9ac 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -1907,8 +1907,8 @@ ObjectsPanel::ObjectsPanel() : _popupMenu.append(*Gtk::manage(new Gtk::SeparatorMenuItem())); - _watchingNonTop.push_back( &_addPopupItem( targetDesktop, SP_VERB_SELECTION_RAISE, GTK_STOCK_GO_UP, _("Up"), (int)BUTTON_UP ) ); - _watchingNonBottom.push_back( &_addPopupItem( targetDesktop, SP_VERB_SELECTION_LOWER, GTK_STOCK_GO_DOWN, _("Down"), (int)BUTTON_DOWN ) ); + _watchingNonTop.push_back( &_addPopupItem( targetDesktop, SP_VERB_SELECTION_RAISE, "gtk-go-up", _("Up"), (int)BUTTON_UP ) ); + _watchingNonBottom.push_back( &_addPopupItem( targetDesktop, SP_VERB_SELECTION_LOWER, "gtk-go-down", _("Down"), (int)BUTTON_DOWN ) ); _popupMenu.append(*Gtk::manage(new Gtk::SeparatorMenuItem())); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index a16bbc472..3e2a2004c 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1523,6 +1523,12 @@ ContextMenu::ContextMenu(SPDesktop *desktop, SPItem *item) : MIParent.signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::LeaveGroup)); MIParent.show(); append(MIParent); + + /* Pop selection out of group */ + Gtk::MenuItem* miu = Gtk::manage(new Gtk::MenuItem(_("_Pop selection out of group"), 1)); + miu->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateUngroupPopSelection)); + miu->show(); + append(*miu); } } } @@ -1920,6 +1926,12 @@ void ContextMenu::ActivateUngroup(void) sp_item_group_ungroup(static_cast<SPGroup*>(_item), children); _desktop->selection->setList(children); } + +void ContextMenu::ActivateUngroupPopSelection(void) +{ + sp_selection_ungroup_pop_selection(_desktop->selection, _desktop); +} + void ContextMenu::MakeAnchorMenu(void) { diff --git a/src/ui/interface.h b/src/ui/interface.h index 6fb74046f..52074f0f0 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -194,6 +194,7 @@ class ContextMenu : public Gtk::Menu /** * callback, is executed on clicking the anchor "Group" and "Ungroup" menu entry */ + void ActivateUngroupPopSelection(void); void ActivateUngroup(void); void ActivateGroup(void); diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index 823e24a00..10294125d 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -48,7 +48,6 @@ AddToIcon::AddToIcon() : // // _property_pixbuf_add = Gtk::Widget:: - //property_stock_id() = GTK_STOCK_ADD; set_pixbuf(); } diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index dc89d233f..2a1fa352b 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -32,7 +32,6 @@ #include "util/reverse-list.h" #include "verbs.h" #include "widgets/icon.h" -#include "widgets/shrink-wrap-button.h" #include "xml/node-event-vector.h" #include "widgets/gradient-vector.h" @@ -114,7 +113,6 @@ LayerSelector::LayerSelector(SPDesktop *desktop) ); _visibility_toggle.set_relief(Gtk::RELIEF_NONE); - shrink_wrap_button(_visibility_toggle); _visibility_toggle.set_tooltip_text(_("Toggle current layer visibility")); pack_start(_visibility_toggle, Gtk::PACK_EXPAND_PADDING); @@ -135,7 +133,6 @@ LayerSelector::LayerSelector(SPDesktop *desktop) ); _lock_toggle.set_relief(Gtk::RELIEF_NONE); - shrink_wrap_button(_lock_toggle); _lock_toggle.set_tooltip_text(_("Lock or unlock current layer")); pack_start(_lock_toggle, Gtk::PACK_EXPAND_PADDING); diff --git a/src/verbs.cpp b/src/verbs.cpp index 7b128c172..299cfe8e7 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1150,6 +1150,9 @@ void SelectionVerb::perform(SPAction *action, void *data) case SP_VERB_SELECTION_UNGROUP: sp_selection_ungroup(selection, dt); break; + case SP_VERB_SELECTION_UNGROUP_POP_SELECTION: + sp_selection_ungroup_pop_selection(selection, dt); + break; default: handled = false; break; @@ -2559,6 +2562,8 @@ Verb *Verb::_base_verbs[] = { N_("Group selected objects"), INKSCAPE_ICON("object-group")), new SelectionVerb(SP_VERB_SELECTION_UNGROUP, "SelectionUnGroup", N_("_Ungroup"), N_("Ungroup selected groups"), INKSCAPE_ICON("object-ungroup")), + new SelectionVerb(SP_VERB_SELECTION_UNGROUP_POP_SELECTION, "SelectionUnGroupPopSelection", N_("_Pop selected objects out of group"), + N_("Pop selected objects out of group"), INKSCAPE_ICON("object-ungroup-pop-selection")), new SelectionVerb(SP_VERB_SELECTION_TEXTTOPATH, "SelectionTextToPath", N_("_Put on Path"), N_("Put text on path"), INKSCAPE_ICON("text-put-on-path")), @@ -3000,7 +3005,7 @@ Verb *Verb::_base_verbs[] = { N_("Fit the page to the current selection"), NULL), new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_DRAWING, "FitCanvasToDrawing", N_("Fit Page to Drawing"), N_("Fit the page to the drawing"), NULL), - new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, "FitCanvasToSelectionOrDrawing", N_("Fit Page to Selection or Drawing"), + new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, "FitCanvasToSelectionOrDrawing", N_("_Resize Page to Selection"), N_("Fit the page to the current selection or the drawing if there is no selection"), NULL), // LockAndHide new LockAndHideVerb(SP_VERB_UNLOCK_ALL, "UnlockAll", N_("Unlock All"), diff --git a/src/verbs.h b/src/verbs.h index 4f453761e..ffb9b23d8 100644 --- a/src/verbs.h +++ b/src/verbs.h @@ -116,6 +116,7 @@ enum { SP_VERB_SELECTION_LOWER, SP_VERB_SELECTION_GROUP, SP_VERB_SELECTION_UNGROUP, + SP_VERB_SELECTION_UNGROUP_POP_SELECTION, SP_VERB_SELECTION_TEXTTOPATH, SP_VERB_SELECTION_TEXTFROMPATH, SP_VERB_SELECTION_REMOVE_KERNS, diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 8cb6e947f..225afe317 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -38,7 +38,6 @@ set(widgets_SRC paint-selector.cpp ruler.cpp select-toolbar.cpp - shrink-wrap-button.cpp sp-attribute-widget.cpp sp-color-selector.cpp sp-widget.cpp @@ -94,7 +93,6 @@ set(widgets_SRC paint-selector.h ruler.h select-toolbar.h - shrink-wrap-button.h sp-attribute-widget.h sp-color-selector.h sp-widget.h diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index 2ee0f7002..c9f04de14 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -72,8 +72,6 @@ ink_common_sources += \ widgets/ruler.h \ widgets/select-toolbar.cpp \ widgets/select-toolbar.h \ - widgets/shrink-wrap-button.cpp \ - widgets/shrink-wrap-button.h \ widgets/spray-toolbar.cpp \ widgets/spray-toolbar.h \ widgets/spiral-toolbar.cpp \ diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 759be551f..fe724a964 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -1698,8 +1698,11 @@ void SPDesktopWidget::setToolboxPosition(Glib::ustring const& id, GtkPositionTyp case GTK_POS_TOP: case GTK_POS_BOTTOM: if ( gtk_widget_is_ancestor(toolbox, hbox) ) { + // Removing a widget can reduce ref count to zero + g_object_ref(G_OBJECT(toolbox)); gtk_container_remove(GTK_CONTAINER(hbox), toolbox); gtk_container_add(GTK_CONTAINER(vbox), toolbox); + g_object_unref(G_OBJECT(toolbox)); gtk_box_set_child_packing(GTK_BOX(vbox), toolbox, FALSE, TRUE, 0, GTK_PACK_START); } ToolboxFactory::setOrientation(toolbox, GTK_ORIENTATION_HORIZONTAL); @@ -1707,8 +1710,10 @@ void SPDesktopWidget::setToolboxPosition(Glib::ustring const& id, GtkPositionTyp case GTK_POS_LEFT: case GTK_POS_RIGHT: if ( !gtk_widget_is_ancestor(toolbox, hbox) ) { + g_object_ref(G_OBJECT(toolbox)); gtk_container_remove(GTK_CONTAINER(vbox), toolbox); gtk_container_add(GTK_CONTAINER(hbox), toolbox); + g_object_unref(G_OBJECT(toolbox)); gtk_box_set_child_packing(GTK_BOX(hbox), toolbox, FALSE, TRUE, 0, GTK_PACK_START); if (pos == GTK_POS_LEFT) { gtk_box_reorder_child( GTK_BOX(hbox), toolbox, 0 ); diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp index 943434868..aefcb2e81 100644 --- a/src/widgets/font-selector.cpp +++ b/src/widgets/font-selector.cpp @@ -159,9 +159,24 @@ static void sp_font_selector_init(SPFontSelector *fsel) /* Muck with style, see text-toolbar.cpp */ gtk_widget_set_name( GTK_WIDGET(fsel->family_treeview), "font_selector_family" ); + +#if GTK_CHECK_VERSION(3,0,0) + GtkCssProvider *css_provider = gtk_css_provider_new(); + gtk_css_provider_load_from_data(css_provider, + "#font_selector_family {\n" + " -GtkWidget-wide-separators: true;\n" + " -GtkWidget-separator-height: 6;\n" + "}\n", + -1, NULL); + + GdkScreen *screen = gdk_screen_get_default(); + gtk_style_context_add_provider_for_screen(screen, + GTK_STYLE_PROVIDER(css_provider), + GTK_STYLE_PROVIDER_PRIORITY_USER); +#else gtk_rc_parse_string ( "widget \"*font_selector_family\" style \"fontfamily-separator-style\""); - +#endif Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance(); Glib::RefPtr<Gtk::ListStore> store = fontlister->get_font_list(); diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index f998cd66d..010b3a6fb 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -280,7 +280,13 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) GtkAllocation allocation; GtkRequisition requisition; gtk_widget_get_allocation(widget, &allocation); + +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_get_preferred_size(widget, &requisition, NULL); +#else gtk_widget_get_requisition(widget, &requisition); +#endif + int x = floor(allocation.x + ((allocation.width - requisition.width) * 0.5)); int y = floor(allocation.y + ((allocation.height - requisition.height) * 0.5)); int width = gdk_pixbuf_get_width(image); diff --git a/src/widgets/shrink-wrap-button.cpp b/src/widgets/shrink-wrap-button.cpp deleted file mode 100644 index 941a0466c..000000000 --- a/src/widgets/shrink-wrap-button.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Inkscape::Widgets::shrink_wrap_button - shrink a button to minimum size - * - * Authors: - * MenTaLguY <mental@rydia.net> - * - * Copyright (C) 2004 MenTaLguY - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gtkmm/button.h> -#include <gtk/gtk.h> - -#include "shrink-wrap-button.h" - -namespace Inkscape { -namespace Widgets { - -void shrink_wrap_button(Gtk::Button &button) { - button.set_border_width(0); - button.set_can_focus(false); - button.set_can_default(false); - - Gtk::Widget* child = button.get_child(); - Gtk::Requisition req_min; - - if (child) { -#if WITH_GTKMM_3_0 - Gtk::Requisition req_nat; - child->get_preferred_size(req_min, req_nat); -#else - req_min = child->size_request(); -#endif - } else { - req_min.width = 0; - req_min.height = 0; - } - - // TODO: Use Gtk::StyleContext instead - GtkStyle* style = gtk_widget_get_style(GTK_WIDGET(button.gobj())); - - req_min.width += 2 + 2 * std::max(2, style->xthickness); - req_min.height += 2 + 2 * std::max(2, style->ythickness); - - button.set_size_request(req_min.width, req_min.height); -} - -} -} - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/widgets/shrink-wrap-button.h b/src/widgets/shrink-wrap-button.h deleted file mode 100644 index ca9153aea..000000000 --- a/src/widgets/shrink-wrap-button.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Inkscape::Widgets::shrink_wrap_button - shrink a button to minimum size - * - * Authors: - * MenTaLguY <mental@rydia.net> - * - * Copyright (C) 2004 MenTaLguY - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifndef SEEN_INKSCAPE_WIDGETS_SHRINK_WRAP_BUTTON_H -#define SEEN_INKSCAPE_WIDGETS_SHRINK_WRAP_BUTTON_H - -namespace Gtk { class Button; } - -namespace Inkscape { -namespace Widgets { - -void shrink_wrap_button(Gtk::Button &button); - -} -} - -#endif -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp index 89ab76585..5500e1068 100644 --- a/src/widgets/spw-utilities.cpp +++ b/src/widgets/spw-utilities.cpp @@ -94,9 +94,9 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) gtk_widget_show (label_widget); #if GTK_CHECK_VERSION(3,0,0) +#if GTK_CHECK_VERSION(3,12,0) gtk_widget_set_margin_start(label_widget, 4); gtk_widget_set_margin_end(label_widget, 4); -#if GTK_CHECK_VERSION(3,12,0) #else gtk_widget_set_margin_left(label_widget, 4); gtk_widget_set_margin_right(label_widget, 4); diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 661fc6fa9..23acb74af 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -1562,6 +1562,23 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje g_object_set_data( holder, "TextFontFamilyAction", act ); // Change style of drop-down from menu to list +#if GTK_CHECK_VERSION(3,0,0) + GtkCssProvider *css_provider = gtk_css_provider_new(); + gtk_css_provider_load_from_data(css_provider, + "#TextFontFamilyAction_combobox {\n" + " -GtkComboBox-appears-as-list: true;\n" + "}\n" + "combobox window.popup scrolledwindow treeview separator {\n" + " -GtkWidget-wide-separators: true;\n" + " -GtkWidget-separator-height: 6;\n" + "}\n", + -1, NULL); + + GdkScreen *screen = gdk_screen_get_default(); + gtk_style_context_add_provider_for_screen(screen, + GTK_STYLE_PROVIDER(css_provider), + GTK_STYLE_PROVIDER_PRIORITY_USER); +#else gtk_rc_parse_string ( "style \"dropdown-as-list-style\"\n" "{\n" @@ -1574,6 +1591,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje " GtkWidget::separator-height = 6\n" "}\n" "widget \"*gtk-combobox-popup-window.GtkScrolledWindow.GtkTreeView\" style \"fontfamily-separator-style\""); +#endif } /* Font size */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f31b0bc04..ab73b9e37 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,7 +7,8 @@ set(CMAKE_CTEST_COMMAND ctest -V) add_subdirectory(${GMOCK_DIR} ${CMAKE_BINARY_DIR}/gmock) include_directories(SYSTEM ${GMOCK_DIR}/gtest/include - ${GMOCK_DIR}/include) + ${GMOCK_DIR}/include + ${CMAKE_SOURCE_DIR}/gtest/gtest/include) set_source_files_properties( ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp |
