unity-scope-yelp-0.1+13.10.20130723/0000755000015700001700000000000012173420061017125 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/po/0000755000015700001700000000000012173420061017543 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/po/unity-scope-yelp.pot0000644000015700001700000000203112173417245023523 0ustar pbuserpbgroup00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #: ../src/unity_yelp_daemon.py:35 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-21 01:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/unity_yelp_daemon.py:33 msgid "Ubuntu Help" msgstr "" #: ../src/unity_yelp_daemon.py:34 msgid "Sorry, there are no Ubuntu Help results that match your search." msgstr "" #: ../src/unity_yelp_daemon.py:44 msgid "Official Help Documents" msgstr "" #: ../data/yelp.scope.in.h:1 msgid "yelp;" msgstr "" #: ../data/yelp.scope.in.h:2 msgid "Yelp" msgstr "" #: ../data/yelp.scope.in.h:3 msgid "Search Ubuntu Help" msgstr "" unity-scope-yelp-0.1+13.10.20130723/po/POTFILES.in0000644000015700001700000000012112173417245021324 0ustar pbuserpbgroup00000000000000[encoding: UTF-8] src/unity_yelp_daemon.py [type: gettext/ini]data/yelp.scope.in unity-scope-yelp-0.1+13.10.20130723/MANIFEST.in0000644000015700001700000000007612173417245020700 0ustar pbuserpbgroup00000000000000include MANIFEST.in include src/* include data/* include po/* unity-scope-yelp-0.1+13.10.20130723/tests/0000755000015700001700000000000012173420061020267 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/tests/test_yelp.py0000644000015700001700000000644112173417245022670 0ustar pbuserpbgroup00000000000000#! /usr/bin/python3 # -*- coding: utf-8 -*- from gi.repository import Unity from unittest import TestCase import imp import os class ResultSet(Unity.ResultSet): def __init__(self): Unity.ResultSet.__init__(self) self.results = [] def do_add_result(self, result): self.results.append({'uri':result.uri, 'title':result.title, 'comment':result.comment, 'icon':result.icon_hint}) class ScopeTestCase(TestCase): def init_scope(self, scope_path): self.scope_module = imp.load_source('scope', scope_path) self.scope = self.scope_module.load_scope() def perform_query(self, query, filter_set = Unity.FilterSet.new()): result_set = ResultSet() ctx = Unity.SearchContext.create(query, 0, filter_set, None, result_set, None) s = self.scope.create_search_for_query(ctx) s.run() return result_set class TestYelpScope(ScopeTestCase): def setUp(self): self.init_scope('src/unity_yelp_daemon.py') self.scope_module.YELP_EXECUTABLE = os.path.join( os.path.dirname(__file__), "fake-yelp.py") def tearDown(self): self.scope = None self.scope_module = None def test_questions_search(self): self.scope_module.HELP_DIR = 'tests/data/' expected_results = ["tests/data/C/sample_help/mock_yelp_file.page", "Welcome to Ubuntu"] results = [] result_set = self.perform_query('unity') self.assertEqual(len(result_set.results), 1) result = result_set.results[0] self.assertEqual( result['uri'], "tests/data/C/sample_help/mock_yelp_file.page") self.assertEqual(result['title'], "Welcome to Ubuntu") self.assertEqual( result['comment'], "A visual introduction to the Unity desktop.") self.assertEqual(result['icon'], 'sample_help') def test_questions_failing_search(self): self.scope_module.HELP_DIR = 'tests/data/' result_set = self.perform_query('upnriitnyt') self.assertEqual(len(result_set.results), 0) def test_preview(self): result = Unity.ScopeResult() result.uri = "tests/data/C/sample_help/mock_yelp_file.page" result.title = "Welcome to Ubuntu" result.comment = "A visual introduction to the Unity desktop." result.icon_hint = 'sample_help' previewer = self.scope.create_previewer(result, Unity.SearchMetadata()) preview = previewer.run() self.assertEqual(preview.props.title, "Welcome to Ubuntu") self.assertEqual(preview.props.description_markup, "A visual introduction to the Unity desktop.") self.assertNotEqual(preview.props.image, None) self.assertEqual(preview.props.image.get_names(), ['sample_help']) def test_activation(self): result = Unity.ScopeResult() result.uri = "tests/data/C/sample_help/mock_yelp_file.page" activation = self.scope.activate(result, Unity.SearchMetadata(), None) self.assertEqual(activation.props.goto_uri, None) self.assertEqual(activation.props.handled, Unity.HandledType.HIDE_DASH) if __name__ == '__main__': unittest.main() unity-scope-yelp-0.1+13.10.20130723/tests/fake-yelp.py0000755000015700001700000000010412173417245022526 0ustar pbuserpbgroup00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys sys.exit(1) unity-scope-yelp-0.1+13.10.20130723/tests/__init__.py0000644000015700001700000000000012173417245022400 0ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/tests/data/0000755000015700001700000000000012173420061021200 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/tests/data/C/0000755000015700001700000000000012173420061021362 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/tests/data/C/sample_help/0000755000015700001700000000000012173420061023653 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/tests/data/C/sample_help/mock_yelp_file.page0000644000015700001700000000514412173417245027510 0ustar pbuserpbgroup00000000000000 A visual introduction to the Unity desktop. Shaun McCance shaunm@gnome.org Jim Campbell jwcampbell@gmail.com Welcome to Ubuntu

