Merge pull request #3 from mokaddem/contributors

Contributor dashboard
pull/18/head
Alexandre Dulaunoy 2017-11-10 15:49:00 +01:00 committed by GitHub
commit 633fbba881
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
69 changed files with 5459 additions and 108 deletions

View File

@ -1,5 +1,5 @@
# MISP-Dashboard
A Dashboard showing live data and statistics from the MISP ZMQ
An experimental Dashboard showing live data and statistics from the MISP ZMQ
## Installation
- Launch ```./install_dependencies.sh``` from the MISP-Dashboard directory
@ -27,3 +27,32 @@ optional arguments:
-u ZMQURL, --url ZMQURL
The URL to connect to
```
## License
Images and logos are handmade for:
- rankingMISPOrg/
- rankingMISPMonthly/
- MISPHonorableIcons/
Note that:
- Part of ```MISPHonorableIcons/1.svg``` comes from [octicons.github.com](https://octicons.github.com/icon/git-pull-request/) (CC0 - No Rights Reserved)
- Part of ```MISPHonorableIcons/2.svg``` comes from [Zeptozephyr](https://zeptozephyr.deviantart.com/art/Vectored-Portal-Icons-207347804) (CC0 - No Rights Reserved)
```
Copyright (C) 2017 CIRCL - Computer Incident Response Center Luxembourg (c/o smile, security made in Lëtzebuerg, Groupement d'Intérêt Economique)
Copyright (c) 2017 Sami Mokaddem
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
```

View File

@ -1,44 +0,0 @@
[Dashboard]
#hours
graph_log_refresh_rate = 1
#sec
rotation_wait_time = 30
max_img_rotation = 10
hours_spanned = 48
zoomlevel = 15
item_to_plot = Attribute.category
# [1->12]
size_dashboard_left_width = 5
size_openStreet_pannel_perc = 55
size_world_pannel_perc = 35
[GEO]
#min
updateFrequency = 60
zoomlevel = 11
# ~meter
clusteringDistance = 10
[Log]
field_to_plot = Attribute.category
fieldname_order=["Event.id", "Attribute.Tag", "Attribute.category", "Attribute.type", ["Attribute.value", "Attribute.comment"]]
char_separator=||
[RedisGlobal]
host=localhost
port=6251
[RedisLog]
db=0
channel=1
#zmq_url=tcp://localhost:50000
zmq_url=tcp://192.168.56.50:50000
[RedisMap]
db=1
channelProc=CoordToProcess
channelDisp=PicToDisplay
pathMaxMindDB=./data/GeoLite2-City_20171003/GeoLite2-City.mmdb
[RedisDB]
db=2

View File

@ -19,6 +19,17 @@ zoomlevel = 11
# ~meter
clusteringDistance = 10
[CONTRIB]
max_number_of_last_contributor = 10
min_between_reload = 5
#How much harder it gets to rank up (exponential multiplier) [1.5 -> +inf]
rankMultiplier = 2
categories_in_datatable = ["internal_reference", "targeting_data", "antivirus_detection", "payload_delivery", "artifacts_dropped", "payload_installation", "persistence_mechanism", "network_activity", "payload_type", "attribution", "external_analysis", "financial_fraud", "support_Tool", "social_network", "person", "other" ]
default_pnts_per_contribution = 1
# array of the form [[category, pntsRcv], ...]
pnts_per_contribution = [["payload_delivery", 1], ["artifact_dropped", 1], ["network_activity", 1]]
additional_help_text = ["Sightings multiplies earned points by 2", "Editing an attribute earns you the same as creating one"]
[Log]
field_to_plot = Attribute.category
fieldname_order=["Event.id", "Attribute.Tag", "Attribute.category", "Attribute.type", ["Attribute.value", "Attribute.comment"]]
@ -27,12 +38,15 @@ char_separator=||
[RedisGlobal]
host=localhost
port=6251
#misp_web_url = http://192.168.56.50
misp_web_url = http://localhost
#zmq_url=tcp://192.168.56.50:50000
zmq_url=tcp://localhost:50000
[RedisLog]
db=0
channel=1
zmq_url=tcp://localhost:50000
#zmq_url=tcp://192.168.56.50:50000
channelLastContributor = lastContributor
[RedisMap]
db=1

70
config/ranking.cfg Normal file
View File

@ -0,0 +1,70 @@
[rankTitle]
maxLevel=16
1=Ensign
2=Junior Lieutenant
3=Second Lieutenant
4=Lieutenant
5=Senior Lieutenant
6=Captain
7=Senior Captain
8=Major
9=Lieutenant Colonel
10=Colonel
11=Senior Colonel
12=Major General
13=Lieutenant General
14=General
15=Marshal
16=Grand General
[rankRequirementsPnts]
1=2
2=4
3=8
4=16
5=32
6=64
7=128
8=256
9=512
10=1024
11=2048
12=4096
13=8192
14=16384
15=0
16=0
[rankRequirementsMisc]
heavilyCount=10
recentDays=31
regularlyDays=7
[rankRequirementsText]
1=Contributing via sighting at least once a year
2=Contributing via attributes or objects to events at least once a year
3=Contributing via proposals or discussions at least once a year
4=Contributing via sighting to recent events
5=Contributing proposals to recent events
6=Contributing by creating new events at least once a year
7=Contributing by creating new events at least once a month
8=Regularly creating events
9=Regularly creating events with classification
10=Heavily contributing via sighting to recent events
11=Heavily adding attributes or objects to recent events
12=Heavily contributing proposals to recent events
13=Heavily posting events
14=Heavily posting events with classification
15=Heavily contributing quality content (delivered by instance administrators)
16=Honorable contributor (delivered by instance administrators)
[HonorBadge]
1=Has made at least one pull request on the MISP project
2=Is a donator for the MISP project
[additionalInfo]
textsArray=["Proposals means either edition, acceptation or rejection", "Recent events means event aged of one month at max", "Regularly means at least one per week" ,"Heavily means at least 10 per week", "Classification means correct tagging", "The contribution rank is set such that it equals to: rank=requirement_fulfilled-requirement_not_fulfilled"]

585
contributor_helper.py Normal file
View File

@ -0,0 +1,585 @@
import util
import math, random
import os
import configparser
import json
import datetime
class Contributor_helper:
def __init__(self, serv_redis_db, cfg):
self.serv_redis_db = serv_redis_db
self.cfg = cfg
self.cfg_org_rank = configparser.ConfigParser()
self.cfg_org_rank.read(os.path.join(os.environ['DASH_CONFIG'], 'ranking.cfg'))
#honorBadge
self.honorBadgeNum = len(self.cfg_org_rank.options('HonorBadge'))
self.heavilyCount = self.cfg_org_rank.getint('rankRequirementsMisc', 'heavilyCount')
self.recentDays = self.cfg_org_rank.getint('rankRequirementsMisc', 'recentDays')
self.regularlyDays = self.cfg_org_rank.getint('rankRequirementsMisc', 'regularlyDays')
self.org_honor_badge_title = {}
for badgeNum in range(1, self.honorBadgeNum+1): #get Num of honorBadge
self.org_honor_badge_title[badgeNum] = self.cfg_org_rank.get('HonorBadge', str(badgeNum))
#GLOBAL RANKING
self.org_rank_maxLevel = self.cfg_org_rank.getint('rankTitle', 'maxLevel')
self.org_rank = {}
for rank in range(1, self.org_rank_maxLevel+1):
self.org_rank[rank] = self.cfg_org_rank.get('rankTitle', str(rank))
self.org_rank_requirement_pnts = {}
for rank in range(1, self.org_rank_maxLevel+1):
self.org_rank_requirement_pnts[rank] = self.cfg_org_rank.getint('rankRequirementsPnts', str(rank))
self.org_rank_requirement_text = {}
for rank in range(1, self.org_rank_maxLevel+1):
self.org_rank_requirement_text[rank] = self.cfg_org_rank.get('rankRequirementsText', str(rank))
self.org_rank_additional_info = json.loads(self.cfg_org_rank.get('additionalInfo', 'textsArray'))
#WEB STUFF
self.misp_web_url = cfg.get('RedisGlobal', 'misp_web_url')
self.MAX_NUMBER_OF_LAST_CONTRIBUTOR = cfg.getint('CONTRIB', 'max_number_of_last_contributor')
self.categories_in_datatable = json.loads(cfg.get('CONTRIB', 'categories_in_datatable'))
#MONTHLY RANKING
self.default_pnts_per_contribution = json.loads(cfg.get('CONTRIB', 'default_pnts_per_contribution'))
temp = json.loads(cfg.get('CONTRIB', 'pnts_per_contribution'))
self.DICO_PNTS_REWARD = {}
for categ, pnts in temp:
self.DICO_PNTS_REWARD[categ] = pnts
# fill other categ with default points
for categ in self.categories_in_datatable:
if categ in self.DICO_PNTS_REWARD:
continue
else:
self.DICO_PNTS_REWARD[categ] = self.default_pnts_per_contribution
self.rankMultiplier = cfg.getfloat('CONTRIB' ,'rankMultiplier')
self.levelMax = 16
''' HELPER '''
def getOrgLogoFromMISP(self, org):
return "{}/img/orgs/{}.png".format(self.misp_web_url, org)
def getZrange(self, keyCateg, date, topNum, endSubkey=""):
date_str = util.getDateStrFormat(date)
keyname = "{}:{}{}".format(keyCateg, date_str, endSubkey)
data = self.serv_redis_db.zrange(keyname, 0, topNum-1, desc=True, withscores=True)
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
return data
def addContributionToCateg(self, date, categ, org, count=1):
today_str = util.getDateStrFormat(date)
keyname = "CONTRIB_CATEG:{}:{}".format(today_str, categ)
self.serv_redis_db.zincrby(keyname, org, count)
''' CONTRIBUTION RANK '''
def getOrgContributionTotalPoints(self, org):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
pnts = self.serv_redis_db.get(keyname.format(org=org, orgCateg='points'))
if pnts is None:
pnts = 0
else:
pnts = int(pnts.decode('utf8'))
return pnts
# return: [final_rank, requirement_fulfilled, requirement_not_fulfilled]
def getOrgContributionRank(self, org):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
final_rank = 0
requirement_fulfilled = []
requirement_not_fulfilled = []
for i in range(1, self.org_rank_maxLevel+1):
key = keyname.format(org=org, orgCateg='CONTRIB_REQ_'+str(i))
if self.serv_redis_db.get(key) is None: #non existing
requirement_not_fulfilled.append(i)
else:
requirement_fulfilled.append(i)
final_rank += 1
#num_of_previous_req_not_fulfilled = len([x for x in requirement_not_fulfilled if x<final_rank])
#final_rank = final_rank - num_of_previous_req_not_fulfilled
final_rank = len(requirement_fulfilled)
return {'final_rank': final_rank, 'req_fulfilled': requirement_fulfilled, 'req_not_fulfilled': requirement_not_fulfilled}
def giveContribRankToOrg(self, org, rankNum):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
self.serv_redis_db.set(keyname.format(org=org, orgCateg='CONTRIB_REQ_'+str(rankNum)), 1)
def removeContribRankFromOrg(self, org, rankNum):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
self.serv_redis_db.delete(keyname.format(org=org, orgCateg='CONTRIB_REQ_'+str(rankNum)))
# 1 for fulfilled, 0 for not fulfilled, -1 for not relevant
def getCurrentContributionStatus(self, org):
temp = self.getOrgContributionRank(org)
final_rank = temp['final_rank']
requirement_fulfilled = temp['req_fulfilled']
requirement_not_fulfilled = temp['req_not_fulfilled']
to_ret = {}
for i in range(1, self.org_rank_maxLevel+1):
if i in requirement_fulfilled:
to_ret[i] = 1
elif i in requirement_not_fulfilled and i<=final_rank:
to_ret[i] = 0
else:
to_ret[i] = -1
return {'rank': final_rank, 'status': to_ret, 'totPoints': self.getOrgContributionTotalPoints(org)}
def updateOrgContributionRank(self, orgName, pnts_to_add, action, contribType, eventTime, isLabeled):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
# update total points
totOrgPnts = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='points'), pnts_to_add)
# update date variables
if contribType == 'Attribute':
attributeWeekCount = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='ATTR_WEEK_COUNT'), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='ATTR_WEEK_COUNT'), util.ONE_DAY*7)
if contribType == 'Proposal':
proposalWeekCount = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='PROP_WEEK_COUNT'), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='PROP_WEEK_COUNT'), util.ONE_DAY*7)
addContributionToCateg(datetime.datetime.now(), 'proposal')
if contribType == 'Sighting':
sightingWeekCount = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='SIGHT_WEEK_COUNT'), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='SIGHT_WEEK_COUNT'), util.ONE_DAY*7)
self.addContributionToCateg(datetime.datetime.now(), 'sighting', orgName)
if contribType == 'Discussion':
self.addContributionToCateg(datetime.datetime.now(), 'discussion', orgName)
if contribType == 'Event':
eventWeekCount = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='EVENT_WEEK_COUNT'), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='EVENT_WEEK_COUNT'), util.ONE_DAY*7)
eventMonthCount = self.serv_redis_db.incrby(keyname.format(org=orgName, orgCateg='EVENT_MONTH_COUNT'), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='EVENT_MONTH_COUNT'), util.ONE_DAY*7)
# getRequirement parameters
heavilyCount = self.heavilyCount
recentDays = self.recentDays
regularlyDays = self.regularlyDays
isRecent = (datetime.datetime.now() - eventTime).days > recentDays
print("contribType: {}, action: {}".format(contribType, action))
print("isLabeled: {}, isRecent: {}, totOrgPnts".format(isLabeled, isRecent, totOrgPnts))
#update contribution Requirement
contrib = [] #[[contrib_level, contrib_ttl], [], ...]
if totOrgPnts >= self.org_rank_requirement_pnts[1] and contribType == 'Sighting':
#[contrib_level, contrib_ttl]
contrib.append([1, util.ONE_DAY*365])
if totOrgPnts >= self.org_rank_requirement_pnts[2] and contribType == 'Attribute' or contribType == 'Object':
contrib.append([2, util.ONE_DAY*365])
if totOrgPnts >= self.org_rank_requirement_pnts[3] and contribType == 'Proposal' or contribType == 'Discussion':
contrib.append([3, util.ONE_DAY*365])
if totOrgPnts >= self.org_rank_requirement_pnts[4] and contribType == 'Sighting' and isRecent:
contrib.append([4, util.ONE_DAY*recentDays])
if totOrgPnts >= self.org_rank_requirement_pnts[5] and contribType == 'Proposal' and isRecent:
contrib.append([5, util.ONE_DAY*recentDays])
if totOrgPnts >= self.org_rank_requirement_pnts[6] and contribType == 'Event':
contrib.append([6, util.ONE_DAY*365])
if totOrgPnts >= self.org_rank_requirement_pnts[7] and contribType == 'Event' and eventMonthCount>=1:
contrib.append([7, util.ONE_DAY*recentDays])
if totOrgPnts >= self.org_rank_requirement_pnts[8] and contribType == 'Event' and eventWeekCount>=1:
contrib.append([8, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[9] and contribType == 'Event' and isLabeled:
contrib.append([9, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[10] and contribType == 'Sighting' and sightingWeekCount>heavilyCount:
contrib.append([10, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[11] and (contribType == 'Attribute' or contribType == 'Object') and attributeWeekCount>heavilyCount:
contrib.append([11, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[12] and contribType == 'Proposal' and proposalWeekCount>heavilyCount:
contrib.append([12, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[13] and contribType == 'Event' and eventWeekCount>heavilyCount:
contrib.append([13, util.ONE_DAY*regularlyDays])
if totOrgPnts >= self.org_rank_requirement_pnts[14] and contribType == 'Event' and eventWeekCount>heavilyCount and isLabeled:
contrib.append([14, util.ONE_DAY*regularlyDays])
print([r for r, ttl in contrib])
for rankReq, ttl in contrib:
self.serv_redis_db.set(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankReq)), 1)
self.serv_redis_db.expire(keyname.format(org=orgName, orgCateg='CONTRIB_REQ_'+str(rankReq)), ttl)
''' HONOR BADGES '''
def getOrgHonorBadges(self, org):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
honorBadge = []
for i in range(1, self.honorBadgeNum+1):
key = keyname.format(org=org, orgCateg='BADGE_'+str(i))
if self.serv_redis_db.get(key) is not None: #existing
honorBadge.append(i)
return honorBadge
def giveBadgeToOrg(self, org, badgeNum):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
self.serv_redis_db.set(keyname.format(org=org, orgCateg='BADGE_'+str(badgeNum)), 1)
def removeBadgeFromOrg(self, org, badgeNum):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
self.serv_redis_db.delete(keyname.format(org=org, orgCateg='BADGE_'+str(badgeNum)))
''' MONTHLY CONTRIBUTION '''
def getOrgPntFromRedis(self, org, date):
keyCateg = 'CONTRIB_DAY'
scoreSum = 0
for curDate in util.getMonthSpan(date):
date_str = util.getDateStrFormat(curDate)
keyname = "{}:{}".format(keyCateg, date_str)
data = self.serv_redis_db.zscore(keyname, org)
if data is None:
data = 0
scoreSum += data
return scoreSum
def getOrgRankFromRedis(self, org, date):
ptns = self.getOrgPntFromRedis(org, date)
return self.getTrueRank(ptns)
def getLastContributorsFromRedis(self):
date = datetime.datetime.now()
keyname = "CONTRIB_LAST"
prev_days = 7
topNum = self.MAX_NUMBER_OF_LAST_CONTRIBUTOR # default Num
addedOrg = []
data = []
for curDate in util.getXPrevDaysSpan(date, prev_days):
last_contrib_org = self.getZrange(keyname, curDate, topNum)
for org, sec in last_contrib_org:
if org in addedOrg:
continue
dic = {}
dic['rank'] = self.getOrgRankFromRedis(org, date)
dic['orgRank'] = self.getOrgContributionRank(org)['final_rank']
dic['honorBadge'] = self.getOrgHonorBadges(org)
dic['logo_path'] = self.getOrgLogoFromMISP(org)
dic['org'] = org
dic['pnts'] = self.getOrgPntFromRedis(org, date)
dic['epoch'] = sec
data.append(dic)
addedOrg.append(org)
return data
def getContributorFromRedis(self, org):
date = datetime.datetime.now()
epoch = self.serv_redis_db.zscore("CONTRIB_LAST", org)
dic = {}
dic['rank'] = self.getOrgRankFromRedis(org, date)
dic['orgRank'] = self.getOrgContributionRank(org)['final_rank']
dic['honorBadge'] = self.getOrgHonorBadges(org)
dic['logo_path'] = self.getOrgLogoFromMISP(org)
dic['org'] = org
dic['pnts'] = self.getOrgPntFromRedis(org, date)
dic['epoch'] = epoch
return dic
def getTopContributorFromRedis(self, date):
orgDicoPnts = {}
for curDate in util.getMonthSpan(date):
keyCateg = "CONTRIB_DAY"
topNum = 0 # all
contrib_org = self.getZrange(keyCateg, curDate, topNum)
for org, pnts in contrib_org:
if org not in orgDicoPnts:
orgDicoPnts[org] = 0
orgDicoPnts[org] += pnts
data = []
for org, pnts in orgDicoPnts.items():
dic = {}
dic['rank'] = self.getTrueRank(pnts)
dic['orgRank'] = self.getOrgContributionRank(org)['final_rank']
dic['honorBadge'] = self.getOrgHonorBadges(org)
dic['logo_path'] = self.getOrgLogoFromMISP(org)
dic['org'] = org
dic['pnts'] = pnts
data.append(dic)
data.sort(key=lambda x: x['pnts'], reverse=True)
return data
def getTop5OvertimeFromRedis(self):
data = []
today = datetime.datetime.now()
topSortedOrg = self.getTopContributorFromRedis(today) #Get current top
# show current top 5 org points overtime (last 5 days)
for dic in topSortedOrg[0:5]:
org = dic['org']
to_append = self.getOrgOvertime(org)
data.append(to_append)
return data
def getOrgOvertime(self, org):
overtime = []
today = datetime.datetime.today()
today = today.replace(hour=0, minute=0, second=0, microsecond=0)
for curDate in util.getXPrevDaysSpan(today, 7):
timestamp = util.getTimestamp(curDate)
keyname = 'CONTRIB_DAY:'+util.getDateStrFormat(curDate)
org_score = self.serv_redis_db.zscore(keyname, org)
if org_score is None:
org_score = 0
overtime.append([timestamp, org_score])
to_return = {'label': org, 'data': overtime}
return to_return
def getCategPerContribFromRedis(self, date):
keyCateg = "CONTRIB_DAY"
topNum = 0 # all
contrib_org = self.getTopContributorFromRedis(date)
for dic in contrib_org:
org = dic['org']
for categ in self.categories_in_datatable:
categ_score = 0
for curDate in util.getMonthSpan(date):
keyname = 'CONTRIB_CATEG:'+util.getDateStrFormat(curDate)+':'+categ
temp = self.serv_redis_db.zscore(keyname, org)
if temp is None:
temp = 0
categ_score += temp
dic[categ] = categ_score
return contrib_org
def getAllOrgFromRedis(self):
data = self.serv_redis_db.smembers('CONTRIB_ALL_ORG')
data = [x.decode('utf8') for x in data]
return data
def getCurrentOrgRankFromRedis(self, org):
date = datetime.datetime.now()
points = self.getOrgPntFromRedis(org, date)
remainingPts = self.getRemainingPoints(points)
data = {
'org': org,
'points': points,
'rank': self.getRankLevel(points),
'orgRank': self.getOrgContributionRank(org)['final_rank'],
'honorBadge': self.getOrgHonorBadges(org),
'remainingPts': remainingPts['remainingPts'],
'stepPts': remainingPts['stepPts'],
}
return data
def getRankLevel(self, points):
if points == 0:
return 0
elif points == 1:
return 1
else:
return float("{:.2f}".format(math.log(points, self.rankMultiplier)))
def getTrueRank(self, ptns):
return int(self.getRankLevel(ptns))
def getRemainingPoints(self, points):
prev = 0
for i in [math.floor(self.rankMultiplier**x) for x in range(1,self.levelMax+1)]:
if prev <= points < i:
return { 'remainingPts': i-points, 'stepPts': prev }
prev = i
return { 'remainingPts': 0, 'stepPts': self.rankMultiplier**self.levelMax }
''' '''
''' TEST DATA '''
''' '''
def TEST_getCategPerContribFromRedis(self, date):
data2 = []
for d in range(15):
dic = {}
dic['rank'] = random.randint(1,self.levelMax)
dic['orgRank'] = random.randint(1,self.levelMax),
dic['honorBadge'] = [random.randint(1,2)],
dic['logo_path'] = 'logo'
dic['org'] = 'Org'+str(d)
dic['pnts'] = random.randint(1,2**self.levelMax)
for f in self.categories_in_datatable:
dic[f] = random.randint(0,1600)
data2.append(dic)
return data2
def TEST_getTop5OvertimeFromRedis(self):
import time
now = time.time()
data2 = [
{'label': 'CIRCL', 'data': [[now, random.randint(1,50)], [now-util.ONE_DAY, random.randint(1,50)], [now-util.ONE_DAY*2, random.randint(1,50)], [now-util.ONE_DAY*3, random.randint(1,50)], [now-util.ONE_DAY*4, random.randint(1,50)]]},
{'label': 'CASES', 'data': [[now, random.randint(1,50)], [now-util.ONE_DAY, random.randint(1,50)], [now-util.ONE_DAY*2, random.randint(1,50)], [now-util.ONE_DAY*3, random.randint(1,50)], [now-util.ONE_DAY*4, random.randint(1,50)]]},
{'label': 'Org1', 'data': [[now, random.randint(1,50)], [now-util.ONE_DAY, random.randint(1,50)], [now-util.ONE_DAY*2, random.randint(1,50)], [now-util.ONE_DAY*3, random.randint(1,50)], [now-util.ONE_DAY*4, random.randint(1,50)]]},
{'label': 'Org2', 'data': [[now, random.randint(1,50)], [now-util.ONE_DAY, random.randint(1,50)], [now-util.ONE_DAY*2, random.randint(1,50)], [now-util.ONE_DAY*3, random.randint(1,50)], [now-util.ONE_DAY*4, random.randint(1,50)]]},
{'label': 'SMILE', 'data': [[now, random.randint(1,50)], [now-util.ONE_DAY, random.randint(1,50)], [now-util.ONE_DAY*2, random.randint(1,50)], [now-util.ONE_DAY*3, random.randint(1,50)], [now-util.ONE_DAY*4, random.randint(1,50)]]},
]
return data2
def TEST_getOrgOvertime(self, org):
import time
now = time.time()
data = [
{'label': org, 'data': [[now, random.randint(1,30)], [now-util.ONE_DAY, random.randint(1,30)], [now-util.ONE_DAY*2, random.randint(1,30)], [now-util.ONE_DAY*3, random.randint(1,30)], [now-util.ONE_DAY*4, random.randint(1,40)]]}
]
return data
def TEST_getTopContributorFromRedis(self, date):
data2 = [
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [1,2],
'logo_path': self.getOrgLogoFromMISP('MISP'),
'org': 'MISP',
'pnts': random.randint(1,2**self.levelMax)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [1],
'logo_path': 'logo1',
'org': 'CIRCL',
'pnts': random.randint(1,2**self.levelMax)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [2],
'logo_path': 'logo2',
'org': 'CASES',
'pnts': random.randint(1,2**self.levelMax)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo3',
'org': 'SMILE',
'pnts': random.randint(1,2**self.levelMax)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo4',
'org': 'ORG4',
'pnts': random.randint(1,2**self.levelMax)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo5',
'org': 'ORG5',
'pnts': random.randint(1,2**self.levelMax)
},
]
return data2*2
def TEST_getLastContributorsFromRedis(self):
import time
data2 = [
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [1,2],
'logo_path': self.getOrgLogoFromMISP('MISP'),
'org': 'MISP',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [1],
'logo_path': 'logo1',
'org': 'CIRCL',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [2],
'logo_path': 'logo2',
'org': 'CASES',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo3',
'org': 'SMILE',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo4',
'org': 'ORG4',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
{
'rank': random.randint(1,self.levelMax),
'orgRank': random.randint(1,self.levelMax),
'honorBadge': [],
'logo_path': 'logo5',
'org': 'ORG5',
'pnts': random.randint(1,2**self.levelMax),
'epoch': time.time() - random.randint(0, 10000)
},
]
return data2*2
def TEST_getAllOrgFromRedis(self):
data2 = ['CIRCL', 'CASES', 'SMILE' ,'ORG4' ,'ORG5', 'SUPER HYPER LONG ORGINZATION NAME', 'Org3', 'MISP']
return data2
def TEST_getCurrentOrgRankFromRedis(self, org):
date = datetime.datetime.now()
points = random.randint(1,2**self.levelMax)
remainingPts = self.getRemainingPoints(points)
data = {
'org': org,
'points': points,
'rank': self.getRankLevel(points),
'remainingPts': remainingPts['remainingPts'],
'stepPts': remainingPts['stepPts'],
}
return data
def TEST_getCurrentContributionStatus(self, org):
num = random.randint(1, self.org_rank_maxLevel)
requirement_fulfilled = [x for x in range(1,num+1)]
requirement_not_fulfilled = [x for x in range(num,self.org_rank_maxLevel+1-num)]
num2 = random.randint(1, self.org_rank_maxLevel)
if num2 < num-1:
to_swap = requirement_fulfilled[num2]
del requirement_fulfilled[num2]
requirement_not_fulfilled = [to_swap] + requirement_not_fulfilled
final_rank = len(requirement_fulfilled)
to_ret = {}
for i in range(1, self.org_rank_maxLevel+1):
if i in requirement_fulfilled:
to_ret[i] = 1
elif i in requirement_not_fulfilled and i<=final_rank:
to_ret[i] = 0
else:
to_ret[i] = -1
return {'rank': final_rank, 'status': to_ret, 'totPoints': random.randint(2**final_rank, 2**self.org_rank_maxLevel*4)}
def TEST_getOrgHonorBadges(self, org):
keyname = 'CONTRIB_ORG:{org}:{orgCateg}'
honorBadge = []
for i in range(1, self.honorBadgeNum+1):
key = keyname.format(org=org, orgCateg='BADGE_'+str(i))
if random.randint(0,1) == 1: #existing
honorBadge.append(1)
else:
honorBadge.append(0)
return honorBadge

111
give_honors_to_org.py Executable file
View File

@ -0,0 +1,111 @@
#!/usr/bin/env python3.5
import os, sys
import redis
import configparser
import contributor_helper
configfile = os.path.join(os.environ['DASH_CONFIG'], 'config.cfg')
cfg = configparser.ConfigParser()
cfg.read(configfile)
serv_redis_db = redis.StrictRedis(
host=cfg.get('RedisGlobal', 'host'),
port=cfg.getint('RedisGlobal', 'port'),
db=cfg.getint('RedisDB', 'db'))
chelper = contributor_helper.Contributor_helper(serv_redis_db, cfg)
def printOrgInfo(org):
org_pnts = chelper.getOrgContributionTotalPoints(org)
org_c_rank = chelper.getOrgContributionRank(org)
org_c_status = chelper.getCurrentContributionStatus(org)
org_honor_badge = chelper.getOrgHonorBadges(org)
print()
print("Organisation points: {}".format(org_pnts))
print("Organisation contribution rank: {}".format(org_c_status['rank']))
print('''
Organisation contribution rank:
-------------------------------''')
for rank in range(1, chelper.org_rank_maxLevel+1):
acq = 'x' if org_c_status['status'][rank] == 1 else ' '
print("{}.\t[{}]\t{}\t{}".format(rank, acq, chelper.org_rank_requirement_pnts[rank], chelper.org_rank_requirement_text[rank]))
print()
print('''
Organisation honor badges:
--------------------------''')
for badgeNum, text in chelper.org_honor_badge_title.items():
acq = 'x' if badgeNum in org_honor_badge else ' '
print("{}.\t[{}]\t{}".format(badgeNum, acq, text))
print()
def main():
if len(sys.argv) > 1:
org = sys.argv[1]
else:
org = input('Enter the organisation name: ')
printOrgInfo(org)
# ranks
while True:
org_pnts = chelper.getOrgContributionTotalPoints(org)
org_c_rank = chelper.getOrgContributionRank(org)
org_c_status = chelper.getCurrentContributionStatus(org)
org_honor_badge = chelper.getOrgHonorBadges(org)
userRep = input("Enter the organisation RANK to give/remove to {} (<ENTER> to finish): ".format(org))
if userRep == '':
break
else:
# validate input
try: #not int
rankNum = int(userRep)
except:
print('Not an integer')
continue
if rankNum < 1 and rankNum > chelper.org_rank_maxLevel:
print('Not a valid rank')
continue
if org_c_status['status'][rankNum] == 1: #remove rank
chelper.removeContribRankFromOrg(org, rankNum)
else:
chelper.giveContribRankToOrg(org, rankNum)
printOrgInfo(org)
# badges
while True:
org_pnts = chelper.getOrgContributionTotalPoints(org)
org_c_rank = chelper.getOrgContributionRank(org)
org_c_status = chelper.getCurrentContributionStatus(org)
org_honor_badge = chelper.getOrgHonorBadges(org)
userRep = input("Enter the organisation BADGE to give/remove to {} (<ENTER> to finish): ".format(org))
if userRep == '':
break
else:
# validate input
try: #not int
badgeNum = int(userRep)
except:
print('Not an integer')
continue
if badgeNum < 1 and badgeNum > chelper.honorBadgeNum:
print('Not a valid rank')
continue
if badgeNum in org_honor_badge: #remove badge
chelper.removeBadgeFromOrg(org, badgeNum)
else:
chelper.giveBadgeToOrg(org, badgeNum)
printOrgInfo(org)
if __name__ == '__main__':
main()

View File

@ -17,13 +17,11 @@ fi
pip3 install -U pip argparse redis zmq geoip2 flask
## config
if [ ! -f config/config.cfg ]; then
cp config/config.cfg.sample config/config.cfg
fi
cp -i config/config.cfg.default config/config.cfg
## Web stuff
pushd static/
mkdir -p css fonts
mkdir -p css fonts js
popd
mkdir -p temp
@ -33,14 +31,16 @@ wget http://www.misp-project.org/assets/images/misp-small.png -O static/pics/MIS
JQVERSION="3.2.1"
wget http://code.jquery.com/jquery-${JQVERSION}.min.js -O ./static/js/jquery.min.js
# jquery flot
FLOTVERSION="0.8.3"
wget http://www.flotcharts.org/downloads/flot-${FLOTVERSION}.zip -O ./temp/flot-${FLOTVERSION}.zip
unzip -o temp/flot-${FLOTVERSION}.zip -d temp/
mv temp/flot/jquery.flot.js ./static/js
mv temp/flot/jquery.flot.pie.min.js ./static/js
mv temp/flot/jquery.flot.resize.js ./static/js
mv temp/flot/jquery.flot.time.js ./static/js
# jquery UI
JQUERYUIVERSION="1.12.1"
wget https://jqueryui.com/resources/download/jquery-ui-${JQUERYUIVERSION}.zip -O temp/jquery-ui.zip
unzip -o temp/jquery-ui.zip -d temp/
@ -64,6 +64,8 @@ unzip -o temp/${SBADMIN_VERSION}-2.zip -d temp/
mv temp/startbootstrap-sb-admin-2-${SBADMIN_VERSION}/dist/js/* ./static/js/
mv temp/startbootstrap-sb-admin-2-${SBADMIN_VERSION}/dist/css/* ./static/css/
mv temp/startbootstrap-sb-admin-2-${SBADMIN_VERSION}/bower_components/font-awesome/fonts/* ./static/fonts
mv temp/startbootstrap-sb-admin-2-${SBADMIN_VERSION}/bower_components/font-awesome/css/* ./static/css
mv temp/startbootstrap-sb-admin-2-${SBADMIN_VERSION}/bower_components/bootstrap/fonts/* ./static/fonts
# leaflet
LEAFLET_VERSION="1.2.0"
@ -82,9 +84,22 @@ mv temp/jquery-jvectormap-2.0.3.css ./static/css
mv temp/jquery-jvectormap-2.0.3.min.js ./static/js
wget http://jvectormap.com/js/jquery-jvectormap-world-mill.js -O ./static/js/jquery-jvectormap-world-mill.js
# maxmind DB
mkdir -p data
pushd data
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz -O GeoLite2-City.tar.gz
tar xvfz GeoLite2-City.tar.gz
rm -rf GeoLite2-City.tar.gz
popd
# DataTable
DATATABLE_VERSION="1.10.16"
wget https://cdn.datatables.net/${DATATABLE_VERSION}/js/jquery.dataTables.min.js -O ./static/js/jquery.dataTables.min.js
wget https://cdn.datatables.net/${DATATABLE_VERSION}/css/dataTables.bootstrap.css -O ./static/css/dataTables.bootstrap.css
wget https://cdn.datatables.net/${DATATABLE_VERSION}/js/dataTables.bootstrap.js -O ./static/js/dataTables.bootstrap.js
#typeahead
git clone https://github.com/bassjobsen/Bootstrap-3-Typeahead.git temp/Bootstrap-3-Typeahead
mv temp/Bootstrap-3-Typeahead/bootstrap3-typeahead.min.js ./static/js
rm -rf ./temp

202
server.py
View File

@ -9,6 +9,9 @@ from time import sleep, strftime
import datetime
import os
import util
import contributor_helper
configfile = os.path.join(os.environ['DASH_CONFIG'], 'config.cfg')
cfg = configparser.ConfigParser()
cfg.read(configfile)
@ -28,12 +31,21 @@ serv_redis_db = redis.StrictRedis(
port=cfg.getint('RedisGlobal', 'port'),
db=cfg.getint('RedisDB', 'db'))
contributor_helper = contributor_helper.Contributor_helper(serv_redis_db, cfg)
subscriber_log = redis_server_log.pubsub(ignore_subscribe_messages=True)
subscriber_log.psubscribe(cfg.get('RedisLog', 'channel'))
subscriber_map = redis_server_map.pubsub(ignore_subscribe_messages=True)
subscriber_map.psubscribe(cfg.get('RedisMap', 'channelDisp'))
subscriber_lastContrib = redis_server_log.pubsub(ignore_subscribe_messages=True)
subscriber_lastContrib.psubscribe(cfg.get('RedisLog', 'channelLastContributor'))
eventNumber = 0
##########
## UTIL ##
##########
''' INDEX '''
class LogItem():
FIELDNAME_ORDER = []
@ -91,13 +103,19 @@ class EventMessage():
to_ret = { 'log': self.feed, 'feedName': self.feedName, 'zmqName': self.zmqName }
return 'data: {}\n\n'.format(json.dumps(to_ret))
def getZrange(keyCateg, date, topNum):
date_str = str(date.year)+str(date.month)+str(date.day)
keyname = "{}:{}".format(keyCateg, date_str)
data = serv_redis_db.zrange(keyname, 0, 5, desc=True, withscores=True)
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
''' GENERAL '''
def getZrange(keyCateg, date, topNum, endSubkey=""):
date_str = util.getDateStrFormat(date)
keyname = "{}:{}{}".format(keyCateg, date_str, endSubkey)
data = serv_redis_db.zrange(keyname, 0, topNum-1, desc=True, withscores=True)
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
return data
###########
## ROUTE ##
###########
''' MAIN ROUTE '''
@app.route("/")
def index():
@ -108,7 +126,7 @@ def index():
"{:.0f}".format(cfg.getint('Dashboard' ,'size_world_pannel_perc')/100*ratioCorrection),
"{:.0f}".format((100-cfg.getint('Dashboard' ,'size_world_pannel_perc'))/100*ratioCorrection)
]
return render_template('index.html',
return render_template('index.html',
pannelSize=pannelSize,
size_dashboard_width=[cfg.getint('Dashboard' ,'size_dashboard_left_width'), 12-cfg.getint('Dashboard', 'size_dashboard_left_width')],
itemToPlot=cfg.get('Dashboard', 'item_to_plot'),
@ -128,6 +146,68 @@ def geo():
default_updateFrequency=cfg.getint('GEO' ,'updateFrequency')
)
@app.route("/contrib")
def contrib():
categ_list = contributor_helper.categories_in_datatable
categ_list_str = [ s[0].upper() + s[1:].replace('_', ' ') for s in contributor_helper.categories_in_datatable]
categ_list_points = [contributor_helper.DICO_PNTS_REWARD[categ] for categ in categ_list]
org_rank = contributor_helper.org_rank
org_rank_requirement_pnts = contributor_helper.org_rank_requirement_pnts
org_rank_requirement_text = contributor_helper.org_rank_requirement_text
org_rank_list = [[rank, title, org_rank_requirement_pnts[rank], org_rank_requirement_text[rank]] for rank, title in org_rank.items()]
org_rank_list.sort(key=lambda x: x[0])
org_rank_additional_text = contributor_helper.org_rank_additional_info
org_honor_badge_title = contributor_helper.org_honor_badge_title
org_honor_badge_title_list = [ [num, text] for num, text in contributor_helper.org_honor_badge_title.items()]
org_honor_badge_title_list.sort(key=lambda x: x[0])
currOrg = request.args.get('org')
if currOrg is None:
currOrg = ""
return render_template('contrib.html',
currOrg=currOrg,
rankMultiplier=contributor_helper.rankMultiplier,
default_pnts_per_contribution=contributor_helper.default_pnts_per_contribution,
additional_help_text=json.loads(cfg.get('CONTRIB', 'additional_help_text')),
categ_list=json.dumps(categ_list),
categ_list_str=categ_list_str,
categ_list_points=categ_list_points,
org_rank_json=json.dumps(org_rank),
org_rank_list=org_rank_list,
org_rank_additional_text=org_rank_additional_text,
org_honor_badge_title=json.dumps(org_honor_badge_title),
org_honor_badge_title_list=org_honor_badge_title_list,
min_between_reload=cfg.getint('CONTRIB', 'min_between_reload')
)
''' INDEX '''
@app.route("/_logs")
def logs():
return Response(event_stream_log(), mimetype="text/event-stream")
@app.route("/_maps")
def maps():
return Response(event_stream_maps(), mimetype="text/event-stream")
@app.route("/_get_log_head")
def getLogHead():
return json.dumps(LogItem('').get_head_row())
def event_stream_log():
for msg in subscriber_log.listen():
content = msg['data']
yield EventMessage(content).to_json()
def event_stream_maps():
for msg in subscriber_map.listen():
content = msg['data'].decode('utf8')
yield 'data: {}\n\n'.format(content)
''' GEO '''
@app.route("/_getTopCoord")
def getTopCoord():
try:
@ -146,7 +226,7 @@ def getHitMap():
except:
date = datetime.datetime.now()
keyCateg = "GEO_COUNTRY"
topNum = -1 # default Num
topNum = 0 # all
data = getZrange(keyCateg, date, topNum)
return jsonify(data)
@ -174,7 +254,7 @@ def getCoordsByRadius():
delta = dateEnd - dateStart
for i in range(delta.days+1):
correctDatetime = dateStart + datetime.timedelta(days=i)
date_str = str(correctDatetime.year)+str(correctDatetime.month)+str(correctDatetime.day)
date_str = util.getDateStrFormat(correctDatetime)
keyCateg = 'GEO_RAD'
keyname = "{}:{}".format(keyCateg, date_str)
res = serv_redis_db.georadius(keyname, centerLon, centerLat, radius, unit='km', withcoord=True)
@ -202,27 +282,99 @@ def getCoordsByRadius():
return jsonify(to_return)
@app.route("/_logs")
def logs():
return Response(event_stream_log(), mimetype="text/event-stream")
''' CONTRIB '''
@app.route("/_maps")
def maps():
return Response(event_stream_maps(), mimetype="text/event-stream")
@app.route("/_getLastContributors")
def getLastContributors():
return jsonify(contributor_helper.getLastContributorsFromRedis())
@app.route("/_get_log_head")
def getLogHead():
return json.dumps(LogItem('').get_head_row())
@app.route("/_eventStreamLastContributor")
def getLastContributor():
return Response(eventStreamLastContributor(), mimetype="text/event-stream")
def event_stream_log():
for msg in subscriber_log.listen():
content = msg['data']
yield EventMessage(content).to_json()
def event_stream_maps():
for msg in subscriber_map.listen():
def eventStreamLastContributor():
for msg in subscriber_lastContrib.listen():
content = msg['data'].decode('utf8')
yield 'data: {}\n\n'.format(content)
contentJson = json.loads(content)
lastContribJson = json.loads(contentJson['log'])
org = lastContribJson['org']
to_return = contributor_helper.getContributorFromRedis(org)
epoch = lastContribJson['epoch']
to_return['epoch'] = epoch
yield 'data: {}\n\n'.format(json.dumps(to_return))
@app.route("/_getTopContributor")
def getTopContributor(suppliedDate=None):
if suppliedDate is None:
try:
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
except:
date = datetime.datetime.now()
else:
date = suppliedDate
data = contributor_helper.getTopContributorFromRedis(date)
return jsonify(data)
@app.route("/_getFameContributor")
def getFameContributor():
try:
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
except:
today = datetime.datetime.now()
# get previous month
date = (datetime.datetime(today.year, today.month, 1) - datetime.timedelta(days=1))
return getTopContributor(suppliedDate=date)
@app.route("/_getTop5Overtime")
def getTop5Overtime():
return jsonify(contributor_helper.getTop5OvertimeFromRedis())
@app.route("/_getOrgOvertime")
def getOrgOvertime():
try:
org = request.args.get('org')
except:
org = ''
return jsonify(contributor_helper.getOrgOvertime(org))
@app.route("/_getCategPerContrib")
def getCategPerContrib():
try:
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
except:
date = datetime.datetime.now()
return jsonify(contributor_helper.getCategPerContribFromRedis(date))
@app.route("/_getAllOrg")
def getAllOrg():
return jsonify(contributor_helper.getAllOrgFromRedis())
@app.route("/_getOrgRank")
def getOrgRank():
try:
org = request.args.get('org')
except:
org = ''
return jsonify(contributor_helper.getCurrentOrgRankFromRedis(org))
@app.route("/_getContributionOrgStatus")
def getContributionOrgStatus():
try:
org = request.args.get('org')
except:
org = ''
return jsonify(contributor_helper.getCurrentContributionStatus(org))
@app.route("/_getHonorBadges")
def getHonorBadges():
try:
org = request.args.get('org')
except:
org = ''
return jsonify(contributor_helper.getOrgHonorBadges(org))
if __name__ == '__main__':
app.run(host='localhost', port=8001, threaded=True)

154
static/css/ranking.css Normal file
View File

@ -0,0 +1,154 @@
.ranking {
position: relative;
height: auto;
}
.successCell {
background-color: #dff0d8 !important
}
.circleBadge {
width: 80px;
height: 80px;
text-align: center;
border-radius: 65px;
background-color: #e1e1e1;
border: 1px solid #caccce;
}
.circlBadgeAcquired {
box-shadow: 0px 0px 15px #0000ff
}
.questionBadgeText {
left: -15%;
position: relative;
bottom: 18%;
}
.orgRankClass {
top: 6px;
position: relative;
}
.questionBadgeDiv {
float: left;
width: 40px;
height: 40px;
background-color: #286090;
font-size: xx-large;
border-radius: 50% 50% 50% 50%;
color: white;
top: 4px;
position: relative;
left: 1%;
}
.selectedOrgInTable {
background-color: #fff6c2 !important;
color: black;
}
.centerInBtn {
float: left;
text-align: center;
vertical-align: middle;
line-height: 40px;
margin-right: 10px;
font-size: x-large;
}
.popover-content {
padding: 3px
}
.popOverBtn {
float: left;
padding-top: 2px;
padding-bottom: 2px;
padding-right: 8px;
height: 46px;
margin-top: 2px;
margin-bottom: 2px;
display: none;
}
.table > tbody > tr > td.centerCell {
text-align: center;
min-width: 45px;
}
.dataTables_filter > label {
margin-bottom: 0px;
}
.table > tbody > tr > td.centerCellPicOrgLogo {
padding: 5px;
text-align: left;
}
.table > tbody > tr > td.verticalAlign {
vertical-align: middle;
}
.table > tbody > tr > td.centerCellPicOrgRank {
padding: 0px;
text-align: left;
}
.progress {
width: 150px;
}
.panel-body {
padding: 0px;
}
.panel {
margin-bottom: 10px;
}
.col-lg-6 {
padding-right: 5px;
padding-left: 5px;
}
.col-lg-8 {
padding-right: 5px;
padding-left: 5px;
}
.col-lg-4 {
padding-right: 5px;
padding-left: 5px;
}
.col-lg-12 {
padding-right: 5px;
padding-left: 5px;
}
.leftSepa {
border-left-color: rgb(221, 221, 221);
border-left-style: solid;
border-left-width: 2px;
padding-left: 8px;
}
.textTopHeader {
height: 50px;
text-align: center;
margin-left: 8px;
float: left;
padding-top: 15px;
}
.center {
display:block;
margin-left:auto;
margin-right:auto;
}
small {
font-size: 100%;
font-weight: bold;
}

577
static/js/contrib.js Normal file
View File

@ -0,0 +1,577 @@
/* GLOB VAR */
var allOrg = [];
var datatableTop;
var datatableFame;
var refresh_speed = min_between_reload*60;
var will_reload = $("#reloadCheckbox").is(':checked');
var sec_before_reload = refresh_speed;
var dataTop5Overtime;
var plotLineChart
/* CONFIG */
var maxRank = 16;
var popOverOption = {
trigger: "hover",
html: true,
placement: 'bottom',
content: generateRankingSheet()
}
var optionsLineChart = {
series: {
shadowSize: 0 ,
lines: {
fill: true,
fillColor: {
colors: [ { opacity: 1 }, { opacity: 0.1 } ]
}
}
},
colors: ["#2F4F4F", "#778899", "#696969", "#A9A9A9", "#D3D3D3", "#337ab7"],
points: { show: true },
lines: { show: true, fill: true },
grid: {
tickColor: "#dddddd",
borderWidth: 0
},
legend: {
show: true,
position: "nw"
},
xaxis: {
mode: "time",
timeformat: "%m/%d",
minTickSize: [1, "day"]
}
};
var optionDatatable_light = {
responsive: true,
searching: false,
ordering: false,
scrollY: '30vh',
scrollCollapse: true,
paging: false,
"language": {
"lengthMenu": "",
"info": "",
"infoFiltered": "",
"infoEmpty": "",
},
"info": false,
"columnDefs": [
{ className: "centerCellPicOrgRank", "targets": [ 2 ] },
{ className: "centerCellPicOrgLogo", "targets": [ 3 ] },
{ className: "centerCellPicOrgLogo", "targets": [ 4 ] }
]
};
var optionDatatable_top = jQuery.extend({}, optionDatatable_light)
var optionDatatable_last = jQuery.extend({}, optionDatatable_light)
optionDatatable_last.columnDefs = [
{ className: "small", "targets": [ 0 ] },
{ className: "verticalAlign", "targets": [ 1 ] },
{ className: "centerCellPicOrgRank verticalAlign", "targets": [ 2 ] },
{ className: "centerCellPicOrgLogo", "targets": [ 3 ] },
{ className: "centerCellPicOrgLogo verticalAlign", "targets": [ 4 ] },
{ className: "centerCellPicOrgLogo verticalAlign", "targets": [ 5 ] },
{ className: "verticalAlign", "targets": [ 6 ] },
{ 'orderData':[6], 'targets': [0] },
{
'targets': [6],
'searchable': false
},
]
var optionDatatable_fame = jQuery.extend({}, optionDatatable_light)
optionDatatable_fame.scrollY = '45vh';
var optionDatatable_Categ = {
responsive: true,
searching: true,
"order": [[ 0, "desc" ]],
scrollY: '38vh',
"scrollX": true,
scrollCollapse: true,
paging: false,
"info": false,
"columnDefs": [
{ className: "centerCellPicOrgRank", "targets": [ 2 ] },
{ className: "centerCellPicOrgLogo", "targets": [ 3 ], 'searchable': false, 'sortable': false },
{ className: "centerCellPicOrgLogo", "targets": [ 4 ]}
]
};
var typeaheadOption = {
source: function (query, process) {
if (allOrg.length == 0) { // caching
return $.getJSON(url_getAllOrg, function (data) {
allOrg = data;
return process(data);
});
} else {
return process(allOrg);
}
},
updater: function(org) {
updateProgressHeader(org);
}
}
/* FUNCTIONS */
function getMonthlyRankIcon(rank, size, header) {
if (rank > 16) {
var rankLogoPath = url_baseRankMonthlyLogo+0+'.svg';
} else {
var rankLogoPath = url_baseRankMonthlyLogo+rank+'.svg';
}
var img = document.createElement('img');
img.src = rankLogoPath;
if(size == undefined) {
img.height = 26;
img.width = 26;
} else {
if (header) {
img.height = size;
img.width = size;
img.style.position = 'absolute';
img.style.top = '0';
img.style.bottom = '0';
img.style.margin = 'auto';
img.style.left = '0px';
} else {
img.height = size;
img.width = size;
}
}
return img.outerHTML;
}
function getOrgRankIcon(rank, size) {
if (rank > 16) {
var rankLogoPath = url_baseOrgRankLogo+0+'.svg';
} else {
var rankLogoPath = url_baseOrgRankLogo+rank+'.svg';
}
var obj = document.createElement('img');
obj.height = size/2;
obj.width = size;
obj.src = rankLogoPath;
obj.type = "image/svg"
obj.title = org_rank_obj[rank];
obj.classList.add('orgRankClass')
return obj.outerHTML;
}
function createImg(source, size) {
var obj = document.createElement('img');
obj.height = size;
obj.width = size;
obj.style.margin = 'auto';
obj.src = source;
obj.type = "image/png"
obj.alt = ""
return obj.outerHTML;
}
function createHonorImg(array, size) {
size = 32;
var div = document.createElement('div');
div.style.boxShadow = '0px 0px 5px #00000099';
div.style.backgroundColor = '#e1e1e1';
for (badgeNum of array) {
var obj = document.createElement('img');
obj.height = size;
obj.width = size;
obj.style.margin = 'auto';
obj.title = org_honor_badge_title[badgeNum];
obj.src = url_baseHonorLogo+badgeNum+'.svg';
div.appendChild(obj);
}
div.style.width = 32*array.length+'px';
div.style.borderRadius = '15px';
return div.outerHTML;
}
function createOrgLink(org) {
var a = document.createElement('a');
a.innerHTML = org;
a.href = "?org="+org;
return a.outerHTML;
}
function generateRankingSheet(rank, rankDec, stepPnt, pnt, Rpnt) {
var Cpnt = pnt - stepPnt;
var Tpnt = Cpnt + Rpnt;
var OuterDiv = document.createElement('div');
var gdiv = document.createElement('div');
gdiv.id = "globalDiv";
gdiv.style.float = 'left';
//progressBar
var div = document.createElement('div');
div.classList.add('progress');
var pb_length = 187;
div.style.width = pb_length+'px'; //HARDCODED...
div.style.marginBottom = '0px';
var div1 = document.createElement('div')
div1.classList.add('progress-bar')
div1.style.width = 100*(Cpnt)/Tpnt+'%';
div1.innerHTML = "<strong>"+Cpnt+"</strong>";
div.appendChild(div1);
var div1 = document.createElement('div')
div1.classList.add('progress-bar', 'progress-bar-warning')
div1.style.width = 100*(Rpnt)/Tpnt+'%'
div1.innerHTML = "<strong>"+Rpnt+"</strong>";
div.appendChild(div1);
gdiv.appendChild(div);
// table
var table = document.createElement('table');
table.classList.add('table', 'table-striped');
table.style.marginBottom = '5px';
//head
var thead = document.createElement('thead');
var tr = document.createElement('tr');
var th = document.createElement('th');
th.innerHTML = "Rank";
tr.appendChild(th);
var th = document.createElement('th');
th.innerHTML = "Requirement (CP)";
tr.appendChild(th);
thead.appendChild(tr);
//body
var tbody = document.createElement('tbody');
for (var i=1; i<=maxRank; i++) {
var tr = document.createElement('tr');
var td1 = document.createElement('td');
td1.innerHTML = getMonthlyRankIcon(i, 40);
td1.style.padding = "2px";
var td2 = document.createElement('td');
td2.innerHTML = Math.floor(Math.pow(rankMultiplier, i));
td2.style.padding = "2px";
tr.style.textAlign = "center";
if (i == rank) { // current org rank
tr.style.backgroundColor = "#337ab7";
tr.style.color = "white";
} else if (i == rank+1) {
tr.style.backgroundColor = "#f0ad4e";
tr.style.color = "white";
}
tr.appendChild(td1);
tr.appendChild(td2);
tbody.appendChild(tr);
}
table.appendChild(thead);
table.appendChild(tbody);
gdiv.appendChild(table);
OuterDiv.appendChild(gdiv);
// Tot nbr points
var tableHeight = 720; //HARDCODED...
var div = document.createElement('div');
div.classList.add('progress');
div.style.width = '20px';
div.style.height = tableHeight+'px'; //HARDCODED...
div.style.display = 'flex'
div.style.float = 'left';
div.style.marginTop = '56px';
div.style.marginBottom = '0px';
div.style.marginLeft = '2px';
var div1 = document.createElement('div')
div1.classList.add('progress-bar', 'progress-bar-success', 'progress-bar-striped')
div1.style.height = ((rank+rankDec)*100/16)+'%';
div1.style.width = '100%';
div.appendChild(div1);
OuterDiv.appendChild(div);
return OuterDiv.outerHTML;
}
function addToTableFromJson(datatable, url) {
$.getJSON( url, function( data ) {
for (i in data) {
var row = data[i];
i = parseInt(i);
var to_add = [
row.pnts,
getMonthlyRankIcon(row.rank),
getOrgRankIcon(row.orgRank, 60),
createHonorImg(row.honorBadge, 20),
createImg(row.logo_path, 32),
createOrgLink(row.org)
];
datatable.row.add(to_add);
}
datatable.draw();
});
}
function addLastFromJson(datatable, url) {
$.getJSON( url, function( data ) {
for (i in data) {
var row = data[i];
i = parseInt(i);
addLastContributor(datatable, row);
}
datatable.draw();
});
}
function addLastContributor(datatable, data, update) {
var date = new Date(data.epoch*1000);
var to_add = [
date.toTimeString().slice(0,-15) +' '+ date.toLocaleDateString(),
data.pnts,
getMonthlyRankIcon(data.rank),
getOrgRankIcon(data.orgRank, 60),
createHonorImg(data.honorBadge, 20),
createImg(data.logo_path, 32),
createOrgLink(data.org),
];
if (update == undefined || update == false) {
datatable.row.add(to_add);
} else if(update == true) {
datatable.rows().every( function() {
if(this.data()[3] == data.org) {
datatable.row( this ).data( to_add );
}
});
}
}
function updateProgressBar(org) {
if(currOrg != org)
return;
$.getJSON( url_getOrgRank+'?org='+org, function( data ) {
var rank = Math.floor(data.rank);
var rankDec = data.rank-rank;
var popoverRank = $('#btnCurrRank').data('bs.popover');
popoverRank.options.content = generateRankingSheet(rank, rankDec, data.stepPts, data.points, data.remainingPts);
$('#orgRankDiv').html(getMonthlyRankIcon(rank, 40, true));
$('#orgNextRankDiv').html(getMonthlyRankIcon(rank+1, 40, true));
if (data.rank > 16){
$('#progressBarDiv').width(1*150); //150 is empty bar width
} else {
$('#progressBarDiv').width((data.rank - rank)*150); //150 is empty bar width
}
});
}
function updateOvertakePnts() {
var prevOrgName = "";
var prevOrgPnts = 0;
datatableTop.rows().every( function() {
var row = this.node();
var orgRowName = $(this.data()[5])[0].text; // contained in <a>
var orgRowPnts = this.data()[0]
if(orgRowName == currOrg) {
if(prevOrgName == ""){ //already first
$('#orgToOverTake').text(orgRowName);
$('#pntsToOvertakeNext').text(0);
} else {
$('#orgToOverTake').text(prevOrgName);
$('#pntsToOvertakeNext').text(parseInt(prevOrgPnts)-orgRowPnts);
}
} else {
prevOrgName = orgRowName;
prevOrgPnts = orgRowPnts;
}
});
}
function updateProgressHeader(org) {
currOrg = org;
// get Org rank
$.getJSON( url_getOrgRank+'?org='+org, function( data ) {
datatableTop.draw();
var rank = Math.floor(data.rank);
var rankDec = data.rank-rank;
$('#btnCurrRank').show();
$('#orgText').text(data.org);
var popoverRank = $('#btnCurrRank').data('bs.popover');
popoverRank.options.content = generateRankingSheet(rank, rankDec, data.stepPts, data.points, data.remainingPts);
$('#orgRankDiv').html(getMonthlyRankIcon(rank, 40, true));
$('#orgNextRankDiv').html(getMonthlyRankIcon(rank+1, 40, true));
if (data.rank > 16){
$('#progressBarDiv').width(1*150); //150 is empty bar width
} else {
$('#progressBarDiv').width((data.rank - rank)*150); //150 is empty bar width
}
// update color in other dataTables
datatableTop.rows().every( function() {
var row = this.node();
if(this.data()[5] == data.org) { row.classList.add('selectedOrgInTable'); } else { row.classList.remove('selectedOrgInTable'); }
});
datatableFame.rows().every( function() {
var row = this.node();
if(this.data()[5] == data.org) { row.classList.add('selectedOrgInTable'); } else { row.classList.remove('selectedOrgInTable'); }
});
datatableCateg.rows().every( function() {
var row = this.node();
if(this.data()[5] == data.org) { row.classList.add('selectedOrgInTable'); } else { row.classList.remove('selectedOrgInTable'); }
});
datatableLast.rows().every( function() {
var row = this.node();
if(this.data()[6] == data.org) { row.classList.add('selectedOrgInTable'); } else { row.classList.remove('selectedOrgInTable'); }
});
});
// colorize row contribution rank help
$.getJSON( url_getContributionOrgStatus+'?org='+org, function( data ) {
var status = data['status'];
var curContributionOrgRank = data['rank'];
var totNumPoints = data['totPoints']
$('#orgTotNumOfPoint').text(totNumPoints);
if (curContributionOrgRank == 0) {
$('#orgContributionRank').attr('data', '');
} else {
$('#orgContributionRank').attr('data', url_baseOrgRankLogo+curContributionOrgRank+'.svg');
}
for (var row of $('#bodyTablerankingModal')[0].children) {
row = $(row);
var firstCell = $(row.children()[0]);
var rank = row.data('rank');
//remove all classes
row.removeClass("warning");
row.removeClass("danger");
row.removeClass("success");
firstCell.removeClass("successCell");
//add correct class
if(status[rank] == 0){
row.addClass("danger");
} else if(status[rank] == 1) {
row.addClass("warning");
}
if(rank == curContributionOrgRank) {
firstCell.addClass("successCell");
}
}
});
// colorize badge if acquired
$.getJSON( url_getHonorBadges+'?org='+org, function( data ) {
for(var i=0; i<numberOfBadges; i++) { // remove
$('#divBadge_'+(i+1)).removeClass('circlBadgeAcquired');
}
for(var i=0; i<data.length; i++) { // add
$('#divBadge_'+(data[i])).addClass('circlBadgeAcquired');
}
});
//update overtake points
updateOvertakePnts();
//Add new data to linechart
var flag_already_displayed = false;
for(obj of dataTop5Overtime) { //check if already displayed
if (obj.label == currOrg) {
flag_already_displayed = true;
break;
}
}
if (!flag_already_displayed) {
$.getJSON( url_getOrgOvertime+'?org='+org, function( data ) {
var toPlot = dataTop5Overtime.slice(0); //cloning data
// transform secs into date
var new_data = [];
for(list of data['data']) {
new_data.push([list[0]*1000, list[1]]);
}
data['data'] = new_data;
toPlot.push(data);
plotLineChart.setData(toPlot);
plotLineChart.setupGrid();
plotLineChart.draw();
});
}
}
function showOnlyOrg() {
datatableCateg.search( $('#orgText').text() ).draw();
}
function timeToString(time) {
var min = Math.floor(time / 60);
min = (min < 10) ? ("0" + min) : min;
var sec = time - 60*min;
sec = (sec < 10) ? ("0" + sec) : sec;
return min + ":" + sec
}
function updateTimer() {
if ($("#reloadCheckbox").is(':checked')) {
sec_before_reload--;
if (sec_before_reload < 1) {
source_lastContrib.close();
location.reload();
} else {
$('#labelRemainingTime').text(timeToString(sec_before_reload));
setTimeout(function(){ updateTimer(); }, 1000);
}
} else {
sec_before_reload = refresh_speed;
}
}
$(':checkbox').change(function() {
if ($("#reloadCheckbox").is(':checked')) { setTimeout(function(){ updateTimer(); }, 1000); }
});
$(document).ready(function() {
$('#labelRemainingTime').text(timeToString(sec_before_reload));
updateTimer();
$('#orgName').typeahead(typeaheadOption);
$('#btnCurrRank').popover(popOverOption);
datatableTop = $('#topContribTable').DataTable(optionDatatable_top);
datatableFame = $('#fameTable').DataTable(optionDatatable_fame);
datatableCateg = $('#categTable').DataTable(optionDatatable_Categ);
datatableLast = $('#lastTable').DataTable(optionDatatable_last);
// top contributors
addToTableFromJson(datatableTop, url_getTopContributor);
// hall of fame
addToTableFromJson(datatableFame, url_getFameContributor);
// last contributors
addLastFromJson(datatableLast, url_getLastContributor);
// category per contributors
$.getJSON( url_getCategPerContrib, function( data ) {
for (i in data) {
var row = data[i];
i = parseInt(i);
var to_add = [
row.pnts,
getMonthlyRankIcon(row.rank),
getOrgRankIcon(row.orgRank, 44),
createHonorImg(row.honorBadge, 20),
createImg(row.logo_path, 32),
createOrgLink(row.org),
];
for (categ of categ_list) {
to_add.push(row[categ]);
}
datatableCateg.row.add(to_add);
}
datatableCateg.draw();
});
// top 5 contrib overtime
$.getJSON( url_getTop5Overtime, function( data ) {
// transform secs into date
for(i in data){
var new_data = [];
for(list of data[i]['data']) {
new_data.push([list[0]*1000, list[1]]);
}
data[i]['data'] = new_data;
}
dataTop5Overtime = data;
plotLineChart = $.plot("#divTop5Overtime", data, optionsLineChart);
});
if(currOrg != "") // currOrg selected
//FIXME: timeout used to wait that all datatables are draw.
setTimeout( function() { updateProgressHeader(currOrg); }, 500);
source_lastContrib = new EventSource(url_eventStreamLastContributor);
source_lastContrib.onmessage = function(event) {
var json = jQuery.parseJSON( event.data );
addLastContributor(datatableLast, json, true);
datatableLast.draw();
updateProgressBar(json.org);
updateOvertakePnts();
sec_before_reload = refresh_speed; //reset timer at each contribution
};
});

View File

@ -125,7 +125,7 @@ class MapEventManager {
// Add and Manage markers on the map + make Animation
popupCoord(coord, regionCode) {
var coord = [coord.lat, coord.lon];
var color = Math.random()*180;
var color = 0.5*180;
var pnts = openStreetMapObj.latLngToPoint(coord[0], coord[1])
if (pnts != false) { //sometimes latLngToPoint return false
var addedMarker = openStreetMapObj.addMarker(this._curMarkerNum, coord, [color]);
@ -178,7 +178,8 @@ $(function(){
series: {
markers: [{
attribute: 'fill',
scale: ['#1A0DAB', '#e50000', '#62ff41'],
//scale: ['#1A0DAB', '#e50000', '#62ff41'],
scale: ['#ffff66'],
values: [],
min: 0,
max: 180
@ -207,10 +208,10 @@ function connect_source_map() {
var marker = L.marker([json.coord.lat, json.coord.lon]).addTo(myOpenStreetMap);
var mapEvent = new MapEvent(json, marker);
mapEventManager.addMapEvent(mapEvent);
};
source_map.onopen = function(){
console.log('connection is opened. '+source_map.readyState);
console.log('connection is opened. '+source_map.readyState);
};
source_map.onerror = function(){
console.log('error: '+source_map.readyState);
@ -240,4 +241,3 @@ $(document).ready(function () {
mapEventManager.directZoom();
});
});

View File

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="MISP_codeContributor.svg"
inkscape:version="0.92.1 r15371"
id="svg9131"
version="1.1"
viewBox="0 0 123.17497 114.51722"
height="114.51722mm"
width="123.17497mm">
<defs
id="defs9125">
<clipPath
id="clipPath312"
clipPathUnits="userSpaceOnUse">
<path
id="path314"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath1086"
clipPathUnits="userSpaceOnUse">
<path
id="path1088"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath844"
clipPathUnits="userSpaceOnUse">
<path
id="path846"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath820"
clipPathUnits="userSpaceOnUse">
<path
id="path822"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath536"
clipPathUnits="userSpaceOnUse">
<path
id="path538"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath516"
clipPathUnits="userSpaceOnUse">
<path
id="path518"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath1064"
clipPathUnits="userSpaceOnUse">
<path
id="path1066"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-3"
clipPathUnits="userSpaceOnUse">
<path
id="path314-8"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-3-6"
clipPathUnits="userSpaceOnUse">
<path
id="path314-8-6"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-7"
clipPathUnits="userSpaceOnUse">
<path
id="path314-0"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-3-3"
clipPathUnits="userSpaceOnUse">
<path
id="path314-8-67"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="24"
inkscape:window-x="65"
inkscape:window-height="1056"
inkscape:window-width="1855"
inkscape:pagecheckerboard="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="340.85829"
inkscape:cx="-15.709017"
inkscape:zoom="0.98994949"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata9128">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-41.489305,-34.182609)">
<path
id="path4519"
d="m 141.77694,120.43026 c 0,0 0,-36.407008 0,-47.828812 0,-11.421803 -11.4218,-22.843611 -22.84361,-22.843611 -7.61451,0 -7.61451,0 -7.61451,0 V 34.528771 L 88.475209,57.372379 111.31882,80.215982 V 64.98691 c 0,0 3.80725,0 7.61451,0 3.80728,0 7.61455,3.807269 7.61455,7.614538 0,3.807266 0,47.828812 0,47.828812 -4.52114,2.6175 -7.61455,7.49556 -7.61455,13.08747 0,8.44738 6.7817,15.22908 15.22908,15.22908 8.44737,0 15.22907,-6.7817 15.22907,-15.22908 0,-5.59191 -3.0934,-10.46997 -7.61454,-13.08747 z m -7.61453,20.70201 c -4.1642,0 -7.61453,-3.45034 -7.61453,-7.61454 0,-4.16418 3.45033,-7.61454 7.61453,-7.61454 4.16421,0 7.61453,3.45036 7.61453,7.61454 0,4.1642 -3.45032,7.61454 -7.61453,7.61454 z M 73.24614,42.143304 c -8.447376,0 -15.229073,6.781699 -15.229073,15.229075 0,5.591924 3.093405,10.46998 7.614535,13.087482 v 49.851409 c -4.52113,2.61751 -7.614535,7.49557 -7.614535,13.0875 0,8.44738 6.781697,15.22906 15.229073,15.22906 8.447373,0 15.229069,-6.78168 15.229069,-15.22906 0,-5.59193 -3.093406,-10.46999 -7.614534,-13.0875 V 70.459861 c 4.521128,-2.617502 7.614534,-7.495558 7.614534,-13.087482 0,-8.447376 -6.781696,-15.229075 -15.229069,-15.229075 z m 0,98.988966 c -4.1642,0 -7.614538,-3.45034 -7.614538,-7.61454 0,-4.16418 3.450338,-7.61454 7.614538,-7.61454 4.164197,0 7.614535,3.45036 7.614535,7.61454 0,4.1642 -3.450338,7.61454 -7.614535,7.61454 z m 0,-76.14536 c -4.1642,0 -7.614538,-3.450332 -7.614538,-7.614531 0,-4.1642 3.450338,-7.614542 7.614538,-7.614542 4.164197,0 7.614535,3.450342 7.614535,7.614542 0,4.164199 -3.450338,7.614531 -7.614535,7.614531 z"
inkscape:connector-curvature="0"
style="opacity:1;fill:#5f6062;fill-opacity:1;stroke-width:0.1189771" />
<g
style="fill:#2fa1db;fill-opacity:1"
clip-path="url(#clipPath312-3-3)"
id="g310-6-5"
transform="matrix(0.19487456,0,0,-0.19487456,43.704489,196.77524)">
<g
style="fill:#2fa1db;fill-opacity:1"
transform="translate(385.579,529.5928)"
id="g316-3-3">
<path
inkscape:connector-curvature="0"
id="path318-4-5"
style="fill:#2fa1db;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -5.184 v -56.985 c 0,-8.879 -5.16,-16.902 -15.523,-16.902 h -101.465 v -2.709 c 0,-7.851 8.922,-15.763 18.084,-15.763 h 77.581 l 29.678,-17.449 -4.31,17.449 H 0 c 9.156,0 13.287,7.906 13.287,15.763 v 63.068 C 13.287,-5.683 9.156,0 0,0" />
</g>
<g
style="fill:#2fa1db;fill-opacity:1"
transform="translate(349.7253,569.1839)"
id="g320-9-6">
<path
inkscape:connector-curvature="0"
id="path322-7-2"
style="fill:#2fa1db;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -117.85 c -10.369,0 -22.301,-9.211 -22.301,-18.09 v -71.424 c 0,-8.177 10.11,-14.082 19.807,-14.987 l -6.311,-23.958 40.441,23.786 H 0 c 10.363,0 19.937,6.286 19.937,15.159 v 57.786 13.638 C 19.937,-9.211 10.363,0 0,0 m -99.871,-60.292 c -5.88,0 -10.645,4.766 -10.645,10.646 0,5.88 4.765,10.646 10.645,10.646 5.874,0 10.646,-4.766 10.646,-10.646 0,-5.88 -4.772,-10.646 -10.646,-10.646 m 39.764,0 c -5.88,0 -10.646,4.766 -10.646,10.646 0,5.88 4.766,10.646 10.646,10.646 5.88,0 10.646,-4.766 10.646,-10.646 0,-5.88 -4.766,-10.646 -10.646,-10.646 m 39.77,0 c -5.881,0 -10.652,4.766 -10.652,10.646 0,5.88 4.771,10.646 10.652,10.646 5.868,0 10.645,-4.766 10.645,-10.646 0,-5.88 -4.777,-10.646 -10.645,-10.646" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="123.17497mm"
height="114.51722mm"
viewBox="0 0 123.17497 114.51722"
version="1.1"
id="svg9131"
inkscape:version="0.92.1 r15371"
sodipodi:docname="MISP_donator.svg">
<defs
id="defs9125">
<clipPath
id="clipPath312"
clipPathUnits="userSpaceOnUse">
<path
id="path314"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath1086"
clipPathUnits="userSpaceOnUse">
<path
id="path1088"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath844"
clipPathUnits="userSpaceOnUse">
<path
id="path846"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath820"
clipPathUnits="userSpaceOnUse">
<path
id="path822"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath536"
clipPathUnits="userSpaceOnUse">
<path
id="path538"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath516"
clipPathUnits="userSpaceOnUse">
<path
id="path518"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath1064"
clipPathUnits="userSpaceOnUse">
<path
id="path1066"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-3"
clipPathUnits="userSpaceOnUse">
<path
id="path314-8"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-3-6"
clipPathUnits="userSpaceOnUse">
<path
id="path314-8-6"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath312-7"
clipPathUnits="userSpaceOnUse">
<path
id="path314-0"
d="M 0,0 H 595.276 V 841.89 H 0 Z"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="155.51184"
inkscape:cy="300.45219"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata9128">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-41.489305,-34.182609)">
<path
style="fill:#5f6062;stroke:#5f6062;stroke-width:0.265;fill-opacity:1;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 83.077572,54.224268 c 0.169068,10.00204 -9.883511,15.00214 -9.464411,25.3611 v 0 0 c -7.663921,-6.98024 -17.974469,-2.48444 -25.527794,-9.04319 -4.99401,-4.33785 -5.389298,-11.20008 -0.703262,-16.32214 4.147608,-4.535757 9.053248,-4.386268 14.2621,-0.28417 0.205052,-6.627016 3.243527,-10.478291 9.38239,-10.741816 6.936581,-0.297392 11.938793,4.415896 12.050977,11.030216 z"
id="path9839"
inkscape:connector-curvature="0" />
<path
style="fill:#5f6062;stroke:#5f6062;stroke-width:0.26458332;fill-opacity:1;stroke-opacity:1"
d="m 164.41658,127.69985 c -0.003,-0.0103 -0.003,-0.0198 -0.007,-0.0307 -0.0177,-0.10927 -0.0402,-0.21722 -0.0651,-0.32623 -0.007,-0.0318 -0.0167,-0.0635 -0.0222,-0.095 -0.0209,-0.0863 -0.0439,-0.17357 -0.0667,-0.25876 -0.0143,-0.05 -0.0288,-0.0992 -0.0458,-0.1487 -0.0198,-0.0685 -0.0408,-0.13705 -0.064,-0.20611 -0.0201,-0.0598 -0.0421,-0.11932 -0.0632,-0.18018 -0.0167,-0.0442 -0.0291,-0.0894 -0.0484,-0.13361 L 148.44157,85.698828 c -1.10781,-2.88184 -3.87509,-4.78393 -6.95987,-4.78393 h -1.44039 -1.63989 -15.39611 v 0 c -6.03488,0 -12.24623,0 -15.98771,0 -17.380477,0 -28.007997,16.89047 -28.007997,16.89047 H 112.0304 l 5.82956,5.829572 0.0828,28.83403 22.09959,-8.8392 v -13.843 l 6.9514,15.12358 -23.80483,9.24983 c -3.8391,1.49093 -5.74093,5.81131 -4.24974,9.64989 1.14644,2.95037 3.96478,4.75747 6.9514,4.75747 0.89667,0 1.80975,-0.16351 2.69796,-0.50879 l 31.1883,-12.11739 c 1.22449,-0.47625 2.25239,-1.24195 3.03635,-2.18864 0.007,-0.0109 0.0167,-0.0204 0.0236,-0.0302 0.0696,-0.0839 0.13653,-0.16801 0.1995,-0.2532 0.0177,-0.023 0.0325,-0.0458 0.0495,-0.0693 0.0558,-0.0736 0.10715,-0.1487 0.16034,-0.22596 0.0217,-0.0315 0.0426,-0.0656 0.0654,-0.0984 0.0429,-0.0677 0.0868,-0.13573 0.12886,-0.20505 0.0241,-0.041 0.0495,-0.0831 0.0743,-0.12276 0.037,-0.063 0.0728,-0.127 0.10609,-0.1913 0.0267,-0.0463 0.0505,-0.0942 0.0759,-0.14102 0.0315,-0.0619 0.0617,-0.12356 0.0921,-0.18547 0.0243,-0.0508 0.0495,-0.10028 0.0712,-0.15161 0.0299,-0.0611 0.0553,-0.12435 0.0804,-0.18812 0.0164,-0.0336 0.031,-0.0667 0.0471,-0.10054 0.004,-0.0177 0.0114,-0.0349 0.0188,-0.0534 0.0265,-0.0659 0.0505,-0.13282 0.0741,-0.20055 0.0185,-0.0479 0.0352,-0.0958 0.0529,-0.14367 0.0257,-0.0778 0.0497,-0.15611 0.0749,-0.23522 0.0106,-0.0378 0.022,-0.0743 0.0336,-0.11377 0.0304,-0.10292 0.0558,-0.20611 0.0825,-0.31088 0.003,-0.0146 0.007,-0.0275 0.0101,-0.0415 0.22755,-0.96388 0.26301,-1.98015 0.0833,-2.99085 z"
id="path9813"
inkscape:connector-curvature="0" />
<path
style="fill:#5f6062;stroke:#5f6062;stroke-width:0.265;fill-opacity:1;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 51.580778,111.56344 c -5.4991,0 -9.959181,4.45982 -9.959181,9.95865 0,5.50043 4.459816,9.95892 9.959181,9.95892 5.500423,0 9.958123,-4.45849 9.958123,-9.95892 -2.65e-4,-5.49857 -4.4577,-9.95865 -9.958123,-9.95865 z"
id="path9811"
inkscape:connector-curvature="0" />
<path
style="fill:#5f6062;stroke:#5f6062;stroke-width:0.265;fill-opacity:1;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 119.39957,34.314901 c -11.28924,0 -20.441967,9.15273 -20.441967,20.443027 0,11.29162 9.152727,20.44568 20.441967,20.44568 11.29189,0 20.44462,-9.15406 20.44462,-20.44568 -2.6e-4,-11.290297 -9.15273,-20.443027 -20.44462,-20.443027 z"
id="path593"
inkscape:connector-curvature="0" />
<g
style="fill:#2fa1db;fill-opacity:1"
clip-path="url(#clipPath312-3)"
id="g310-6"
transform="matrix(0.27125139,0,0,-0.27125139,7.5574611,254.83572)">
<g
style="fill:#2fa1db;fill-opacity:1"
transform="translate(385.579,529.5928)"
id="g316-3">
<path
inkscape:connector-curvature="0"
id="path318-4"
style="fill:#2fa1db;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -5.184 v -56.985 c 0,-8.879 -5.16,-16.902 -15.523,-16.902 h -101.465 v -2.709 c 0,-7.851 8.922,-15.763 18.084,-15.763 h 77.581 l 29.678,-17.449 -4.31,17.449 H 0 c 9.156,0 13.287,7.906 13.287,15.763 v 63.068 C 13.287,-5.683 9.156,0 0,0" />
</g>
<g
style="fill:#2fa1db;fill-opacity:1"
transform="translate(349.7253,569.1839)"
id="g320-9">
<path
inkscape:connector-curvature="0"
id="path322-7"
style="fill:#2fa1db;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -117.85 c -10.369,0 -22.301,-9.211 -22.301,-18.09 v -71.424 c 0,-8.177 10.11,-14.082 19.807,-14.987 l -6.311,-23.958 40.441,23.786 H 0 c 10.363,0 19.937,6.286 19.937,15.159 v 57.786 13.638 C 19.937,-9.211 10.363,0 0,0 m -99.871,-60.292 c -5.88,0 -10.645,4.766 -10.645,10.646 0,5.88 4.765,10.646 10.645,10.646 5.874,0 10.646,-4.766 10.646,-10.646 0,-5.88 -4.772,-10.646 -10.646,-10.646 m 39.764,0 c -5.88,0 -10.646,4.766 -10.646,10.646 0,5.88 4.766,10.646 10.646,10.646 5.88,0 10.646,-4.766 10.646,-10.646 0,-5.88 -4.766,-10.646 -10.646,-10.646 m 39.77,0 c -5.881,0 -10.652,4.766 -10.652,10.646 0,5.88 4.771,10.646 10.652,10.646 5.868,0 10.645,-4.766 10.645,-10.646 0,-5.88 -4.777,-10.646 -10.645,-10.646" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="0.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="1.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:0.99739587"
d="M 0.16665649,63.999999 V 54.026041 H 63.999991 127.83333 v 9.973958 9.973959 H 63.999991 0.16665649 Z"
id="path772"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="10.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#111111;stroke-width:0.99739587"
d="M 62.343761,112.12435 C 61.53636,111.16436 57.126415,103.8709 52.543883,95.916667 47.961352,87.962435 42.268796,78.208063 39.89376,74.240283 c -2.375037,-3.967778 -4.318248,-7.67061 -4.318248,-8.228515 0,-0.598995 3.165302,-1.020627 7.729817,-1.029646 10.15222,-0.02006 11.26424,-0.747882 7.893918,-5.166603 -1.427729,-1.871849 -3.289023,-5.062308 -4.136209,-7.08991 -0.847186,-2.027601 -2.104299,-3.686548 -2.793585,-3.686548 -0.689286,0 -3.177249,3.117951 -5.528806,6.928782 -2.40369,3.895311 -4.80177,6.726855 -5.477483,6.467559 C 32.164283,62.013723 29.037427,57.110729 19.313016,40.561196 8.6605585,22.432265 4.6000293,14.71792 5.0680943,13.498162 c 0.773004,-2.014416 56.2518007,-2.015579 57.0247917,-0.0012 0.287363,0.748853 -1.073279,4.264674 -3.023648,7.812933 l -3.546124,6.451383 h 8.97672 c 4.937196,0 8.97672,-0.348368 8.97672,-0.774152 0,-1.027095 -3.951733,-7.919019 -5.777975,-10.076938 -0.79515,-0.939562 -1.180964,-2.398254 -0.857366,-3.241537 0.510259,-1.329715 4.358007,-1.533242 28.986581,-1.533242 17.944256,0 28.626206,0.368876 29.017526,1.002053 0.34061,0.551129 -2.18127,5.82486 -5.60419,11.719401 -3.42293,5.894542 -8.15719,14.08356 -10.52059,18.197818 -7.32809,12.756904 -8.746508,15.062415 -10.891772,17.703593 L 95.749993,63.3176 94.035806,60.915961 c -0.942802,-1.320902 -3.027057,-4.533573 -4.631679,-7.139269 -3.32558,-5.400312 -5.510499,-6.033488 -6.426624,-1.8624 -0.347328,1.581377 -2.249163,4.765099 -4.226299,7.074937 -4.495274,5.251716 -3.660811,5.971941 6.94345,5.992893 6.136283,0.01213 7.729817,0.31816 7.729817,1.4845 0,0.808075 -1.967699,4.735321 -4.372664,8.727214 C 86.646841,79.185728 82.085234,86.940104 78.914904,92.425781 65.322476,115.94498 65.439803,115.80552 62.343761,112.12435 Z"
id="path518"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="11.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#111111;stroke-width:0.99348962"
d="m 21.529938,100.91799 c 0,-1.359502 3.920128,-6.608152 11.896717,-15.928482 15.583832,-18.209096 14.603288,-16.58494 22.273214,-36.892997 4.666854,-12.35667 7.714112,-19.115393 8.618423,-19.115393 0.915572,0 3.820939,6.696535 8.408548,19.380728 l 7.009606,19.380727 13.368427,15.695095 c 7.352637,8.632302 13.517447,16.117275 13.699587,16.633272 0.54172,1.53467 -3.88517,1.10547 -22.451114,-2.176678 -9.690797,-1.713168 -18.513771,-3.11498 -19.60661,-3.115136 -1.878162,-2.69e-4 -20.368986,2.990764 -32.288412,5.222904 -10.085151,1.88863 -10.928386,1.9593 -10.928386,0.91596 z"
id="path550"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="12.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#151515;stroke-width:1.00130212"
d="m 2.6752408,89.532877 c 0.00257,-0.413037 4.2448526,-5.822961 9.4272882,-12.022054 9.593178,-11.475108 9.562596,-11.418725 16.9695,-31.284262 1.340733,-3.595887 3.031325,-6.508464 3.777806,-6.508464 0.823391,0 3.308647,5.341981 6.362939,13.676942 4.85887,13.259536 5.286855,13.99982 14.023545,24.256514 4.956446,5.818765 9.708694,10.59085 10.56055,10.604634 0.851858,0.01379 5.744362,-5.057323 10.87223,-11.269128 8.776929,-10.632208 9.605623,-12.04565 14.138474,-24.114931 2.648291,-7.051407 5.085319,-13.090985 5.415617,-13.421283 1.229046,-1.229045 2.697451,1.706565 7.10503,14.204259 4.43124,12.564771 4.71278,13.044933 14.01165,23.896769 5.21926,6.090895 9.48955,11.44732 9.48955,11.903167 0,1.16391 -0.83125,1.082518 -16.24772,-1.590898 L 94.837247,85.480673 82.047199,87.862277 C 66.149031,90.822638 63.554215,90.82136 46.388103,87.844722 L 32.530772,85.441832 19.448656,87.862844 C 5.5049689,90.443299 2.66781,90.725779 2.6752408,89.532877 Z"
id="path582"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="13.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#151515;stroke-width:1.00520837"
d="m 3.6874899,114.47988 c 0,-0.43214 4.2597003,-5.91381 9.4660011,-12.18146 9.247589,-11.132806 9.586187,-11.725396 14.674978,-25.683087 5.389245,-14.781782 6.464572,-16.515432 20.606591,-33.222105 3.116404,-3.681564 5.52169,-8.387237 8.991645,-17.591147 2.605435,-6.910807 5.11179,-12.956337 5.569678,-13.434511 1.098315,-1.14697 2.881831,2.600964 7.512166,15.786287 3.590293,10.223706 4.406924,11.584019 13.234443,22.045436 8.929785,10.58261 10.422367,12.795498 8.630498,12.795498 -0.427649,0 -7.081805,-1.105418 -14.787016,-2.456483 L 63.577002,58.081826 49.464278,60.654771 c -7.761999,1.415121 -14.325969,2.771477 -14.586601,3.014127 -0.48491,0.451452 2.062285,8.049812 7.187481,21.440477 2.291353,5.986647 4.666352,9.60895 11.533807,17.591145 4.756552,5.52865 9.206332,10.37885 9.8884,10.77824 0.806192,0.47205 4.402992,-3.06044 10.279172,-10.0954 10.629865,-12.72606 10.116459,-11.848327 15.778667,-26.975664 2.438715,-6.515349 4.858986,-11.987742 5.37838,-12.160873 0.519393,-0.173131 3.243743,6.000153 6.054116,13.718409 4.92874,13.53609 5.40584,14.377453 13.46836,23.751568 8.85448,10.29492 10.36223,12.38289 9.5374,13.20772 -0.49375,0.49375 -15.89135,-1.85363 -24.378285,-3.71649 -3.108585,-0.68232 -7.340807,-0.3004 -17.495061,1.57877 -16.391344,3.03343 -18.196975,3.03755 -35.247487,0.0804 l -13.619134,-2.36194 -13.018887,2.36624 c -14.1443948,2.5708 -16.5371161,2.80352 -16.5371161,1.60836 z"
id="path614"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="14.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#151515;stroke-width:0.99739587"
d="m 48.539054,114.20989 -15.459636,-2.74793 -11.470053,2.04586 c -16.4908021,2.94137 -18.9505209,3.22802 -18.9505209,2.20846 0,-0.50103 4.2719033,-6.05373 9.4931179,-12.33934 9.729674,-11.713161 10.277509,-12.735522 16.949671,-31.631157 2.927299,-8.290144 4.225731,-10.372402 12.98463,-20.823066 10.271355,-12.255246 9.314523,-10.436013 19.572445,-37.213297 1.442955,-3.7666884 2.997929,-1.238262 7.909454,12.860965 4.021047,11.542984 4.871755,13.080843 11.81151,21.352133 4.113107,4.902291 8.901181,10.301086 10.640167,11.997322 2.309227,2.252459 4.538199,6.78478 8.266291,16.808401 2.80746,7.548385 5.1148,14.056393 5.12742,14.46224 0.0126,0.405847 4.26987,5.675014 9.46059,11.709259 8.54451,9.93305 10.85628,13.49837 8.71895,13.44679 -0.41142,-0.01 -7.03164,-1.11401 -14.71159,-2.45351 l -13.963539,-2.43546 -13.963542,2.47966 c -7.679948,1.36382 -14.636784,2.60138 -15.459636,2.75013 -0.822851,0.14875 -8.45293,-0.9661 -16.955729,-2.47746 z m 26.471999,-11.79965 c 7.986929,-9.223634 8.958048,-10.832824 13.057149,-21.636315 2.435657,-6.419356 4.296029,-12.35925 4.13416,-13.199764 -0.179178,-0.9304 -3.802321,2.617189 -9.26201,9.068867 -8.464546,10.002497 -9.20668,11.260238 -13.226939,22.416477 -4.179206,11.597325 -4.666295,13.315495 -3.774837,13.315495 0.244087,0 4.326702,-4.48414 9.072477,-9.96476 z m -15.500645,5.4633 c 0,-0.83009 -1.704687,-6.13097 -3.788193,-11.779718 -3.260614,-8.840096 -4.745403,-11.373313 -10.661257,-18.189302 -7.837919,-9.030506 -9.032116,-9.87469 -8.216503,-5.808283 1.655065,8.251655 7.204344,20.823546 11.155109,25.271896 2.293384,2.582228 5.42597,6.341897 6.961301,8.354827 2.959711,3.88038 4.549543,4.63189 4.549543,2.15058 z m 13.35179,-42.186468 c 4.87493,-0.927173 8.828358,-2.134599 8.785395,-2.683167 -0.04296,-0.548567 -4.031541,-1.795135 -8.863509,-2.770149 -8.279446,-1.67066 -9.331073,-1.677863 -18.260655,-0.12508 -10.0641,1.750065 -12.771994,2.925103 -8.871482,3.849609 6.308525,1.495255 15.510587,3.337826 16.850649,3.374081 0.822851,0.02226 5.484672,-0.71812 10.359602,-1.645294 z"
id="path646"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="15.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#252525;stroke-width:0.99739587"
d="M 41.558585,115.33412 C 30.038662,108.57855 18.03251,101.46537 14.878245,99.52706 L 9.1432192,96.002867 V 64.498697 32.994528 L 14.878245,29.471899 C 25.509451,22.941885 63.345758,1.16406 64.059651,1.16406 c 0.389198,0 2.89134,1.3746563 5.560315,3.0547918 2.668976,1.6801355 13.945176,8.3003502 25.058224,14.7115892 11.11305,6.411238 21.09947,12.437854 22.19206,13.392478 1.90244,1.662229 1.98651,3.023851 1.98651,32.175778 0,29.151927 -0.0841,30.513549 -1.98651,32.175778 -1.09259,0.954625 -11.07901,6.981235 -22.19206,13.392475 -11.113048,6.41124 -22.389248,13.03146 -25.058224,14.71159 -2.668975,1.68013 -5.361944,3.00612 -5.984375,2.94663 -0.622431,-0.0595 -10.557084,-5.63547 -22.077006,-12.39105 z m 45.325062,-6.79018 c 12.727551,-7.31777 24.006163,-14.045794 25.063563,-14.951179 1.81204,-1.551517 1.92257,-3.224121 1.92257,-29.094064 0,-25.869943 -0.11053,-27.542547 -1.92257,-29.094064 -1.0574,-0.905385 -12.352374,-7.642821 -25.099921,-14.972081 L 63.669929,7.1066264 50.619465,14.61701 C 43.44171,18.747722 32.407478,25.162398 26.098949,28.871846 l -11.470053,6.74445 V 64.499013 93.38173 l 10.971355,6.430639 c 15.029577,8.809281 37.843404,22.036591 38.007665,22.036591 0.0741,0 10.548181,-5.98726 23.275731,-13.30502 z M 36.072907,98.441026 c 0,-0.257306 2.468555,-6.779205 5.485678,-14.49311 3.017122,-7.713904 5.485677,-14.893454 5.485677,-15.954554 0,-1.905375 -0.993554,-2.637826 -20.886445,-15.397534 -6.401235,-4.105883 -7.173545,-4.899186 -5.617379,-5.77006 1.226502,-0.686385 4.582672,-0.653371 10.481337,0.103102 4.772413,0.612038 11.68593,1.112795 15.363372,1.112795 7.918032,0 7.159101,1.097908 11.720693,-16.955729 1.732575,-6.857097 3.597326,-13.324667 4.143892,-14.372378 0.95581,-1.832187 1.032686,-1.835368 2.013194,-0.0833 0.560689,1.001897 1.351953,3.2056 1.758364,4.897118 2.203817,9.172478 7.027838,24.02213 8.177124,25.171417 1.289812,1.289811 6.908806,1.078366 28.949366,-1.089374 6.7473,-0.663614 6.0818,1.064979 -2.50638,6.510077 -3.970024,2.517094 -10.247821,6.49706 -13.950653,8.844369 -3.702832,2.347311 -6.732422,4.855296 -6.732422,5.573304 0,0.718006 2.496653,7.647113 5.548116,15.398014 3.051464,7.750901 5.407812,14.797572 5.236329,15.659268 C 90.514568,98.741154 88.291885,97.45003 82.451815,92.778356 69.16187,82.147269 64.771846,78.960937 63.414625,78.960937 c -0.712749,0 -4.126625,2.386488 -7.586391,5.303306 C 40.279837,97.372602 36.072907,100.39157 36.072907,98.441026 Z"
id="path678"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="16.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#323232;stroke-width:1.00130212"
d="M 54.737621,123.35879 C 50.331892,120.73567 39.517829,114.40555 30.706371,109.29184 21.894912,104.17813 13.440145,99.125961 11.917997,98.064801 L 9.1504571,96.135421 9.4147417,64.422202 9.6790265,32.708983 19.191397,27.085754 C 24.4232,23.992979 34.336091,18.179372 41.220043,14.166627 48.103995,10.153882 55.803403,5.5876064 58.32984,4.019347 c 2.526436,-1.5682595 5.06533,-2.8513808 5.641985,-2.8513808 0.576655,0 3.240723,1.380006 5.920151,3.06668 2.679429,1.686674 14.333993,8.4859108 25.899032,15.1094168 11.565042,6.623506 21.590572,12.764289 22.278972,13.646183 0.9381,1.201795 1.25163,9.157544 1.25163,31.760404 0,22.60286 -0.31353,30.558609 -1.25163,31.760404 -0.6884,0.881895 -10.71393,7.022676 -22.278972,13.646186 -11.565039,6.6235 -23.219603,13.42274 -25.899032,15.10942 -2.679428,1.68667 -5.382944,3.02048 -6.007812,2.96404 -0.624869,-0.0565 -4.740813,-2.24881 -9.146543,-4.87191 z m 32.485648,-14.3904 C 100.00067,101.62197 111.32345,94.867591 112.385,93.95866 c 1.81913,-1.557594 1.9301,-3.236748 1.9301,-29.20801 0,-25.985312 -0.11015,-27.649712 -1.93295,-29.21045 C 111.31903,34.629928 99.977663,27.874888 87.179116,20.529001 L 63.909029,7.1728417 39.297283,21.468218 14.685537,35.763595 v 28.986516 28.986518 l 24.531902,14.285301 c 13.492546,7.85693 24.586418,14.28942 24.65305,14.29445 0.06664,0.005 10.575383,-6.00156 23.35278,-13.34799 z m -38.994111,-0.3599 C 40.243773,103.92071 30.21108,98.058199 25.934283,95.58071 L 18.158289,91.076184 18.424517,63.991707 18.690746,36.907229 40.218741,24.431613 c 11.840397,-6.86159 22.203874,-12.670356 23.029948,-12.908371 1.323306,-0.381279 41.206121,22.078827 45.428811,25.583347 1.43157,1.188094 1.63239,4.523398 1.63239,27.110825 0,23.276536 -0.16869,25.904025 -1.75228,27.293027 -2.3877,2.094308 -43.887087,25.832149 -44.955835,25.714949 -0.469555,-0.0515 -7.387233,-3.9291 -15.372617,-8.6169 z m 20.761976,0.86922 c 2.624175,-1.55912 10.628845,-6.13532 17.788155,-10.169325 7.15931,-4.034005 14.481331,-8.413609 16.271161,-9.732453 l 3.25423,-2.3979 V 64.354231 c 0,-20.472042 -0.18055,-22.98538 -1.75228,-24.391918 C 103.58865,39.099849 94.115013,33.375427 83.49988,27.241375 L 64.199638,16.088551 43.447796,27.907607 22.695954,39.726664 v 24.389729 24.38973 l 20.526693,11.886257 c 11.289681,6.53744 20.632571,11.89388 20.761976,11.90319 0.129407,0.009 2.382336,-1.25872 5.006511,-2.81786 z M 41.220043,91.805931 c 0,-0.815006 1.802344,-6.0058 4.005208,-11.535098 2.202865,-5.529299 4.005209,-10.888403 4.005209,-11.909121 0,-1.257092 -3.555549,-4.185767 -11.020386,-9.0774 -6.061213,-3.971852 -10.751821,-7.656096 -10.423575,-8.18721 0.37003,-0.598723 5.678221,-0.702102 13.969379,-0.27206 l 13.372567,0.693601 0.675508,-2.896366 c 2.672624,-11.45936 5.651885,-22.03073 6.427315,-22.80616 1.178758,-1.178758 2.238852,1.389886 5.566756,13.488436 1.452271,5.279711 3.011711,10.200119 3.465422,10.934238 0.667298,1.079711 3.347344,1.158733 14.025479,0.413546 7.260303,-0.50667 13.399194,-0.598357 13.641982,-0.203747 0.242787,0.394609 -2.84259,2.839894 -6.856396,5.433965 -13.598221,8.788359 -15.03503,9.797622 -15.425723,10.835552 -0.214575,0.570047 1.639068,6.173147 4.119206,12.451334 4.462569,11.296483 5.216047,14.125417 3.758365,14.110777 -0.413037,-0.0041 -5.184113,-3.608835 -10.602392,-8.010416 -5.418279,-4.401581 -10.297172,-8.002875 -10.841985,-8.002875 -0.544814,0 -5.399169,3.604687 -10.787456,8.010416 -5.388288,4.40573 -10.084345,8.010417 -10.435684,8.010417 -0.351339,0 -0.638799,-0.666823 -0.638799,-1.481829 z"
id="path710"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="2.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:1.00520837"
d="M 0.16665649,80.078125 V 70.026041 H 64.499991 128.83333 V 80.078125 90.130208 H 64.499991 0.16665649 Z m 0,-30.156251 V 39.86979 H 64.499991 128.83333 V 49.921874 59.973957 H 64.499991 0.16665649 Z"
id="path804"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="3.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:1.00130212"
d="M 0.66665649,91.786458 V 81.773437 H 64.749991 128.83333 V 91.786458 101.79948 H 64.749991 0.66665649 Z m 0,-28.036459 V 53.736978 H 64.749991 128.83333 V 63.749999 73.76302 H 64.749991 0.66665649 Z m 0,-28.036459 V 25.700519 H 64.749991 128.83333 V 35.71354 45.726561 H 64.749991 0.66665649 Z"
id="path836"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="4.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:1.00130212"
d="M 54.23697,64.249999 V 0.16666412 H 64.249991 74.263013 V 64.249999 128.33333 H 64.249991 54.23697 Z"
id="path868"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="5.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:0.99739587"
d="M 39.065095,63.999999 V 0.16666412 h 9.973959 9.973958 V 63.999999 127.83333 h -9.973958 -9.973959 z m 29.921876,0 V 0.16666412 h 9.973958 9.973959 V 63.999999 127.83333 h -9.973959 -9.973958 z"
id="path900"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="6.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#0b0b0b;stroke-width:1.00130212"
d="M 26.200511,64.249999 V 0.16666412 H 36.213532 46.226554 V 64.249999 128.33333 H 36.213532 26.200511 Z m 28.036459,0 V 0.16666412 H 64.249991 74.263013 V 64.249999 128.33333 H 64.249991 54.23697 Z m 28.036459,0 V 0.16666412 H 92.286451 102.29947 V 64.249999 128.33333 H 92.286451 82.273429 Z"
id="path932"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="7.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#101010;stroke-width:1.33333337"
d="m 61.76702,111.33333 c -1.560266,-1.65 -4.325016,-5.7 -6.143887,-9 C 48.796385,89.947477 40.356856,75.485119 20.277378,41.76326 15.942423,34.483053 12.577338,27.583053 12.79941,26.429926 c 0.358935,-1.863799 6.173532,-2.096595 52.367248,-2.096595 46.193712,0 52.008312,0.232796 52.367252,2.096595 0.22207,1.153127 -3.14302,8.053127 -7.47797,15.333334 -20.079481,33.721859 -28.51901,48.184217 -35.345758,60.57007 -3.041394,5.51804 -8.196455,12 -9.543524,12 -0.309532,0 -1.83937,-1.35 -3.399638,-3 z"
id="path422"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="8.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#111111;stroke-width:0.99739587"
d="M 31.444428,87.086367 C 30.424401,85.743271 28.718295,83.141479 27.65308,81.304608 26.587865,79.467737 23.637831,74.374218 21.097447,69.985676 18.557065,65.597135 13.93046,57.634332 10.816103,52.29056 7.701746,46.946788 5.1536358,41.90115 5.1536358,41.078031 c 0,-1.313738 7.2502832,-1.496578 59.3450532,-1.496578 52.094771,0 59.345051,0.18284 59.345051,1.496578 0,0.823119 -2.5481,5.868757 -5.66246,11.212529 -6.06921,10.413841 -13.6877,23.559534 -16.83698,29.05215 -3.083127,5.377238 -5.996059,8.475035 -7.244022,7.703752 -0.630139,-0.389448 -2.994065,-3.939788 -5.253169,-7.889645 -15.69406,-27.43977 -23.169575,-39.596923 -24.34842,-39.596923 -1.028546,0 -4.019211,4.674537 -14.676571,22.940105 -12.577713,21.556849 -14.298687,24.315672 -15.385502,24.663882 -0.625677,0.200464 -1.972161,-0.734417 -2.992188,-2.077514 z"
id="path454"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128px"
height="128px"
viewBox="0 0 128 128"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.1 r15371"
sodipodi:docname="9.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="64"
inkscape:cy="44"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:grid-bbox="true" />
<defs
id="defs335" />
<metadata
id="metadata338">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
style="fill:#121212;stroke-width:1.00130212"
d="M 61.468159,113.12565 C 58.415683,108.10721 53.833627,100.36539 48.541707,91.285156 39.960335,76.560656 34.504975,67.470242 29.012339,58.742838 26.23957,54.337108 21.379055,46.226561 18.211193,40.7194 15.043332,35.212238 10.476039,27.427493 8.0616549,23.419966 c -2.4143845,-4.007526 -4.38979,-7.944659 -4.38979,-8.749182 0,-1.266559 8.0517901,-1.462771 60.0265791,-1.462771 39.049716,0 60.243446,0.350898 60.647156,1.004115 0.34131,0.552263 -1.74012,4.939981 -4.62543,9.750485 -11.09808,18.503188 -13.71638,22.956181 -16.91783,28.772412 -1.81881,3.304297 -4.478204,7.580593 -5.909775,9.50288 -1.431573,1.922286 -3.109017,4.400509 -3.727656,5.507161 -0.618637,1.106652 -3.509622,6.067368 -6.424409,11.023814 -2.914788,4.956445 -7.72715,13.259921 -10.694139,18.452168 -6.758882,11.828082 -10.45671,17.330752 -11.982226,17.830542 -0.653296,0.21404 -1.821485,-0.65264 -2.595976,-1.92594 z M 92.251461,63.306364 C 92.767005,62.472198 89.431456,56.449651 71.011877,24.956938 66.051136,16.475355 64.160399,14.371875 62.762498,15.779349 61.928562,16.618995 52.258677,32.892185 40.568499,53.129033 c -2.670232,4.622434 -4.854967,9.015647 -4.854967,9.762696 0,1.111084 5.091488,1.35827 27.977366,1.35827 16.431664,0 28.21804,-0.389419 28.560563,-0.943635 z"
id="path486"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="1-Ensign.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,-0.1416896,248.21496)"
inkscape:label="Layer 1"
id="layer1-4">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 203.92291,97.380318 47.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -47.26363,0.14212 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="10-Colonel.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.19595437,247.30259)"
inkscape:label="Layer 1"
id="layer1-62">
<g
id="g5478-6">
<path
inkscape:connector-curvature="0"
id="path5482-1"
d="M 4.3655218,146.68142 C 4.2166368,146.29338 4.1609914,135.07386 4.2418652,121.74916 L 4.3889086,97.522435 127.92291,97.380318 l 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 C 29.58578,147.35818 4.5814298,147.24416 4.3655218,146.68142 Z M 44.539934,122.66153 c 0.106868,-13.1064 -0.03351,-18.46326 -0.498508,-19.02355 -0.529525,-0.63804 -3.631174,-0.75276 -17.051123,-0.63067 l -16.403859,0.14925 -0.148358,19.02343 -0.148357,19.02344 17.050725,-0.14913 17.050726,-0.14912 z m 40.002201,-0.31087 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z m 40.001935,-0.17894 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z m 40.56577,0.0126 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z m 40.00218,-0.0126 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z m 40.5661,0.48981 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5496-8"
d="m 10.438086,122.17999 0.148358,-19.02343 16.403859,-0.14925 c 13.419949,-0.12209 16.521598,-0.007 17.051123,0.63067 0.465,0.56029 0.605376,5.91715 0.498508,19.02355 l -0.148754,18.24365 -17.050726,0.14912 -17.050725,0.14913 z"
style="fill:#f80909;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494-7"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492-9"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490-2"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488-0"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480-2"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="11-Senior_Colonel.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,-0.18202182,247.60498)"
inkscape:label="Layer 1"
id="layer1-6">
<g
id="g5478">
<path
inkscape:connector-curvature="0"
id="path5482"
d="M 4.3655218,146.68142 C 4.2166368,146.29338 4.1609914,135.07386 4.2418652,121.74916 L 4.3889086,97.522435 127.92291,97.380318 l 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 C 29.58578,147.35818 4.5814298,147.24416 4.3655218,146.68142 Z M 44.539934,122.66153 c 0.106868,-13.1064 -0.03351,-18.46326 -0.498508,-19.02355 -0.529525,-0.63804 -3.631174,-0.75276 -17.051123,-0.63067 l -16.403859,0.14925 -0.148358,19.02343 -0.148357,19.02344 17.050725,-0.14913 17.050726,-0.14912 z m 40.002201,-0.31087 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z m 40.001935,-0.17894 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z m 40.56577,0.0126 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z m 40.00218,-0.0126 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z m 40.5661,0.48981 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5496"
d="m 10.438086,122.17999 0.148358,-19.02343 16.403859,-0.14925 c 13.419949,-0.12209 16.521598,-0.007 17.051123,0.63067 0.465,0.56029 0.605376,5.91715 0.498508,19.02355 l -0.148754,18.24365 -17.050726,0.14912 -17.050725,0.14913 z"
style="fill:#f80909;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="12-Major_General.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.12036891,247.86957)"
inkscape:label="Layer 1"
id="layer1-9">
<g
id="g5478">
<path
inkscape:connector-curvature="0"
id="path5482"
d="M 4.3655218,146.68142 C 4.2166368,146.29338 4.1609914,135.07386 4.2418652,121.74916 L 4.3889086,97.522435 127.92291,97.380318 l 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 C 29.58578,147.35818 4.5814298,147.24416 4.3655218,146.68142 Z M 44.539934,122.66153 c 0.106868,-13.1064 -0.03351,-18.46326 -0.498508,-19.02355 -0.529525,-0.63804 -3.631174,-0.75276 -17.051123,-0.63067 l -16.403859,0.14925 -0.148358,19.02343 -0.148357,19.02344 17.050725,-0.14913 17.050726,-0.14912 z m 40.002201,-0.31087 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z m 40.001935,-0.17894 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z m 40.56577,0.0126 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z m 40.00218,-0.0126 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z m 40.5661,0.48981 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5496"
d="m 10.438086,122.17999 0.148358,-19.02343 16.403859,-0.14925 c 13.419949,-0.12209 16.521598,-0.007 17.051123,0.63067 0.465,0.56029 0.605376,5.91715 0.498508,19.02355 l -0.148754,18.24365 -17.050726,0.14912 -17.050725,0.14913 z"
style="fill:#f80909;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="13-Lieutenant_General.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-84.285714"
inkscape:cy="560"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.42274238,247.41597)"
inkscape:label="Layer 1"
id="layer1-7">
<g
id="g5478">
<path
inkscape:connector-curvature="0"
id="path5482"
d="M 4.3655218,146.68142 C 4.2166368,146.29338 4.1609914,135.07386 4.2418652,121.74916 L 4.3889086,97.522435 127.92291,97.380318 l 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 C 29.58578,147.35818 4.5814298,147.24416 4.3655218,146.68142 Z M 44.539934,122.66153 c 0.106868,-13.1064 -0.03351,-18.46326 -0.498508,-19.02355 -0.529525,-0.63804 -3.631174,-0.75276 -17.051123,-0.63067 l -16.403859,0.14925 -0.148358,19.02343 -0.148357,19.02344 17.050725,-0.14913 17.050726,-0.14912 z m 40.002201,-0.31087 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z m 40.001935,-0.17894 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z m 40.56577,0.0126 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z m 40.00218,-0.0126 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z m 40.5661,0.48981 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5496"
d="m 10.438086,122.17999 0.148358,-19.02343 16.403859,-0.14925 c 13.419949,-0.12209 16.521598,-0.007 17.051123,0.63067 0.465,0.56029 0.605376,5.91715 0.498508,19.02355 l -0.148754,18.24365 -17.050726,0.14912 -17.050725,0.14913 z"
style="fill:#f80909;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="14.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="107.05485"
inkscape:cy="38.661822"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 56.133227,284.66198 c -0.04005,-0.10437 -0.0551,-2.36937 -0.03344,-5.03332 l 0.03938,-4.84354 4.340188,-0.0395 c 3.550695,-0.0323 4.37134,-0.002 4.511442,0.16686 0.123031,0.14825 0.160174,1.56558 0.1319,5.03332 l -0.03936,4.82696 -4.438642,0.0395 c -3.485237,0.031 -4.454284,-10e-4 -4.511466,-0.15028 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 45.431006,284.74792 c -0.05466,-0.0547 -0.09938,-2.26012 -0.09938,-4.90103 0,-3.88583 0.03899,-4.83402 0.204404,-4.9713 0.144904,-0.12026 1.457528,-0.15812 4.509354,-0.13006 l 4.304948,0.0396 0.03925,5.03109 0.03925,5.03109 H 49.97961 c -2.447073,0 -4.493945,-0.0447 -4.548603,-0.0994 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 24.199043,279.81621 0.03925,-5.03109 h 4.39755 4.39755 l 0.03925,5.03109 0.03925,5.03109 h -4.476049 -4.47605 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 34.81629,284.66198 c -0.04005,-0.10437 -0.0551,-2.36937 -0.03344,-5.03332 l 0.03938,-4.84354 4.173945,-0.0418 c 2.29567,-0.023 4.325781,-0.005 4.511357,0.0406 l 0.337413,0.0824 -0.03927,4.95321 -0.03927,4.95322 -4.438642,0.0395 c -3.485237,0.031 -4.454284,-0.001 -4.511464,-0.15028 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 13.532311,284.7501 c -0.05586,-0.0558 -0.101556,-2.29688 -0.101556,-4.98005 0,-4.31104 0.02743,-4.88903 0.235796,-4.96898 0.354136,-0.1359 8.455598,-0.10444 8.673178,0.0337 0.146923,0.0933 0.179747,1.20055 0.14907,5.02882 l -0.03934,4.90921 -4.407795,0.0395 c -2.424288,0.0217 -4.453497,-0.006 -4.509353,-0.0621 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5496"
d="m 2.8821028,279.8184 0.039253,-5.03328 4.3401877,-0.0395 c 3.5506945,-0.0323 4.3713395,-0.002 4.5114425,0.16686 0.123032,0.14825 0.160173,1.56558 0.131897,5.03332 l -0.03936,4.82696 -4.5113374,0.0395 -4.5113376,0.0394 z"
style="fill:#f80909;stroke-width:0.14906949" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="M 1.2754035,286.30107 C 1.236011,286.1984 1.2212882,283.2299 1.242686,279.70441 l 0.038905,-6.40999 32.685038,-0.0376 32.685037,-0.0376 -0.03882,6.59666 -0.03882,6.59665 -32.613502,0.0376 c -26.0122639,0.03 -32.6279981,-1.8e-4 -32.6851238,-0.14907 z m 10.6294795,-6.35526 c 0.02828,-3.46774 -0.0089,-4.88507 -0.131897,-5.03332 -0.140103,-0.16881 -0.960748,-0.19917 -4.5114425,-0.16686 l -4.3401877,0.0395 -0.039253,5.03328 -0.039253,5.03328 4.5113376,-0.0394 4.5113376,-0.0395 z m 10.583916,-0.0822 c 0.03068,-3.82827 -0.0021,-4.93555 -0.14907,-5.02882 -0.21758,-0.13811 -8.319042,-0.16957 -8.673178,-0.0337 -0.208368,0.0799 -0.235796,0.65794 -0.235796,4.96898 0,2.68317 0.0457,4.9242 0.101556,4.98005 0.05586,0.0559 2.085065,0.0838 4.509353,0.0621 l 4.407795,-0.0395 z m 10.583845,-0.0473 -0.03925,-5.03109 h -4.39755 -4.39755 l -0.03925,5.03109 -0.03925,5.03109 h 4.47605 4.476049 z m 10.733026,0.003 0.03927,-4.95321 -0.337413,-0.0824 c -0.185576,-0.0453 -2.215687,-0.0636 -4.511357,-0.0406 l -4.173945,0.0418 -0.03938,4.84354 c -0.02167,2.66395 -0.0066,4.92895 0.03344,5.03332 0.05718,0.14901 1.026227,0.18129 4.511464,0.15028 l 4.438642,-0.0395 z m 10.58391,-0.003 -0.03925,-5.03109 -4.304948,-0.0396 c -3.051826,-0.0281 -4.36445,0.01 -4.509354,0.13006 -0.165418,0.13728 -0.204404,1.08547 -0.204404,4.9713 0,2.64091 0.04472,4.84638 0.09938,4.90103 0.05466,0.0547 2.10153,0.0994 4.548603,0.0994 h 4.449222 z m 10.733114,0.1296 c 0.02827,-3.46774 -0.0089,-4.88507 -0.1319,-5.03332 -0.140102,-0.16881 -0.960747,-0.19917 -4.511442,-0.16686 l -4.340188,0.0395 -0.03938,4.84354 c -0.02167,2.66395 -0.0066,4.92895 0.03344,5.03332 0.05718,0.14901 1.026229,0.18129 4.511466,0.15028 l 4.438642,-0.0395 z"
style="fill:#a6a3a3;stroke-width:0.14906949" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="15.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="-16.871229"
inkscape:cy="75.427991"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<path
inkscape:connector-curvature="0"
id="path3768-3"
d="m 2.588407,292.37351 c -0.055931,-0.0559 -0.1016932,-5.3206 -0.1016932,-11.69928 0,-11.31062 0.00727,-11.60147 0.294014,-11.75493 0.4655304,-0.24914 62.6483012,-0.21691 62.9878152,0.0326 0.240014,0.17643 0.255672,1.02118 0.219056,11.81827 l -0.03943,11.62827 -31.629032,0.0384 c -17.395969,0.0211 -31.6747957,-0.007 -31.730727,-0.0633 z"
style="fill:#a4a2a1;stroke-width:0.15200348" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 45.534099,279.52379 c -0.260343,-0.26034 -0.260343,-8.79906 0,-9.0594 0.259894,-0.2599 8.191499,-0.2599 8.451394,0 0.260342,0.26034 0.260342,8.79906 0,9.0594 -0.259895,0.2599 -8.1915,0.2599 -8.451394,0 z"
id="path4791"
inkscape:connector-curvature="0" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 55.870335,279.52379 c -0.260342,-0.26034 -0.260342,-8.79906 0,-9.0594 0.259895,-0.2599 8.1915,-0.2599 8.451395,0 0.260344,0.26034 0.260344,8.79906 0,9.0594 -0.259895,0.2599 -8.1915,0.2599 -8.451395,0 z"
id="path3766-5"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;stroke-width:0.15200348"
d="m 4.1945487,290.97979 c -0.1497002,-0.095 -0.1833171,-1.17865 -0.1520037,-4.89978 l 0.040205,-4.77777 4.2456108,-0.0405 c 3.2952962,-0.0314 4.2729552,0.003 4.3677722,0.152 0.06719,0.10586 0.12321,2.22252 0.12449,4.70371 0.002,3.90054 -0.03001,4.54358 -0.236535,4.75011 -0.205108,0.2051 -0.80119,0.23853 -4.2180971,0.23653 -2.1885786,-10e-4 -4.065728,-0.0572 -4.1714425,-0.12434 z"
id="path4825"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;stroke-width:0.15200348"
d="m 14.530785,290.97979 c -0.1497,-0.095 -0.183317,-1.17865 -0.152003,-4.89978 l 0.04021,-4.77777 4.24561,-0.0405 c 3.295296,-0.0314 4.272955,0.003 4.367773,0.152 0.06719,0.10586 0.12321,2.2592 0.12449,4.78522 0.0022,4.38643 -0.01088,4.59982 -0.291687,4.75011 -0.349405,0.18699 -8.043514,0.21532 -8.334388,0.0307 z"
id="path4823"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;stroke-width:0.15200348"
d="m 24.847613,290.8982 c -0.122871,-0.14805 -0.161212,-1.56531 -0.132616,-4.90211 l 0.04023,-4.69385 4.245611,-0.0405 c 3.295295,-0.0314 4.272955,0.003 4.367773,0.152 0.06719,0.10586 0.123209,2.2592 0.124489,4.78522 0.0021,4.38643 -0.01087,4.59982 -0.291687,4.75011 -0.180999,0.0969 -1.809834,0.15735 -4.237484,0.15735 -3.153706,0 -3.978088,-0.0417 -4.116312,-0.20826 z"
id="path4821"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;fill-opacity:1;stroke-width:0.15200348"
d="m 35.18385,290.8982 c -0.122872,-0.14805 -0.161213,-1.56531 -0.132617,-4.90211 l 0.04023,-4.69385 h 4.3321 4.332099 l 0.04039,4.7121 c 0.03681,4.29506 0.01744,4.72893 -0.219057,4.90211 -0.393501,0.28818 -8.152836,0.2713 -8.393144,-0.0183 z"
id="path4779"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;fill-opacity:1;stroke-width:0.15200348"
d="m 45.606362,290.91646 c -0.236485,-0.17319 -0.255874,-0.60706 -0.219057,-4.90211 l 0.04039,-4.71211 h 4.3321 4.3321 l 0.04039,4.71211 c 0.03681,4.29505 0.01744,4.72892 -0.219057,4.90211 -0.191587,0.1403 -1.277953,0.19 -4.153434,0.19 -2.875481,0 -3.961847,-0.0497 -4.153434,-0.19 z"
id="path4777"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;fill-opacity:1;stroke-width:0.15200348"
d="m 55.942598,290.91646 c -0.236485,-0.17319 -0.255871,-0.60706 -0.219057,-4.90211 l 0.04039,-4.71211 h 4.332099 4.3321 l 0.04039,4.71211 c 0.03682,4.29505 0.01744,4.72892 -0.219056,4.90211 -0.191588,0.1403 -1.277954,0.19 -4.153435,0.19 -2.875481,0 -3.961847,-0.0497 -4.153434,-0.19 z"
id="path4775"
inkscape:connector-curvature="0" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 4.1967529,279.60553 c -0.1460397,-0.0589 -0.1900044,-1.12513 -0.1900044,-4.60784 0,-3.99162 0.028631,-4.54216 0.2404372,-4.62344 0.4246343,-0.16295 7.9664143,-0.10368 8.2817503,0.0651 0.280222,0.14997 0.294014,0.36245 0.294014,4.5297 0,3.19804 -0.04899,4.42134 -0.182404,4.55475 -0.133337,0.13334 -1.268001,0.17918 -4.2180965,0.17041 -2.2196308,-0.007 -4.1211941,-0.0465 -4.2256966,-0.0887 z"
id="path4819"
inkscape:connector-curvature="0" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 14.53299,279.60553 c -0.14604,-0.0589 -0.190005,-1.12513 -0.190005,-4.60784 0,-3.99162 0.02863,-4.54216 0.240437,-4.62344 0.424635,-0.16295 7.966415,-0.10368 8.281751,0.0651 0.280223,0.14997 0.294014,0.36245 0.294014,4.5297 0,3.19804 -0.04899,4.42134 -0.182404,4.55475 -0.133338,0.13334 -1.268001,0.17918 -4.218097,0.17041 -2.219631,-0.007 -4.121194,-0.0465 -4.225696,-0.0887 z"
id="path4817"
inkscape:connector-curvature="0" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 24.869226,279.60553 c -0.268344,-0.10828 -0.275631,-8.87311 -0.0076,-9.14114 0.236942,-0.23694 7.900846,-0.25997 8.339782,-0.0251 0.280226,0.14997 0.294016,0.36246 0.294016,4.52971 0,3.19804 -0.04899,4.42134 -0.182407,4.55475 -0.133336,0.13334 -1.267999,0.17918 -4.218093,0.17041 -2.219632,-0.007 -4.121195,-0.0465 -4.225698,-0.0887 z"
id="path3762-2"
inkscape:connector-curvature="0" />
<path
style="fill:#f60c0c;fill-opacity:1;stroke-width:0.15200348"
d="m 35.205464,279.60553 c -0.268346,-0.10828 -0.275632,-8.87311 -0.0076,-9.14114 0.259895,-0.2599 8.1915,-0.2599 8.451395,0 0.260342,0.26034 0.260342,8.79906 0,9.0594 -0.133339,0.13334 -1.268002,0.17918 -4.218098,0.17041 -2.21963,-0.007 -4.121193,-0.0465 -4.225695,-0.0887 z"
id="path4793"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="16.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="149.5279"
inkscape:cy="32.999857"
inkscape:document-units="mm"
inkscape:current-layer="g3760"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
id="g3760"
transform="matrix(0.26458333,0,0,0.26458333,0.25014905,248.81803)">
<path
style="fill:#a4a2a1;stroke-width:0.57450134"
d="m 7.9803632,163.76207 c -0.2113938,-0.2114 -0.3843524,-20.10938 -0.3843524,-44.21775 0,-42.748803 0.027495,-43.848097 1.1112341,-44.428096 C 10.46673,74.174576 245.48823,74.29641 246.77143,75.239636 c 0.90714,0.666796 0.96632,3.859571 0.82793,44.667474 l -0.14904,43.94935 -119.5428,0.14498 c -65.748543,0.0797 -119.7157629,-0.028 -119.9271568,-0.23937 z"
id="path3768"
inkscape:connector-curvature="0" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="m 14.05082,158.49447 c -0.565796,-0.35914 -0.692852,-4.45475 -0.574502,-18.51887 l 0.151957,-18.05773 16.046403,-0.1529 c 12.454663,-0.11867 16.14975,0.01 16.508116,0.5745 0.253943,0.40007 0.465673,8.40007 0.470511,17.77778 0.0076,14.74219 -0.113417,17.17259 -0.893991,17.95316 -0.775209,0.77521 -3.02812,0.90155 -15.942412,0.894 -8.271793,-0.005 -15.366531,-0.21632 -15.766082,-0.46994 z"
id="path4545" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="M 53.116911,158.49447 C 52.551116,158.13533 52.42406,154.03972 52.54241,139.9756 l 0.151957,-18.05773 16.046402,-0.1529 c 12.454661,-0.11867 16.14975,0.01 16.508118,0.5745 0.253942,0.40007 0.465674,8.5387 0.470511,18.08585 0.0084,16.57863 -0.04113,17.38517 -1.102439,17.95317 -1.320583,0.70675 -30.400682,0.81383 -31.500048,0.11598 z"
id="path4543" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="m 92.109646,158.18608 c -0.464393,-0.55956 -0.609305,-5.91613 -0.501224,-18.52767 l 0.152036,-17.74054 16.046402,-0.1529 c 12.45466,-0.11867 16.14975,0.01 16.50812,0.5745 0.25394,0.40007 0.46567,8.5387 0.47051,18.08585 0.008,16.57863 -0.0411,17.38517 -1.10244,17.95317 -0.68409,0.36611 -6.84032,0.59471 -16.01569,0.59471 -11.919518,0 -15.035291,-0.15764 -15.557714,-0.78712 z"
id="path4541" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="m 53.125243,115.50512 c -0.551961,-0.22272 -0.718127,-4.25245 -0.718127,-17.415468 0,-15.086425 0.108209,-17.167222 0.908739,-17.474414 1.604917,-0.615864 30.109284,-0.391845 31.301104,0.245999 1.05911,0.566817 1.111235,1.369912 1.111235,17.120139 0,12.087104 -0.185156,16.710584 -0.689402,17.214824 -0.503952,0.50395 -4.792444,0.6772 -15.942412,0.64405 -8.389156,-0.025 -15.576168,-0.17575 -15.971137,-0.33513 z"
id="path4537" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="m 14.059151,115.50512 c -0.551961,-0.22272 -0.718127,-4.25245 -0.718127,-17.415468 0,-15.086425 0.10821,-17.167222 0.908739,-17.474414 1.604917,-0.615864 30.109282,-0.391845 31.301105,0.245999 1.059107,0.566817 1.111234,1.369912 1.111234,17.120139 0,12.087104 -0.185156,16.710584 -0.689401,17.214824 -0.503953,0.50395 -4.792445,0.6772 -15.942413,0.64405 -8.389156,-0.025 -15.576167,-0.17575 -15.971137,-0.33513 z"
id="path4539" />
<path
style="fill:#062e5f;stroke-width:0.57450134"
d="m 92.191334,115.50512 c -1.014213,-0.40924 -1.041755,-33.536167 -0.02872,-34.549196 0.895527,-0.895528 29.861466,-0.982541 31.520436,-0.09469 1.05912,0.566817 1.11124,1.369912 1.11124,17.120139 0,12.087107 -0.18516,16.710587 -0.68941,17.214827 -0.50395,0.50395 -4.79244,0.6772 -15.9424,0.64405 -8.389159,-0.025 -15.576171,-0.17575 -15.971141,-0.33513 z"
id="path3762" />
<path
style="fill:#f7b634;stroke-width:0.57450134"
d="m 131.25743,115.50512 c -1.01422,-0.40924 -1.04176,-33.536167 -0.0287,-34.549196 0.98228,-0.982279 30.96,-0.982279 31.94228,0 0.98397,0.983976 0.98397,33.256296 0,34.240276 -0.50396,0.50395 -4.79245,0.6772 -15.94242,0.64405 -8.38915,-0.025 -15.57616,-0.17575 -15.97113,-0.33513 z"
id="path4515" />
<path
style="fill:#f7b634;stroke-width:0.57450134"
d="m 209.36088,115.1962 c -0.98397,-0.98398 -0.98397,-33.2563 0,-34.240276 0.98228,-0.982279 30.96,-0.982279 31.94228,0 0.98398,0.983976 0.98398,33.256296 0,34.240276 -0.98228,0.98228 -30.96,0.98228 -31.94228,0 z"
id="path3766" />
<path
style="fill:#f60c0c;stroke-width:0.57450134"
d="m 131.17574,158.18608 c -0.4644,-0.55956 -0.60931,-5.91613 -0.50123,-18.52767 l 0.15204,-17.74054 h 16.37329 16.37329 l 0.15266,17.80954 c 0.13914,16.23327 0.0659,17.87309 -0.82793,18.52766 -1.48725,1.08917 -30.81387,1.02539 -31.72212,-0.069 z"
id="path4503" />
<path
style="fill:#f60c0c;stroke-width:0.57450134"
d="m 170.56791,158.25508 c -0.8938,-0.65457 -0.96708,-2.29439 -0.82793,-18.52766 l 0.15266,-17.80954 h 16.37329 16.37329 l 0.15266,17.80954 c 0.13914,16.23327 0.0659,17.87309 -0.82793,18.52766 -0.72411,0.5303 -4.83006,0.71813 -15.69802,0.71813 -10.86796,0 -14.97391,-0.18783 -15.69802,-0.71813 z"
id="path4501" />
<path
style="fill:#f60c0c;stroke-width:0.57450134"
d="m 209.634,158.25508 c -0.8938,-0.65457 -0.96707,-2.29439 -0.82793,-18.52766 l 0.15266,-17.80954 h 16.37329 16.37329 l 0.15266,17.80954 c 0.13915,16.23327 0.0659,17.87309 -0.82793,18.52766 -0.72411,0.5303 -4.83006,0.71813 -15.69802,0.71813 -10.86796,0 -14.97391,-0.18783 -15.69802,-0.71813 z"
id="path4499" />
<path
style="fill:#f7b634;stroke-width:0.57450134"
d="m 170.29479,115.1962 c -0.98397,-0.98398 -0.98397,-33.2563 0,-34.240276 0.98228,-0.982279 30.96,-0.982279 31.94228,0 0.98397,0.983976 0.98397,33.256296 0,34.240276 -0.98228,0.98228 -30.96,0.98228 -31.94228,0 z"
id="path4513" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="2-Junior Lieutenant.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,-0.21728494,247.64799)"
inkscape:label="Layer 1"
id="layer1-1">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 165.92291,97.380318 85.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -85.26363,0.14212 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="3-Second_Lieutenant.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.17359836,247.459)"
inkscape:label="Layer 1"
id="layer1-9">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 124.3889,97.272435 3.53401,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 -3.06558,-0.21966 c -0.42164,-16.58271 -0.49956,-33.1651 -0.44537,-49.752735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="4-Lieutenant.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,-0.01538974,248.02597)"
inkscape:label="Layer 1"
id="layer1-1">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 124.3889,97.272435 3.53401,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 -3.06558,-0.21966 c -0.42164,-16.58271 -0.49956,-33.1651 -0.44537,-49.752735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="5-Senior_Lieutenant.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.17359766,247.64799)"
inkscape:label="Layer 1"
id="layer1-3">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 84.388905,97.272435 43.534005,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 -43.065582,-0.21966 c -0.421642,-16.58271 -0.499553,-33.1651 -0.445363,-49.752735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5604"
d="m 124.54407,122.17172 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="6-Captain.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.1735978,247.64799)"
inkscape:label="Layer 1"
id="layer1-9">
<g
id="g5478">
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path5608"
d="m 84.388905,97.272435 43.534005,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 -43.065582,-0.21966 c -0.421642,-16.58271 -0.499553,-33.1651 -0.445363,-49.752735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5604"
d="m 124.54407,122.17172 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="7-Senior_Captain.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.21394269,247.6398)"
inkscape:label="Layer 1"
id="layer1-2">
<g
id="g5478">
<path
sodipodi:nodetypes="cacccccsc"
inkscape:connector-curvature="0"
id="path5608"
d="m 44.834272,146.80642 c -0.148885,-0.38804 -0.359491,-16.70392 -0.433767,-25.05726 -0.07254,-8.15859 -0.0116,-24.476725 -0.0116,-24.476725 l 83.534005,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 c -98.314074,0.11335 -82.849674,0.12433 -83.065582,-0.43841 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5606"
d="m 84.542135,122.35066 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5604"
d="m 124.54407,122.17172 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="8-Major.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.4029308,247.45081)"
inkscape:label="Layer 1"
id="layer1-9">
<g
id="g5478">
<path
sodipodi:nodetypes="cacccccsc"
inkscape:connector-curvature="0"
id="path5608"
d="m 44.834272,146.80642 c -0.148885,-0.38804 -0.359491,-16.70392 -0.433767,-25.05726 -0.07254,-8.15859 -0.0116,-24.476725 -0.0116,-24.476725 l 83.534005,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 c -98.314074,0.11335 -82.849674,0.12433 -83.065582,-0.43841 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5606"
d="m 84.542135,122.35066 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5604"
d="m 124.54407,122.17172 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="128"
viewBox="0 0 67.733332 33.866668"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="9-Lieutenant_Colonel.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="102.89677"
inkscape:cy="139.70413"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="1104"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
transform="matrix(0.26458333,0,0,0.26458333,0.21394297,247.26183)"
inkscape:label="Layer 1"
id="layer1-7">
<g
id="g5478">
<path
sodipodi:nodetypes="cacccccsc"
inkscape:connector-curvature="0"
id="path5608"
d="m 44.834272,146.80642 c -0.148885,-0.38804 -0.359491,-16.70392 -0.433767,-25.05726 -0.07254,-8.15859 -0.0116,-24.476725 -0.0116,-24.476725 l 83.534005,0.107883 123.534,-0.142116 -0.14672,24.932258 -0.14671,24.93225 -123.26363,0.14212 c -98.314074,0.11335 -82.849674,0.12433 -83.065582,-0.43841 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5606"
d="m 84.542135,122.35066 c 0.115945,-14.46905 -0.0081,-18.65404 -0.563412,-19.00653 -0.822351,-0.52201 -31.442049,-0.64091 -32.780516,-0.12729 -0.787535,0.3022 -0.891199,2.48672 -0.891199,18.7804 0,10.14114 0.172726,18.61115 0.383835,18.82226 0.21111,0.21111 7.880561,0.31675 17.043222,0.23476 l 16.659385,-0.14908 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5604"
d="m 124.54407,122.17172 -0.14835,-19.01516 H 107.77506 91.154398 l -0.148347,19.01516 -0.148346,19.01516 h 16.917355 16.91735 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5602"
d="m 165.10984,122.18432 0.14843,-18.72082 -1.27526,-0.31154 c -0.70139,-0.17134 -8.37425,-0.24041 -17.0508,-0.15349 l -15.77554,0.15805 -0.14884,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.1264,19.02357 0.21611,0.56318 3.87865,0.68519 17.0512,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5600"
d="m 205.11202,122.17172 -0.14834,-19.01516 -16.27067,-0.14962 c -11.53446,-0.10606 -16.49556,0.037 -17.04323,0.49155 -0.6252,0.51887 -0.77255,4.1026 -0.77255,18.78917 0,9.9814 0.16903,18.31703 0.37561,18.52361 0.20658,0.20659 7.94279,0.37561 17.19157,0.37561 h 16.81596 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5482"
d="m 245.67812,122.66153 c 0.10686,-13.1064 -0.0335,-18.46326 -0.49852,-19.02355 -0.52952,-0.63804 -3.63117,-0.75276 -17.05112,-0.63067 l -16.40386,0.14925 -0.14883,18.30632 c -0.0819,10.06847 -0.025,18.62908 0.12639,19.02357 0.21612,0.56318 3.87866,0.68519 17.05121,0.56799 l 16.77597,-0.14926 z"
style="fill:#a6a3a3;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5494"
d="m 50.690843,140.8195 c -0.211109,-0.21111 -0.383835,-8.68112 -0.383835,-18.82226 0,-16.29368 0.103664,-18.4782 0.891199,-18.7804 1.338467,-0.51362 31.958165,-0.39472 32.780516,0.12729 0.555299,0.35249 0.679357,4.53748 0.563412,19.00653 l -0.148685,18.55452 -16.659385,0.14908 c -9.162661,0.082 -16.832112,-0.0237 -17.043222,-0.23476 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5492"
d="m 91.006051,122.17172 0.148347,-19.01516 h 16.620662 16.62066 l 0.14835,19.01516 0.14834,19.01516 H 107.77506 90.857705 Z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5490"
d="m 131.13423,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.1264,-19.02357 l 0.14884,-18.30632 15.77554,-0.15805 c 8.67655,-0.0869 16.34941,-0.0178 17.0508,0.15349 l 1.27526,0.31154 -0.14843,18.72082 -0.14844,18.72082 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.0512,-0.56799 z"
style="fill:#f80909;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5488"
d="m 171.25284,140.81127 c -0.20658,-0.20658 -0.37561,-8.54221 -0.37561,-18.52361 0,-14.68657 0.14735,-18.2703 0.77255,-18.78917 0.54767,-0.45452 5.50877,-0.59761 17.04323,-0.49155 l 16.27067,0.14962 0.14834,19.01516 0.14835,19.01516 h -16.81596 c -9.24878,0 -16.98499,-0.16902 -17.19157,-0.37561 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
<path
inkscape:connector-curvature="0"
id="path5480"
d="m 211.70218,140.48645 c -0.15138,-0.39449 -0.20826,-8.9551 -0.12639,-19.02357 l 0.14883,-18.30632 16.40386,-0.14925 c 13.41995,-0.12209 16.5216,-0.007 17.05112,0.63067 0.465,0.56029 0.60538,5.91715 0.49852,19.02355 l -0.14876,18.24365 -16.77597,0.14926 c -13.17255,0.1172 -16.83509,-0.005 -17.05121,-0.56799 z"
style="fill:#062e5f;fill-opacity:1;stroke-width:0.56341225" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

408
templates/contrib.html Normal file
View File

@ -0,0 +1,408 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>MISP live dashboard</title>
<!-- Bootstrap Core CSS -->
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
<!-- Custom CSS -->
<link href="{{ url_for('static', filename='css/sb-admin-2.css') }}" rel="stylesheet">
<!-- LeafLet -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/leaflet.css') }}">
<script src="{{ url_for('static', filename='js/leaflet.js') }}"></script>
<!-- jQuery -->
<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
<!-- jQuery flot -->
<script src="{{ url_for('static', filename='js/jquery.flot.js') }}"></script>
<script src="{{ url_for('static', filename='js/jquery.flot.pie.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/jquery.flot.resize.js') }}"></script>
<script src="{{ url_for('static', filename='js/jquery.flot.time.js') }}"></script>
<!-- Bootstrap Core JavaScript -->
<script src="{{ url_for('static', filename='js/bootstrap.js') }}"></script>
<script src="{{ url_for('static', filename='js/bootstrap3-typeahead.min.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/font-awesome.min.css') }}" rel="text/css">
<!-- JVectorMap -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/jquery-jvectormap-2.0.3.css') }}" type="text/css" media="screen"/>
<script src="{{ url_for('static', filename='js/jquery-jvectormap-2.0.3.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/jquery-jvectormap-world-mill.js') }}"></script>
<!-- Jquery UI -->
<link href="{{ url_for('static', filename='css/jquery-ui.min.css') }}" rel="stylesheet" type="text/css" />
<script src="{{ url_for('static', filename='js/jquery-ui.min.js') }}"></script>
<!-- dataTable -->
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.css') }}" rel="stylesheet" type="text/css" />
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/ranking.css') }}">
</head>
<body>
<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
<div class="modal-dialog modal-lg" style="width: 1500px;">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-body">
<div class="row">
<div class="col-lg-4">
<h4>Monthly rank generation:</h4>
<p>Monthly ranks are generated by the formula: <pre>Rank = floor(Log(<it>points</it>, {{ rankMultiplier }}))</pre></p>
<ul>
{% for text in additional_help_text %}
<li>{{ text }}</li>
{% endfor %}
</ul>
<h4>Points awarded by category:</h4>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Category</th>
<th>Point(s) awarded</th>
</tr>
</thead>
<tbody>
{% for categ in categ_list_str %}
<tr>
<td>{{ categ }}</td>
<td>{{ categ_list_points[loop.index0] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="col-lg-8">
<div class="row">
<div class="col-lg-3">
<h4>Organisation total points: </h4>
</div>
<div class="col-lg-3">
<h4 id='orgTotNumOfPoint'></h4>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<h4>Contribution ranking:</h4>
</div>
<div class="col-lg-6">
<table class="table table-bordered">
<tbody>
<tr>
<td class="success">Current rank</td>
<td class="warning">Requirement satisfied</td>
<td class="danger">Requirement not satisfied</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Contribution rank</th>
<th>Title</th>
<th>Total points requirement</th>
<th>Contribution requirement</th>
</tr>
</thead>
<tbody id='bodyTablerankingModal'>
{% for item in org_rank_list %}
<tr data-rank={{ loop.index }}>
<td style='padding: 0px; text-align: right;'><img height='35px' width='70px' style="margin-right: 20px;" src="{{ url_for('static', filename='pics/rankingMISPOrg/1.svg')[:-5]}}{{ item[0] }}.svg" type='image/svg' style="margin: auto;"</img></td>
<td>{{ item[1] }}</td>
<td>{{ item[2] }}</td>
<td>{{ item[3] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="col-lg-6">
<ul>
{% for text in org_rank_additional_text %}
<li>{{ text }}</li>
{% endfor %}
</ul>
</div>
<div class="col-lg-6">
<table>
<tbody>
{% for item in org_honor_badge_title_list %}
<tr style="height: 85px">
<td>
<div id="divBadge_{{ loop.index }}" class="circleBadge">
<img height='64px' width='64px' style="margin-top: 5px;" src="{{ url_for('static', filename='pics/MISPHonorableIcons/1.svg')[:-5]}}{{ item[0] }}.svg" type='image/svg' style="margin: auto;"</img>
</div>
</td>
<td style="padding-left: 15px;">{{ item[1] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div id="wrapper">
<!-- Navigation -->
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0; padding-left: 15px;">
<div class="navbar-header">
<img src="{{ url_for('static', filename='pics/MISP.png') }}" alt="MISP" style="float: left; height: 40px; margin-top: 5px;"><a class="navbar-brand dropdown-toggle" data-toggle="dropdown" href="#">MISP Contributors
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ url_for('index') }}">MISP Live Dashboard</a></li>
<li><a href="{{ url_for('geo') }}">MISP Geolocalisation</a></li>
<li><a href="{{ url_for('contrib') }}">MISP Contributors</a></li>
</ul>
<div id="ledsHolder" style="float: left; height: 50px;">
<div class='leftSepa textTopHeader'>
<label class="checkbox-inline" style="font-weight: bold; position: relative; top: -30%; left:10%">
<input id="reloadCheckbox" type="checkbox" style="top: -2px;" checked>Auto reload
</label>
<label id='labelRemainingTime' style="font-weight: bold; font-size: medium; position: relative; left: -38%; bottom: -30%; color: #f0ad4e;"></label>
</div>
</div>
<div id="ledsHolder" style="float: right; height: 50px;">
<div class='leftSepa textTopHeader'>
<strong>Organisation name:</strong>
</div>
<div class='textTopHeader' style="padding-top: 9px;">
<input type="text" id="orgName" data-provide="typeahead" size="20" style="margin-bottom: 5px;">
</div>
<button type="button" class="questionBadgeDiv" data-toggle="modal" data-target="#myModal"><i class="fa fa-question-circle questionBadgeText"></i></button>
<button id="btnCurrRank" class='btn btn-default popOverBtn' data-container='body' data-toggle='popover' style="display: none; margin-left: 20px;" onclick="showOnlyOrg()">
<object id='orgContributionRank' height=32 width=64 class="centerInBtn"></object>
<strong id="orgText" class="centerInBtn"></strong>
<div id="orgRankDiv" class='textTopHeader' style="padding-top: 0px; position: relative; width: 40px; height: 40px;"></div>
<div class='' style="float: left; padding: 10px;">
<div class="progress" style=''>
<div id="progressBarDiv" class="progress-bar progress-bar-striped" role="progressbar" style="width:0%">
</div>
</div>
</div>
<div id="orgNextRankDiv" class='textTopHeader' style="padding-top: 0px; position: relative; width: 40px; height: 40px;"></div>
</button>
<div class='leftSepa textTopHeader'>
<span class="label label-primary">
<strong style="">Points to overtake</strong>
<strong style="font-size: medium;" id='orgToOverTake'></strong>
<strong style="">: </strong>
<strong style="font-size: large;" id='pntsToOvertakeNext'></strong>
</span>
</div>
</div>
</div>
<!-- /.navbar-header -->
</nav>
<!-- Page Content -->
<div id="page-wrapper" style="margin: 0px; padding: 0px;">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div style="height: 10px;"></div>
<div class="col-lg-8">
<div class="col-lg-6">
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<i class="fa fa-asterisk " style="margin-right: 5px; color: #f0ad4e;"></i><b>Contributor ranking (monthly)</b>
</div>
<div id="panelRanking" class="panel-body" style="height: 100%;">
<div class="table-responsive">
<table id="topContribTable" class="table table-hover table-striped">
<thead>
<tr>
<th>Points</th>
<th>Cur. rank</th>
<th>Org. rank</th>
<th></th>
<th></th>
<th>Organisation</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<!-- /.panel-body -->
</div><!-- /.panel -->
</div>
<div class="col-lg-6">
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<i class="glyphicon glyphicon-fire " style="margin-right: 5px; color: #d9534f;"></i><b>Last contributors</b>
</div>
<div id="panellast" class="panel-body" style="height: 100%;">
<div class="table-responsive">
<table id="lastTable" class="table table-hover table-striped">
<thead>
<tr>
<th>Date</th>
<th>Points</th>
<th>Cur. rank</th>
<th>Org. rank</th>
<th></th>
<th></th>
<th>Organisation</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<!-- /.panel-body -->
</div><!-- /.panel -->
</div>
<div class="col-lg-12">
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<i class="fa fa-th-list " style="margin-right: 5px; color: #f0ad4e;"></i><b>Contributors and categories (total)</b>
</div>
<div id="panelRanking" class="panel-body" style="height: 100%;">
<div class="table-responsive">
<table id="categTable" class="table table-hover table-striped">
<thead>
<tr>
<th>Points</th>
<th>Cur. rank</th>
<th>Org. rank</th>
<th></th>
<th></th>
<th>Organisation</th>
{% for categ in categ_list_str %}
<th>{{ categ }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<!-- /.panel-body -->
</div><!-- /.panel -->
</div>
</div><!-- /.col-lg-8 -->
<div class="col-lg-4">
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<i class="fa fa-star" style="margin-right: 5px; color: #f0ad4e;"></i><b>Hall Of Fame (previous month)</b>
</div>
<div id="panelRanking" class="panel-body" style="height: 100%;">
<div class="table-responsive">
<table id="fameTable" class="table table-hover table-striped" style="margin-bottom: 0px;">
<thead>
<tr>
<th>Points</th>
<th>Prev. rank</th>
<th>Org. rank</th>
<th></th>
<th></th>
<th>Organisation</th>
</tr>
</thead>
<tbody id=fameTableBody>
</tbody>
</table>
</div>
</div>
<!-- /.panel-body -->
</div><!-- /.panel -->
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<i class="fa fa-line-chart" style="margin-right: 5px; color: #f0ad4e;"></i><b>Top 5 Contributor overtime</b>
</div>
<div id="panelRanking" class="panel-body" style="height: 100%;">
<div id="divTop5Overtime" style="height: 32vh"></div>
</div>
<!-- /.panel-body -->
</div><!-- /.panel -->
</div><!-- /.col-lg-4 -->
</div><!-- /.col-lg-12 -->
</div><!-- /.row -->
</div> <!-- /.container-fluid -->
</div>
<!-- /#page-wrapper -->
</div>
<!-- /#wrapper -->
<!-- Index -->
<script>
/* URL */
var url_getTopContributor = "{{ url_for('getTopContributor') }}";
var url_getFameContributor = "{{ url_for('getFameContributor') }}";
var url_getCategPerContrib = "{{ url_for('getCategPerContrib') }}";
var url_getTop5Overtime = "{{ url_for('getTop5Overtime') }}";
var url_getOrgOvertime = "{{ url_for('getOrgOvertime') }}";
var url_getLastContributor = "{{ url_for('getLastContributors') }}";
var url_eventStreamLastContributor = "{{ url_for('getLastContributor') }}";
var url_getAllOrg = "{{ url_for('getAllOrg') }}";
var url_getOrgRank = "{{ url_for('getOrgRank') }}";
var url_getContributionOrgStatus = "{{ url_for('getContributionOrgStatus') }}";
var url_getHonorBadges = "{{ url_for('getHonorBadges') }}";
var url_baseRankMonthlyLogo = "{{ url_for('static', filename='pics/rankingMISPMonthly/1.svg') }}";
url_baseRankMonthlyLogo = url_baseRankMonthlyLogo.substring(0, url_baseRankMonthlyLogo.length-5);
var url_baseOrgRankLogo = "{{ url_for('static', filename='pics/rankingMISPOrg/1.svg') }}";
url_baseOrgRankLogo = url_baseOrgRankLogo.substring(0, url_baseOrgRankLogo.length-5);
var url_baseHonorLogo = "{{ url_for('static', filename='pics/MISPHonorableIcons/1.svg') }}";
url_baseHonorLogo = url_baseHonorLogo.substring(0, url_baseHonorLogo.length-5);
/* DATA FROM CONF */
var currOrg = "{{ currOrg }}";
var min_between_reload = {{ min_between_reload }};
var rankMultiplier = {{ rankMultiplier }};
var categ_list = JSON.parse('{{ categ_list|safe }}');
var org_rank_obj = JSON.parse('{{ org_rank_json|safe }}');
var org_honor_badge_title = JSON.parse('{{ org_honor_badge_title|safe }}');
var numberOfBadges = {{ org_honor_badge_title_list|length }};
</script>
<script src="{{ url_for('static', filename='js/contrib.js') }}"></script>
</body>
</html>

View File

@ -58,7 +58,7 @@
}
.textTopHeader {
height: 50px;
height: 50px;
text-align: center;
margin-left: 8px;
float: left;
@ -90,6 +90,7 @@ small {
<ul class="dropdown-menu">
<li><a href="{{ url_for('index') }}">MISP Live Dashboard</a></li>
<li><a href="{{ url_for('geo') }}">MISP Geolocalisation</a></li>
<li><a href="{{ url_for('contrib') }}">MISP Contributors</a></li>
</ul>
<div id="ledsHolder" style="float: right; height: 50px;">
@ -184,7 +185,7 @@ small {
</div><!-- /.col-lg-6 -->
<div class="col-lg-6">
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<b id="worldMapHeader">Hit map </b>
@ -198,7 +199,7 @@ small {
<div class="panel panel-default" style="height: 100%;">
<div class="panel-heading bg-info" style="font-weight: bold; padding: 5px 10px;">
<b id="radiusHeader" style="font-size: 18px;">Geospatial information</b>
<strong class='leftSepa textTopHeader' style="float: none; padding: 11px;">Dates:
<strong class='leftSepa textTopHeader' style="float: none; padding: 11px;">Dates:
<input type="text" id="datepickerRadiusFrom" size="20" style="">
<input type="text" id="datepickerRadiusTo" size="20" style="">
</strong>
@ -225,7 +226,7 @@ small {
<!-- /#wrapper -->
<!-- Index -->
<script>
<script>
/* URL */
var urlTopCoord = "{{ url_for('getTopCoord') }}";
var urlHitMap = "{{ url_for('getHitMap') }}";

View File

@ -107,7 +107,7 @@ table {
}
.textTopHeader {
height: 50px;
height: 50px;
text-align: center;
margin-left: 8px;
float: left;
@ -132,6 +132,7 @@ small {
<ul class="dropdown-menu">
<li><a href="{{ url_for('index') }}">MISP Live Dashboard</a></li>
<li><a href="{{ url_for('geo') }}">MISP Geolocalisation</a></li>
<li><a href="{{ url_for('contrib') }}">MISP Contributors</a></li>
</ul>
<div id="ledsHolder" style="float: right; height: 50px;"></div>
@ -146,7 +147,7 @@ small {
<div class="row">
<div class="col-lg-12">
<div class="col-lg-{{ size_dashboard_width[0] }}">
<div id="panelOpenMap" class="panel panel-default" style="margin-top: 15px; height: {{ pannelSize[0] }}vh;">
<div class="panel-heading bg-info" style="font-weight: bold;">
<b><a id="textMap1" href="#panelbody">No map </a></b>
@ -191,7 +192,7 @@ small {
<!-- /.col-lg-6 -->
<!-- /.col-lg-6 -->
<div class="col-lg-{{ size_dashboard_width[1] }}">
<div class="panel panel-default" style="margin-top: 15px; height: {{ pannelSize[2] }}vh;">
<div id="panelbody" class="panel-body" style="height: 100%;">
<div id="feedDiv2" style="width:100%; height: 100%; position: relative;"></div>
@ -231,7 +232,7 @@ small {
<div class="row">
<div class="col-lg-12">
</div>
<!-- /.col-lg-12 -->
</div>
@ -247,7 +248,7 @@ small {
<!-- /#wrapper -->
<!-- Index -->
<script>
<script>
/* URL */
var urlForLogs = "{{ url_for('logs') }}";
var urlForHead = "{{ url_for('getLogHead') }}";

31
util.py Normal file
View File

@ -0,0 +1,31 @@
import datetime, time
ONE_DAY = 60*60*24
def getMonthSpan(date):
ds = datetime.datetime(date.year, date.month, 1)
dyear = 1 if ds.month+1 > 12 else 0
dmonth = -12 if ds.month+1 > 12 else 0
de = datetime.datetime(ds.year + dyear, ds.month+1 + dmonth, 1)
delta = de - ds
to_return = []
for i in range(delta.days):
to_return.append(ds + datetime.timedelta(days=i))
return to_return
def getXPrevDaysSpan(date, days):
de = date
ds = de - datetime.timedelta(days=days)
delta = de - ds
to_return = []
for i in range(delta.days+1):
to_return.append(de - datetime.timedelta(days=i))
return to_return
def getDateStrFormat(date):
return str(date.year)+str(date.month).zfill(2)+str(date.day).zfill(2)
def getTimestamp(date):
return time.mktime(date.timetuple())

View File

@ -14,16 +14,30 @@ import sys
import json
import geoip2.database
import util
import contributor_helper
configfile = os.path.join(os.environ['DASH_CONFIG'], 'config.cfg')
cfg = configparser.ConfigParser()
cfg.read(configfile)
ZMQ_URL = cfg.get('RedisLog', 'zmq_url')
ONE_DAY = 60*60*24
ZMQ_URL = cfg.get('RedisGlobal', 'zmq_url')
CHANNEL = cfg.get('RedisLog', 'channel')
CHANNEL_LASTCONTRIB = cfg.get('RedisLog', 'channelLastContributor')
CHANNELDISP = cfg.get('RedisMap', 'channelDisp')
CHANNEL_PROC = cfg.get('RedisMap', 'channelProc')
PATH_TO_DB = cfg.get('RedisMap', 'pathMaxMindDB')
DEFAULT_PNTS_REWARD = cfg.get('CONTRIB', 'default_pnts_per_contribution')
categories_in_datatable = json.loads(cfg.get('CONTRIB', 'categories_in_datatable'))
DICO_PNTS_REWARD = {}
temp = json.loads(cfg.get('CONTRIB', 'pnts_per_contribution'))
for categ, pnts in temp:
DICO_PNTS_REWARD[categ] = pnts
MAX_NUMBER_OF_LAST_CONTRIBUTOR = cfg.getint('CONTRIB', 'max_number_of_last_contributor')
serv_log = redis.StrictRedis(
host=cfg.get('RedisGlobal', 'host'),
port=cfg.getint('RedisGlobal', 'port'),
@ -37,26 +51,26 @@ serv_redis_db = redis.StrictRedis(
port=cfg.getint('RedisGlobal', 'port'),
db=cfg.getint('RedisDB', 'db'))
contributor_helper = contributor_helper.Contributor_helper(serv_redis_db, cfg)
reader = geoip2.database.Reader(PATH_TO_DB)
def publish_log(zmq_name, name, content):
def publish_log(zmq_name, name, content, channel=CHANNEL):
to_send = { 'name': name, 'log': json.dumps(content), 'zmqName': zmq_name }
serv_log.publish(CHANNEL, json.dumps(to_send))
serv_log.publish(channel, json.dumps(to_send))
def push_to_redis_zset(keyCateg, toAdd):
def push_to_redis_zset(keyCateg, toAdd, endSubkey="", count=1):
now = datetime.datetime.now()
today_str = str(now.year)+str(now.month)+str(now.day)
keyname = "{}:{}".format(keyCateg, today_str)
serv_redis_db.zincrby(keyname, toAdd)
today_str = util.getDateStrFormat(now)
keyname = "{}:{}{}".format(keyCateg, today_str, endSubkey)
serv_redis_db.zincrby(keyname, toAdd, count)
def push_to_redis_geo(keyCateg, lon, lat, content):
now = datetime.datetime.now()
today_str = str(now.year)+str(now.month)+str(now.day)
today_str = util.getDateStrFormat(now)
keyname = "{}:{}".format(keyCateg, today_str)
serv_redis_db.geoadd(keyname, lon, lat, content)
def ip_to_coord(ip):
resp = reader.city(ip)
lat = float(resp.location.latitude)
@ -72,13 +86,16 @@ def getCoordAndPublish(zmq_name, supposed_ip, categ):
rep = ip_to_coord(supposed_ip)
coord = rep['coord']
coord_dic = {'lat': coord['lat'], 'lon': coord['lon']}
ordDic = OrderedDict()
ordDic = OrderedDict() #keep fields with the same layout in redis
ordDic['lat'] = coord_dic['lat']
ordDic['lon'] = coord_dic['lon']
coord_list = [coord['lat'], coord['lon']]
push_to_redis_zset('GEO_COORD', json.dumps(ordDic))
push_to_redis_zset('GEO_COUNTRY', rep['full_rep'].country.iso_code)
push_to_redis_geo('GEO_RAD', coord['lon'], coord['lat'], json.dumps({ 'categ': categ, 'value': supposed_ip }))
ordDic = OrderedDict() #keep fields with the same layout in redis
ordDic['categ'] = categ
ordDic['value'] = supposed_ip
push_to_redis_geo('GEO_RAD', coord['lon'], coord['lat'], json.dumps(ordDic))
to_send = {
"coord": coord,
"categ": categ,
@ -109,6 +126,40 @@ def getFields(obj, fields):
except KeyError as e:
return ""
def noSpaceLower(text):
return text.lower().replace(' ', '_')
#pntMultiplier if one contribution rewards more than others. (e.g. shighting may gives more points than editing)
def handleContribution(zmq_name, org, contribType, categ, action, pntMultiplier=1, eventTime=datetime.datetime.now(), isLabeled=False):
if action in ['edit', None]:
pass
#return #not a contribution?
now = datetime.datetime.now()
nowSec = int(time.time())
pnts_to_add = DEFAULT_PNTS_REWARD
# is a valid contribution
if categ is not None:
try:
pnts_to_add = DICO_PNTS_REWARD[noSpaceLower(categ)]
except KeyError:
pnts_to_add = DEFAULT_PNTS_REWARD
pnts_to_add *= pntMultiplier
push_to_redis_zset('CONTRIB_DAY', org, count=pnts_to_add)
#CONTRIB_CATEG retain the contribution per category, not the point earned in this categ
push_to_redis_zset('CONTRIB_CATEG', org, count=1, endSubkey=':'+noSpaceLower(categ))
publish_log(zmq_name, 'CONTRIBUTION', {'org': org, 'categ': categ, 'action': action, 'epoch': nowSec }, channel=CHANNEL_LASTCONTRIB)
serv_redis_db.sadd('CONTRIB_ALL_ORG', org)
serv_redis_db.zadd('CONTRIB_LAST:'+util.getDateStrFormat(now), nowSec, org)
serv_redis_db.expire('CONTRIB_LAST:'+util.getDateStrFormat(now), ONE_DAY) #expire after 1 day
contributor_helper.updateOrgContributionRank(org, pnts_to_add, action, contribType, eventTime=datetime.datetime.now(), isLabeled=isLabeled)
##############
## HANDLERS ##
@ -127,10 +178,37 @@ def handler_keepalive(zmq_name, jsonevent):
to_push = [ jsonevent['uptime'] ]
publish_log(zmq_name, 'Keepalive', to_push)
def handler_sighting(zmq_name, jsonsight):
print('sending' ,'sighting')
def handler_conversation(zmq_name, jsonevent):
try: #only consider POST, not THREAD
jsonpost = jsonevent['Post']
except KeyError:
return
print('sending' ,'Post')
org = jsonpost['org_name']
categ = None
action = 'add'
handleContribution(zmq_name, org,
'Discussion',
None,
action,
isLabeled=False)
def handler_object(zmq_name, jsondata):
print('obj')
return
def handler_sighting(zmq_name, jsondata):
print('sending' ,'sighting')
jsonsight = jsondata['Sighting']
org = jsonsight['Event']['Orgc']['name']
categ = jsonsight['Attribute']['category']
try:
action = jsondata['action']
except KeyError:
action = None
handleContribution(zmq_name, org, 'Sighting', categ, action, pntMultiplier=2)
handler_attribute(zmq_name, jsonsight, hasAlreadyBeenContributed=True)
def handler_event(zmq_name, jsonobj):
#fields: threat_level_id, id, info
jsonevent = jsonobj['Event']
@ -145,7 +223,27 @@ def handler_event(zmq_name, jsonobj):
else:
handler_attribute(zmq_name, attributes)
def handler_attribute(zmq_name, jsonobj):
try:
action = jsonobj['action']
except KeyError:
action = None
try:
eventLabeled = len(jsonobj['EventTag']) > 0
except KeyError:
eventLabeled = False
try:
org = jsonobj['Orgc']['name']
except KeyError:
org = None
if org is not None:
handleContribution(zmq_name, org,
'Event',
None,
action,
isLabeled=eventLabeled)
def handler_attribute(zmq_name, jsonobj, hasAlreadyBeenContributed=False):
# check if jsonattr is an attribute object
if 'Attribute' in jsonobj:
jsonattr = jsonobj['Attribute']
@ -165,14 +263,33 @@ def handler_attribute(zmq_name, jsonobj):
if jsonattr['category'] == "Network activity":
getCoordAndPublish(zmq_name, jsonattr['value'], jsonattr['category'])
if not hasAlreadyBeenContributed:
try:
eventLabeled = len(jsonattr['Tag']) > 0
except KeyError:
eventLabeled = False
try:
action = jsonobj['action']
except KeyError:
action = None
handleContribution(zmq_name, jsonobj['Event']['Orgc']['name'],
'Attribute',
jsonattr['category'],
action,
isLabeled=eventLabeled)
# Push to log
publish_log(zmq_name, 'Attribute', to_push)
###############
## MAIN LOOP ##
###############
def process_log(zmq_name, event):
event = event.decode('utf8')
topic, eventdata = event.split(' ', maxsplit=1)
jsonevent = json.loads(eventdata)
print(event)
dico_action[topic](zmq_name, jsonevent)
@ -194,10 +311,11 @@ dico_action = {
"misp_json_event": handler_event,
"misp_json_self": handler_keepalive,
"misp_json_attribute": handler_attribute,
"misp_json_object": handler_object,
"misp_json_sighting": handler_sighting,
"misp_json_organisation": handler_log,
"misp_json_user": handler_log,
"misp_json_conversation": handler_log
"misp_json_conversation": handler_conversation
}
@ -210,4 +328,3 @@ if __name__ == "__main__":
main(args.zmqname)
reader.close()