Ubuntu features Unity, a reimagined way to use your computer. Unity is designed to minimize distractions, give you more room to work, and help you get things done.

This guide is designed to answer your questions about using Unity and your Ubuntu desktop. First we will take a moment to look at some Unity's key features, and how you can use them.

Getting started with Unity

The Unity desktop

The Launcher

The Launcher

The Launcher appears automatically when you log in to your desktop, and gives you quick access to the applications you use most often.

Learn more about the launcher.

The Dash

The Ubuntu Button sits near the top left corner of the screen and is always the top item in the launcher. If you click the Ubuntu Button, Unity will present you with an additional feature of the desktop, the Dash.

The Unity Dash

The Dash is designed to make it easier to find, open, and use apps, files, music, and more. For example, if you type the word "document" into the Search Bar, the Dash will show you applications that help you write and edit documents. It will also show you relevant folders and documents that you have been working on recently.

Learn more about the dash.

unity-scope-yelp-0.1+13.10.20130723/src/0000755000015700001700000000000012173420061017714 5ustar pbuserpbgroup00000000000000unity-scope-yelp-0.1+13.10.20130723/src/unity_yelp_daemon.py0000644000015700001700000002335712173417245024036 0ustar pbuserpbgroup00000000000000#! /usr/bin/python3 # -*- coding: utf-8 -*- # Copyright(C) 2013 Mark Tully # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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, see . import gettext import html import locale import os from xml.etree import cElementTree as ET from gi.repository import GLib, Gio from gi.repository import Unity APP_NAME = 'unity-scope-yelp' LOCAL_PATH = '/usr/share/locale/' locale.setlocale(locale.LC_ALL, '') gettext.bindtextdomain(APP_NAME, LOCAL_PATH) gettext.textdomain(APP_NAME) _ = gettext.gettext GROUP_NAME = 'com.canonical.Unity.Scope.Help.Yelp' UNIQUE_PATH = '/com/canonical/unity/scope/help/yelp' SEARCH_HINT = _('Ubuntu Help') NO_RESULTS_HINT = _('Sorry, there are no Ubuntu Help results that match your search.') PROVIDER_CREDITS = _('') SVG_DIR = '/usr/share/icons/unity-icon-theme/places/svg/' PROVIDER_ICON = SVG_DIR + 'service-yelp.svg' DEFAULT_RESULT_ICON = SVG_DIR + 'result-help.svg' DEFAULT_RESULT_MIMETYPE = 'text/html' DEFAULT_RESULT_TYPE = Unity.ResultType.DEFAULT HELP_DIR = "/usr/share/help/" YELP_CACHE = None MAX_RESULTS = 25 YELP_EXECUTABLE = '/usr/bin/yelp' c1 = {'id': 'help', 'name': _('Official Help Documents'), 'icon': SVG_DIR + 'group-installed.svg', 'renderer': Unity.CategoryRenderer.VERTICAL_TILE} CATEGORIES = [c1] FILTERS = [] m1 = {'id' :'manual', 'type' :'s', 'field':Unity.SchemaFieldType.OPTIONAL} EXTRA_METADATA = [m1] def _get_manuals_in_dir(dir, manuals): """Yield the manuals found in the given directory, omitting those that have already been discovered.""" if not os.path.isdir(dir): return for manual in os.listdir(dir): if manual in manuals: continue manualdir = os.path.join(dir, manual) if os.path.isdir(manualdir): manuals.add(manual) yield manualdir def get_manuals(helpdir): """Get the manuals found in the given directory according to the user's locale.""" language, encoding = locale.getlocale() manuals = set() if language is not None: languagedir = os.path.join(helpdir, language) yield from _get_manuals_in_dir(languagedir, manuals) # If the locale includes a country, look for manuals if language[:2] != language: languagedir = os.path.join(helpdir, language[:2]) yield from _get_manuals_in_dir(languagedir, manuals) # Now return untranslated versions of remaining manuals. languagedir = os.path.join(helpdir, 'C') yield from _get_manuals_in_dir(languagedir, manuals) def get_yelp_documents(): ''' Parses local help files for and 1st tags and associates them with the page's uri in self.data as: {uri, page description, page title} If a help file has no <desc> or <title> tag, it is excluded. ''' data = [] namespaces = {'m': 'http://projectmallard.org/1.0/'} for manualdir in get_manuals(HELP_DIR): for filename in os.listdir(manualdir): filename = os.path.join(manualdir, filename) if not (filename.endswith('page') and os.path.isfile(filename)): continue try: tree = ET.parse(filename) except ET.ParseError: # Not an XML file continue if (tree.getroot().tag != '{http://projectmallard.org/1.0/}page' or tree.getroot().get('type') != 'topic'): # Not a Mallard documentation file. continue title = desc = "" node = tree.find('m:title', namespaces) if node is not None: title = node.text node = tree.find('m:info/m:desc', namespaces) if node is not None: desc = ''.join(node.itertext()) desc = desc.strip(' \t\n\r') if desc == "": desc = title data.append((filename, title, desc, os.path.basename(manualdir))) return data def search(search, filters): ''' Search for help documents matching the search string ''' results = [] if len(search) < 2: return results global YELP_CACHE if not YELP_CACHE: YELP_CACHE = get_yelp_documents() help_data = YELP_CACHE search = search.lower() for (filename, title, desc, manual) in help_data: if len(results) >= MAX_RESULTS: break try: if manual == "ubuntu-help": icon_hint = Gio.ThemedIcon.new("distributor-logo").to_string() else: icon_hint = Gio.ThemedIcon.new(manual).to_string() except: icon_hint = Gio.ThemedIcon.new("help").to_string() manual = "ubuntu-help" if (search in title.lower() or search in desc.lower() or search in manual.lower()): results.append({'uri': filename, 'icon': icon_hint, 'title': title, 'comment': desc, 'manual': manual.title()}) return results class Previewer(Unity.ResultPreviewer): def do_run(self): image = Gio.ThemedIcon.new(self.result.icon_hint) preview = Unity.GenericPreview.new( self.result.title, html.escape(self.result.comment), image) if self.result.metadata: preview.props.subtitle = self.result.metadata['manual'].get_string() icon = Gio.FileIcon.new (Gio.file_new_for_path(PROVIDER_ICON)) action = Unity.PreviewAction.new("open", _("Open"), icon) preview.add_action(action) return preview # Classes below this point establish communication # with Unity, you probably shouldn't modify them. class MySearch(Unity.ScopeSearchBase): def __init__(self, search_context): super(MySearch, self).__init__() self.set_search_context(search_context) def do_run(self): ''' Adds results to the model ''' try: result_set = self.search_context.result_set for i in search(self.search_context.search_query, self.search_context.filter_state): if not 'uri' in i or not i['uri'] or i['uri'] == '': continue if not 'icon' in i or not i['icon'] or i['icon'] == '': i['icon'] = DEFAULT_RESULT_ICON if not 'mimetype' in i or not i['mimetype'] or i['mimetype'] == '': i['mimetype'] = DEFAULT_RESULT_MIMETYPE if not 'result_type' in i or not i['result_type'] or i['result_type'] == '': i['result_type'] = DEFAULT_RESULT_TYPE if not 'category' in i or not i['category'] or i['category'] == '': i['category'] = 0 if not 'title' in i or not i['title']: i['title'] = '' if not 'comment' in i or not i['comment']: i['comment'] = '' if not 'dnd_uri' in i or not i['dnd_uri'] or i['dnd_uri'] == '': i['dnd_uri'] = i['uri'] i['metadata'] = {} if EXTRA_METADATA: for e in i: for m in EXTRA_METADATA: if m['id'] == e: i['metadata'][e] = i[e] i['metadata']['provider_credits'] = GLib.Variant('s', PROVIDER_CREDITS) result_set.add_result(**i) except Exception as error: print(error) class Scope(Unity.AbstractScope): def __init__(self): Unity.AbstractScope.__init__(self) def do_get_search_hint(self): return SEARCH_HINT def do_get_schema(self): ''' Adds specific metadata fields ''' schema = Unity.Schema.new() if EXTRA_METADATA: for m in EXTRA_METADATA: schema.add_field(m['id'], m['type'], m['field']) #FIXME should be REQUIRED for credits schema.add_field('provider_credits', 's', Unity.SchemaFieldType.OPTIONAL) return schema def do_get_categories(self): ''' Adds categories ''' cs = Unity.CategorySet.new() if CATEGORIES: for c in CATEGORIES: cat = Unity.Category.new(c['id'], c['name'], Gio.ThemedIcon.new(c['icon']), c['renderer']) cs.add(cat) return cs def do_get_filters(self): ''' Adds filters ''' fs = Unity.FilterSet.new() #if FILTERS: # return fs def do_get_group_name(self): return GROUP_NAME def do_get_unique_name(self): return UNIQUE_PATH def do_create_search_for_query(self, search_context): se = MySearch(search_context) return se def do_create_previewer(self, result, metadata): rp = Previewer() rp.set_scope_result(result) rp.set_search_metadata(metadata) return rp def do_activate(self, result, metadata, id): parameters = [YELP_EXECUTABLE, result.uri] GLib.spawn_async(parameters) return Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH, goto_uri=None) def load_scope(): return Scope() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/src/__init__.py�������������������������������������������������0000644�0000157�0000170�00000000000�12173417245�022025� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/setup.py��������������������������������������������������������0000644�0000157�0000170�00000001402�12173417245�020646� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Setup file for yelp dash plugin ''' from distutils.core import setup from DistUtilsExtra.command import build_extra from DistUtilsExtra.command import build_i18n setup(name='unity-scope-yelp', version='0.1', author='Mark Tully', author_email='markjtully@gmail.com', url='http://launchpad.net/ubuntu-scopes', license='GNU General Public License (GPL)', data_files=[('share/dbus-1/services', ['data/unity-scope-yelp.service']), ('share/unity-scopes/yelp', ['src/unity_yelp_daemon.py']), ('share/unity-scopes/yelp', ['src/__init__.py']), ], cmdclass={'build': build_extra.build_extra, 'build_i18n': build_i18n.build_i18n, }) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/setup.cfg�������������������������������������������������������0000644�0000157�0000170�00000000175�12173417245�020763� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[build] i18n=True [build_i18n] domain=unity-scope-yelp desktop_files=[('share/unity/scopes/help', ('data/yelp.scope.in',))] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/data/�����������������������������������������������������������0000755�0000157�0000170�00000000000�12173420061�020036� 5����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/data/unity-scope-yelp.service�����������������������������������0000644�0000157�0000170�00000000217�12173417245�024660� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[D-BUS Service] Name=com.canonical.Unity.Scope.Help.Yelp Exec=/usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s help/yelp.scope ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/data/yelp.scope.in����������������������������������������������0000644�0000157�0000170�00000001305�12173417245�022460� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Scope] DBusName=com.canonical.Unity.Scope.Help.Yelp DBusPath=/com/canonical/unity/scope/help/yelp Icon=/usr/share/icons/unity-icon-theme/places/svg/service-yelp.svg _Keywords=yelp; RequiredMetadata= OptionalMetadata=manual[s]; Loader=/usr/share/unity-scopes/yelp/unity_yelp_daemon.py Module=yelp.unity_yelp_daemon ModuleType=python3 RemoteContent=true Type=help _Name=Yelp _Description=This is an Ubuntu search plugin that enables information from the Ubuntu Help to be searched and displayed in the Dash underneath the Help header. If you do not wish to search this content source, you can disable this search plugin. _SearchHint=Search Ubuntu Help [Desktop Entry] X-Ubuntu-Gettext-Domain=unity-scope-yelp ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/data/icons/�����������������������������������������������������0000755�0000157�0000170�00000000000�12173420061�021151� 5����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������unity-scope-yelp-0.1+13.10.20130723/data/icons/service-yelp.svg�������������������������������������0000644�0000157�0000170�00000025441�12173417245�024321� 0����������������������������������������������������������������������������������������������������ustar �pbuser��������������������������pbgroup�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="24" height="24" id="svg2" version="1.1" inkscape:version="0.48.3.1 r9886" sodipodi:docname="scope-yelp.svg"> <defs id="defs4"> <inkscape:perspective id="perspective2447" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 526.18109 : 1" sodipodi:type="inkscape:persp3d" /> <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" id="perspective2846" /> <inkscape:perspective id="perspective2824" inkscape:persp3d-origin="32 : 21.333333 : 1" inkscape:vp_z="64 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 32 : 1" sodipodi:type="inkscape:persp3d" /> <linearGradient x1="426.90356" y1="422.19724" x2="304.28552" y2="306.99435" id="linearGradient10228" xlink:href="#linearGradient10230" gradientUnits="userSpaceOnUse" /> <linearGradient id="linearGradient10230"> <stop style="stop-color: rgb(0, 0, 0); stop-opacity: 1;" offset="0" id="stop10232" /> <stop style="stop-color: rgb(95, 95, 95); stop-opacity: 1;" offset="1" id="stop10234" /> </linearGradient> <radialGradient gradientTransform="matrix(1.5089497,0,0,1.3582164,-39.028917,76.957747)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3798" id="radialGradient3870" fy="-48.544521" fx="77.914261" r="146" cy="-48.544521" cx="77.914261" /> <linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3798" y2="84" x2="299" y1="84" x1="150"> <stop offset="0" style="stop-color:#dddce9;stop-opacity:1" id="stop3800" /> <stop offset="0.37" style="stop-color:#5664a3;stop-opacity:1" id="stop3802" /> <stop offset="1" style="stop-color:#000000;stop-opacity:1" id="stop3804" /> </linearGradient> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.177966,0,108.7434)" r="29.036913" fy="132.28575" fx="61.518883" cy="132.28575" cx="61.518883" id="radialGradient2801" xlink:href="#linearGradient2795" inkscape:collect="always" /> <linearGradient y2="76.313133" x2="26.670298" y1="76.176224" x1="172.94208" gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)" gradientUnits="userSpaceOnUse" id="linearGradient2258" xlink:href="#linearGradient4689" inkscape:collect="always" /> <linearGradient y2="144.75717" x2="-65.308502" y1="144.75717" x1="224.23996" gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)" gradientUnits="userSpaceOnUse" id="linearGradient2255" xlink:href="#linearGradient4671" inkscape:collect="always" /> <linearGradient y2="144.75717" x2="-65.308502" y1="144.75717" x1="224.23996" gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" id="linearGradient2250" xlink:href="#linearGradient4671" inkscape:collect="always" /> <linearGradient y2="76.313133" x2="26.670298" y1="77.475983" x1="172.94208" gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" id="linearGradient2248" xlink:href="#linearGradient4689" inkscape:collect="always" /> <linearGradient y2="144.75717" x2="-65.308502" y1="144.75717" x1="224.23996" gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" id="linearGradient2589" xlink:href="#linearGradient4671" inkscape:collect="always" /> <linearGradient y2="76.313133" x2="26.670298" y1="77.475983" x1="172.94208" gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" id="linearGradient2587" xlink:href="#linearGradient4689" inkscape:collect="always" /> <linearGradient gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4689" id="linearGradient2990" y2="76.313133" x2="26.670298" y1="77.475983" x1="172.94208" /> <linearGradient gradientTransform="translate(100.2702,99.61116)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4671" id="linearGradient2987" y2="144.75717" x2="-65.308502" y1="144.75717" x1="224.23996" /> <linearGradient id="linearGradient4689"> <stop id="stop4691" offset="0" style="stop-color:#5a9fd4;stop-opacity:1;" /> <stop id="stop4693" offset="1" style="stop-color:#306998;stop-opacity:1;" /> </linearGradient> <linearGradient id="linearGradient4671"> <stop id="stop4673" offset="0" style="stop-color:#ffd43b;stop-opacity:1;" /> <stop id="stop4675" offset="1" style="stop-color:#ffe873;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient3236"> <stop id="stop3244" offset="0" style="stop-color:#f4f4f4;stop-opacity:1" /> <stop id="stop3240" offset="1" style="stop-color:white;stop-opacity:1" /> </linearGradient> <linearGradient id="linearGradient3676"> <stop id="stop3678" offset="0" style="stop-color:#b2b2b2;stop-opacity:0.5;" /> <stop id="stop3680" offset="1" style="stop-color:#b3b3b3;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient2787"> <stop id="stop2789" offset="0" style="stop-color:#7f7f7f;stop-opacity:0.5;" /> <stop id="stop2791" offset="1" style="stop-color:#7f7f7f;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient2795"> <stop id="stop2797" offset="0" style="stop-color:#b8b8b8;stop-opacity:0.49803922;" /> <stop id="stop2799" offset="1" style="stop-color:#7f7f7f;stop-opacity:0;" /> </linearGradient> </defs> <sodipodi:namedview id="base" pagecolor="#888888" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" inkscape:zoom="15.543122" inkscape:cx="23.766867" inkscape:cy="6.7328811" inkscape:document-units="px" inkscape:current-layer="g4036" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1029" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:snap-global="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:snap-bbox-edge-midpoints="true" inkscape:bbox-nodes="true" inkscape:snap-bbox-midpoints="true" inkscape:snap-grids="true"> <inkscape:grid type="xygrid" id="grid2985" empspacing="8" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> </sodipodi:namedview> <metadata id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1028.3622)"> <g id="g4036" transform="translate(-67.912501,-42.840107)"> <path inkscape:connector-curvature="0" style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 74.912501,1074.2023 c -1.66202,0 -3,1.338 -3,3 l 0,7 0,2 0,3 c 0,1.662 1.338,3 3,3 l 12.5,0 c 0.277,0 0.653649,-0.2695 0.5,-0.5 l 0,-1.5 -1,0 0,1 -9.78125,0 -0.21875,0 -2,0 -0.5,0 c -0.831,0 -1.5,-0.669 -1.5,-1.5 0,-0.831 0.669,-1.5 1.5,-1.5 l 0.5,0 11.5,0 0.5,0 c 0.554,0 1,-0.446 1,-1 l 0,-12 c 0,-0.554 -0.446,-1 -1,-1 l -8,0 -3,0 -1,0 z m 4.625,2.25 c 0.19392,-0.024 0.42633,0 0.625,0 0.47679,0 0.81507,0.053 1.125,0.1875 0.30992,0.1273 0.56724,0.27 0.75,0.4688 0.18277,0.1984 0.33475,0.4178 0.40625,0.6562 0.0714,0.2383 0.0625,0.4962 0.0625,0.7188 0,0.27 -0.053,0.5352 -0.15625,0.75 -0.0953,0.2145 -0.1615,0.3796 -0.3125,0.5625 -0.15098,0.1826 -0.35642,0.3331 -0.53125,0.5 -0.17484,0.1589 -0.31776,0.3563 -0.46875,0.5312 -0.15098,0.1669 -0.27174,0.3718 -0.375,0.5625 -0.0953,0.1906 -0.1875,0.3552 -0.1875,0.5938 l 0,0.1562 c 0,0.048 0.0545,0.077 0.0625,0.125 l -1.28125,0 c -0.0159,-0.079 0.008,-0.1318 0,-0.2187 -0.008,-0.096 0,-0.1706 0,-0.25 0,-0.2623 0.006,-0.5436 0.0937,-0.75 0.0875,-0.2068 0.20863,-0.3879 0.34375,-0.5625 0.13513,-0.175 0.31776,-0.3178 0.46875,-0.4688 0.15893,-0.151 0.27113,-0.2553 0.40625,-0.4062 0.13512,-0.1509 0.25625,-0.3726 0.34375,-0.5313 0.0874,-0.159 0.125,-0.3093 0.125,-0.5 0,-0.2622 -0.0984,-0.4893 -0.28125,-0.6562 -0.17485,-0.1751 -0.42365,-0.2813 -0.78125,-0.2813 -0.27814,0 -0.5582,0.053 -0.8125,0.125 -0.2543,0.063 -0.50312,0.1927 -0.78125,0.3438 l -0.4375,-1.125 c 0.29404,-0.1668 0.65775,-0.2794 1.03125,-0.375 0.19072,-0.052 0.36858,-0.1321 0.5625,-0.1563 z m 0.375,6.8125 c 0.2702,0 0.53597,0.099 0.71875,0.2813 0.18275,0.1749 0.21875,0.378 0.21875,0.6562 0,0.2781 -0.0359,0.4813 -0.21875,0.6563 -0.18278,0.1752 -0.44855,0.2812 -0.71875,0.2812 -0.26224,0 -0.46553,-0.1061 -0.65625,-0.2812 -0.18272,-0.175 -0.28125,-0.3782 -0.28125,-0.6563 0,-0.2782 0.0984,-0.4813 0.28125,-0.6562 0.19072,-0.1827 0.39401,-0.2813 0.65625,-0.2813 z" id="path3752" /> </g> </g> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������