Commit 9130b88f by Иван Кубота

WIP. Video quality Calculator is mostly done

parent 74b3b6c7
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.vscode
/.idea
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
module.exports = {
src: './src',
entry: {js: 'main.jsx', html: 'index.html'},
public: './public',
scss: {
shared: `@import '/main.scss';`
},
build: './build'
};
{
"name": "lamur",
"version": "0.1.0",
"main": "bin/index.js",
"dependencies": {
"@babel/plugin-transform-runtime": "^7.8.3",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"node-async-router": "^0.0.2",
"node-sass": "^4.13.1",
"observable-sequence": "^0.0.4",
"recursive-watch": "^1.1.4",
"terser": "^4.6.3",
"yargs": "^15.1.0"
},
"scripts": {
"start": "node index.js",
"test": "mocha",
"build": "node build.js",
"serve-production": "node buildServe.js",
"webpack": "webpack"
},
"devDependencies": {
"@babel/core": "^7.8.3",
"@babel/plugin-transform-modules-amd": "^7.8.3",
"@babel/plugin-transform-react-jsx": "^7.8.3",
"@babel/plugin-transform-typescript": "^7.8.3",
"@babel/preset-env": "*",
"@babel/template": "^7.8.3",
"babel-plugin-module-resolver": "^4.0.0",
"babel-preset-es2015": "*",
"chai": "^4.2.0",
"compression": "^1.7.4",
"gulp": "^4.0.2",
"gulp-babel": "*",
"gulp-plumber": "*",
"mocha": "^7.0.1",
"browserify": "*",
"core-js": "^3.6.4"
}
}
var sqrt = Math.sqrt;
var abs = Math.abs || function(n){return n>0 ? n: -n}
var Point = function( x, y ){
if(arguments.length === 0){
x = 0;
y = 0;
}
if(x instanceof Point || x.hasOwnProperty('x')) {
y = x.y;
x = x.x;
}
this.x = x;
this.y = y;
};
Point.prototype = {
add: null, addClone: null,
sub: null, subClone: null,
mul: null, mulClone: null,
div: null, divClone: null,
mod: null, modClone: null,
passable: true,
borrow: function(from) {
this.x = from.x;
this.y = from.y;
return this;
},
join: function(symbol) {
return this.x+symbol+this.y;
},
set: function(x, y) {
this.x = x;
this.y = y;
return this;
},
middle: function(point) {
return new Point((this.x+point.x)/2, (this.y+point.y)/2)
},
clone: function(){
return new Point( this.x, this.y );
},
distance: function( obj ){
var tmp;
return sqrt( (tmp = this.x - obj.x) * tmp + (tmp = this.y - obj.y) * tmp );
},
distancePow2: function( obj ){
var tmp;
return (tmp = this.x - obj.x) * tmp + (tmp = this.y - obj.y) * tmp;
},
manhattan: function( obj ){
return abs(this.x - obj.x) + abs(this.y - obj.y);
},
magnitude: function() {
return sqrt(this.x*this.x+this.y*this.y);
},
rotate: function(angleRAD) {
var angle = Math.atan2(this.y, this.x) + angleRAD;
var length = this.magnitude();
return new Point(Math.cos(angle)*length,Math.sin(angle)*length)
},
getAngle: function(p) {
if(p)
return Math.atan2(p.y - this.y, p.x - this.x);
else
return Math.atan2(this.y, this.x);
},
toString: function(fixed) {
fixed === void 0 && (fixed = 3);
return 'x:'+this.x.toFixed(fixed)+' y:'+this.y.toFixed(fixed);
},
normalize: function() {
return this.div(this.magnitude())
},
projection: function(to) {
var angle = this.getAngle()-to.getAngle();
return to.clone().normalize().mul(this.magnitude()*Math.cos(angle));
},
lerp: function(to, amount) {
return new Point(this.x+(to.x-this.x)*amount,this.y+(to.y-this.y)*amount)
},
clamp: function(n) {
return new Point((n/2%1)+(this.x|0), (n/2%1)+(this.y|0));
}
};
Point.prototype.getter = Point.prototype.clone;
[
{
name: 'add',
sign: '+'
},
{
name: 'sub',
sign: '-'
},
{
name: 'mul',
sign: '*'
},
{
name: 'div',
sign: '/'
},
{
name: 'mod',
sign: '%'
}
].forEach(function( el ){
var sign = el.sign;
Point.prototype[ el.name ] = Function( 'objOrX, y', [
'if( y === void 0 ){',
' if( typeof objOrX === \'number\' ){',
' this.x '+ sign +'= objOrX;',
' this.y '+ sign +'= objOrX;',
' }else{',
' this.x '+ sign +'= objOrX.x;',
' this.y '+ sign +'= objOrX.y;',
' }',
'}else{',
' this.x '+ sign +'= objOrX;',
' this.y '+ sign +'= y;',
'}',
'return this;'
].join('\n') );
Point.prototype[ el.name +'Clone'] = Function( 'objOrX, y',
'return this.clone().'+el.name+'(objOrX, y);'
)
});
export {Point};
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<base href="/"/>
<title>Lamur-DB</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script>$ENV$</script>
<script src="core/Path.js"></script>
<script src="core/Require.js"></script>
<script src="core/LivestReloading.js"></script>
<script src="core/Observer.js"></script>
<script src="core/DOM.js"></script>
<script src="core/Localizer.js"></script>
<script src="core/Random.Seeded.js"></script>
<script src="core/data/store/Store.js"></script>
<script src="core/data/Transform.js"></script>
<script src="core/Route.js"></script>
$COMMIT$
<style>
.slider-background {
background: #104361;
height: 2px;
position: absolute;
left: 8px;
top: 7px;
right: 8px;
}
.slider {
position: relative;
height: 32px;
}
.slider-start {
position: absolute;
left:0;
}
.slider-start:before {
content: '';
height: 6px;
top: 5px;
left: 5px;
position: absolute;
background: #104361;
width: 6px;
border-radius: 50%;
z-index: 2;
}
.slider-end {
position: absolute;
right:0;
}
.slider-end:before {
content: '';
height: 6px;
top: 5px;
right: 5px;
position: absolute;
background: #104361;
width: 6px;
border-radius: 50%;
z-index: 2;
}
.slider-end__label {
position: absolute;
text-align: center;
left: 0;
font-family: Tahoma;
top: -3px;
}
.slider-start__label {
position: absolute;
text-align: center;
right: 4px;
font-family: Tahoma;
top: -3px;
}
.slider-drag {
width: 12px;
height: 12px;
margin-left: 2px;
top: 2px;
border: 2px solid #104361;
box-sizing: border-box;
cursor: pointer;
position: absolute;
z-index: 1;
border-radius: 50%;
background: #fff;
}
.grhm {
width: 50%;
left:25%;
position: relative;
}
.slider-zone {
position: absolute;
left: 8px;
right: 8px;
height: 8px;
top: 4px;
}
.slider-hover-val {
position: absolute;
top: -28px;
transform: translate(-40%);
font-family: Tahoma;
}
</style>
</head>
<body>
BLOG
<script>
define('0', [
'2D/Point.js',
'cmp/Slider/Slider.jsx',
'cmp/Checkbox/Checkbox.jsx',
'cmp/Radio/Radio.jsx',
'cmp/List/List.jsx'
], function(
{Point}, {Slider}, {Checkbox}, {Radio}, {List}){
var s = window.s = new Store( {
val: 33,
from: -10,
to: 100,
bool: false,
bool2: true,
ku: {
list: [
1, 2, 3, 4, 5, 6, 13
],
kuk: {
l: [
{title: 'name'},
{title: 'name2'},
{title: 'name3'},
{title: 'name4'},
]
}
}
} );
var Input = function( cfg ){
var dom = D.h( 'input', { cls: "field__input", attr: { type: 'number' } } );
if( cfg.bind ){
cfg.bind.sub( function( val ){
dom.value = val;
} );
dom.addEventListener( 'input', function(){
cfg.bind.set( dom.value );
} )
}
return dom;
};
var val = s.bind( 'val' ), to = s.bind( 'to' );
val = new Store.Value.Number( 33 ), to = new Store.Value.Number( 333 );
D.div( { renderTo: document.body, class: 'grhm' }, 'aaa',
//Input({bind: s.bind('val')}),
D.div( {},
new Array( 5 ).join( '.' ).split( '' ).map( () => {
var group = new Store.Value.String( 'gr3' );
console.log( 123 );
return [
window.sl1 = new Slider( {
value: val, from: -10, to: to, step: 0.01,
afterInit: function(){
//console.log(this.value)
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl2 = new Slider( {
value: to, from: -10, to: 300, step: 0.01,
afterInit: function(){
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl2 = new Slider( {
value: to, from: -10, to: 300, step: 0.01,
afterInit: function(){
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl3 = new Checkbox( {
value: s.bind( 'bool' )
} ),
window.sl4 = new Checkbox( {
value: s.bind( 'bool2' )
} ),
new Array( 10 ).join( '.' ).split( '' ).map( function( a, i ){
return [ new Radio( {
value: 'gr' + i,
group: group
} ), 'gr' + i + ' ' ]
} ),
new List( {
items: s.bind( 'ku.list' )
}, ( item, index, first, last ) => {
return D.div( {}, index, ' ', item.get(),' ',
(_)=>{first.hook(val=>_(val?'First': 'NotFirst'))}, ' | ',
(_)=>{last.hook(val=>_(val?'Last': 'NotLast'))}
)
} ),
new List( {
items: s.bind( 'ku.kuk.l' )
}, ( item ) => {
console.log(item);
return D.div( {}, item.val('title'))
} )
]
} )
) );
});
</script>
</body>
</html>
import {Component} from 'cmp/Component.jsx';
import { Radio } from "cmp/Radio/Radio.jsx";
var Checkbox = new Component({
ctor: function(cfg) {
Object.assign(this, cfg);
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: {type: Boolean, default: false}
},
createDOM: function() {
var val = this.value,
el = this.dom = this.inputEl = D.h('input', {
attr: {type: 'checkbox'},
cls: 'picker-button__field',
onchange: function() {
val.set(el.checked);
}
});
this.afterDOM && this.afterDOM();
},
initBinding: function() {
var _self = this;
this.sub([this.value], function (val) {
console.log(val)
_self.inputEl.checked = !!val;
});
}
});
Checkbox.prototype.name = 'checkbox';
export { Checkbox };
\ No newline at end of file
const slice = [].slice;
const Component = function(cfg) {
var original = cfg;
var _ctor = function(cfg, children){
if(!(this instanceof _ctor)){
return new _ctor(cfg, children);
}
this.store = new Store();
this._apply(cfg);
arguments.length > 1 && this._children.call(this, slice.call(arguments, 1));
this.__un = new D.Unsubscribe();
original.ctor && original.ctor.apply(this);
};
_ctor.prototype = Object.assign(Object.create(Component.prototype), cfg);
_ctor.constructor = _ctor;
return _ctor;
};
Component.prototype = {
prop: {},
_children: function(children) {
this.children = children;
},
_apply: function(cfg) {
var prop = this.prop;
for(var key in cfg){
var val = cfg[key];
if(key in prop){
if(val instanceof Store.StoreBinding || val instanceof Store.HookPrototype){
this[key] = val;
}else{
this[key] = new Store.Value[prop[key].type.name](val);
}
}else{
this[key] = val;
}
}
for(key in prop){
if(!(key in cfg)){
var property = prop[key];
if(!property.optional){
this[ key ] = new Store.Value[ property.type.name ]();
if(property.default){
this[ key ].set( property.default );
}
}
}
}
},
'~destroy': function() {
var pointer = this.dom.parentNode;
if(!pointer){
pointer = this.dom;
}
var allHooked = [].slice.call(pointer.querySelectorAll('[data-hooked]'));
for( var i = 0, _i = allHooked.length; i < _i; i++ ){
var un = allHooked[ i ].__un;
if(!un)
continue;
var uns = allHooked[ i ].__un;
for( var j = 0, _j = uns.length; j < _j; j++ ){
var unSubscribe = uns[ j ];
unSubscribe();
}
delete allHooked[ i ].__un;
}
if(this.dom.parentNode){
pointer.removeChild( this.dom );
}
this.dom = void 0;
this.__un.un();
for(var key in this)
this.hasOwnProperty(key) && delete this[key];
},
sub: function() {
var un = this.store.sub.apply(this.store, arguments);
this.__un.add(un);
}
};
var Property = function(type) {
this.name = type;
};
Property.prototype = {
set: function(val) {
return val;
},
get: function(val) {
return val;
},
compare: function(val1, val2) {
return val1 === val2;
}
};
Component.Property = {
Any: new Property('Any')
};
export { Component };
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
var x = 0;
var List = new Component({
ctor: function(){
this.lastBound = this.dom = document.createTextNode('');
this.items = this.items.array();
this.els = [];
this.initEls();
this.bindEvents();
console.log(this.dom);
console.log(window.w = this.items)
},
bindEvents: function() {
var els = this.els,
_self = this;
this.items.on('add', function(item, after, before, pos) {
var count = _self.items.length;
var wrapped = _self.createItem(item, pos, count);
if(wrapped.isLast.get()){
els[els.length-1].isLast.set(false);
els.push(wrapped);
D.insertBefore(wrapped.el, _self.lastBound);
}else{
var where = _self.lastBound;
// IF NEXT ITEM EL\S IS EMPTY
for(var p = pos, _p = els.length; p < _p; p++){
var wrappedItem = els[p];
if(wrappedItem.el && wrappedItem.el.length){
where = wrappedItem.el[0];
break;
}
}
els.splice(pos, 0, wrapped);
D.insertBefore(wrapped.el, where);
}
if(pos === 0){
if(els.length>1){
els[ 1 ].isFirst.set( false );
}
}
for( var i = 0, _i = els.length; i < _i; i++ ){
var el = els[ i ];
el.index.set(i);
}
});
this.items.on('remove', function(item,before,after,pos) {
var subEl;
var item = _self.els[pos],
els = item.el,
parent;
if(!els || !els.length){
return;
}
parent = els[0].parentNode;
var isInDOM = D.isInDOM(els[0]);
while((subEl = els.pop())){
isInDOM && D._recursiveCmpCall(parent, subEl, 'beforeRemoveFromDOM');
parent.removeChild(subEl);
isInDOM && D._recursiveCmpCall(parent, subEl, 'afterRemoveFromDOM');
}
_self.els.splice(pos, 1);
for( var i = 0, _i = _self.els.length; i < _i; i++ ){
var el = _self.els[ i ];
el.index.set(i);
}
if(_self.els.length>0){
_self.els[0].isFirst.set(true);
_self.els[_i - 1].isLast.set(true);
}
});
},
createItem: function(item, i, _i) {
var index = new Store.Value.Integer(i),
isFirst = new Store.Value.Boolean(i === 0),
isLast = new Store.Value.Boolean(i === _i-1),
storeItem = new Store(item),
data = {isFirst: isFirst, isLast: isLast, index: index, item: storeItem},
fragment = [],
children = this.children;
storeItem.setParent(this.items, void 0, item);
for( var j = 0, _j = children.length; j < _j; j++ ){
var child = children[ j ],
el = child.call(this, storeItem, index, isFirst, isLast, this);
fragment.push(el);
}
data.el = fragment;
return data;
},
prop: {
items: {type: Array}
},
initEls: function(a,b) {
var items = this.items.get(),
fragment = document.createDocumentFragment();
var arr = [];
for( var i = 0, _i = items.length; i < _i; i++ ){
var item = items[ i ];
var wrapped = this.createItem(item, i, _i);
this.els.push(wrapped);
//D.appendChild(fragment, wrapped.el)
arr.push(wrapped.el);
}
//this.dom = arr;
//fragment.appendChild(this.dom);
arr.push(this.dom);
this.dom = arr;//fragment;
//.parentNode.insertBefore(fragment, this.dom);
//this.dom.parentNode.replaceChild(fragment, this.dom);
}
});
export { List };
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
import { List } from "cmp/List/List.jsx";
var PlainSelect = new Component( {
ctor: function(){
var vals = this.values.get()
.split('\n')
.map(a=>a.trim())
.filter(String),
_self = this;
this.values.set(vals.map(function(val) {
var item = {},
selected = false;
if(val[0] === '>'){
val = val.substr(1);
selected = true;
}
var tokens = val.split(':');
if(tokens.length === 1){
tokens.push( tokens[ 0 ] );
}
item.id = tokens[0].trim();
item.text = tokens.slice(1).join(':').trim();
if(selected){
_self.value.set( item.id );
}
return item;
}));
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: { type: Component.Property.Any, default: false },
values: { type: Component.Property.Any, default: '' },
map: { type: Function, default: false }
},
createDOM: function() {
this.dom = <select>
{
this.values.get().map(item=>
D.h('OPTION', {value: item.id}, item.text)
)
}
</select>;
},
initBinding: function() {
var _self = this;
this.value.sub(function (val) {
_self.dom.value = val;
});
_self.dom.addEventListener('change', function () {
_self.value.set(_self.dom.value);
});
}
});
export {PlainSelect};
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
var Radio = new Component({
ctor: function() {
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: {type: Component.Property.Any, default: false},
group: {type: Component.Property.Any, default: false}
},
createDOM: function() {
var val = this.value,
group = this.group,
el = this.dom = this.inputEl = D.h('input', {
attr: {type: 'radio'},
cls: 'picker-button__field',
onchange: function() {
if(el.checked){
group.set(val.get())
}
}
});
this.afterDOM && this.afterDOM();
},
initBinding: function() {
var _self = this;
this.sub([this.value, this.group], function (val, group) {
_self.inputEl.checked = val === group;
});
}
});
Radio.prototype.name = 'radio';
export { Radio };
\ No newline at end of file
import {Point} from '2D/Point.js';
import {Component} from 'cmp/Component.jsx';
var Slider = new Component({
ctor: function(cfg) {
Object.assign(this, cfg);
this.createDOM();
this.initBinding();
this.initEvents();
this.afterInit && this.afterInit();
},
prop: {
from: {type: Number},
to: {type: Number},
value: {type: Number, default: 0},
step: {type: Number, optional: true},
},
createDOM: function() {
this.dom = D.div({cls: 'slider'},
D.div({cls: 'slider-background'}),
this.zoneEl = D.div({cls: 'slider-zone'}),
D.div({cls: 'slider-start'},
D.div({cls: 'slider-start__label'}, T.toFixed(this.from,0) ),
),
D.div({cls: 'slider-end'},
D.div({cls: 'slider-end__label'}, T.toFixed(this.to, 0) )
),
this.dragEl = D.div({cls: 'slider-drag', style: {left: '0px'}})
);
this._updateUI = this._updateUI.bind(this);
this.afterDOM && this.afterDOM();
},
initEvents: function() {
var _self = this;
D.mouse.down(this.dom, function(e) {
var pos = new Point(e.clientX, e.clientY);
_self.getBound();
_self.calculateValue(pos);
_self.updateUI();
var update = D.AnimationFrame(function(pos) {
_self.calculateValue(pos);
_self.updateUI();
});
var un = D.mouse.move(document, function(e) {
e.preventDefault();
e.stopPropagation();
pos.x = e.clientX;
pos.y = e.clientY;
update(pos);
}, true);
D.overlay.show();
//un.add( D.mouse.up(_self.dom, un) );
un.add(function() {
D.overlay.hide();
});
un.add( D.mouse.up(window, un) );
});
},
getBound: function() {
var bound = this.zoneEl.getBoundingClientRect();
this.bound = {
left: bound.left,
top: bound.top,
height: bound.height,
width: bound.width
};
},
calculateValue: function(pos) {
var bound = this.bound;
var val = Math.min(Math.max(0, pos.x-bound.left), bound.width);
this.setValue(this.from.get()+(val/bound.width*(this.delta)));
},
afterAddToDOM: function() {
this.getBound();
this.updateUI();
},
bound: null,
_updateRequested: false,
_updateUI: function() {
this._updateRequested = false;
this.dragEl.style.left = (this.value.get()-this.from.get())/(this.delta)*this.bound.width+'px';
},
updateUI: function() {
if(this.bound){
if(!this._updateRequested){
this._updateRequested = true;
requestAnimationFrame(this._updateUI)
}
}
},
initBinding: function() {
var _self = this;
this.sub([this.value, this.from, this.to], function (val, from, to) {
_self.delta = to - from;
_self.setValue(val);
_self.updateUI();
});
},
lastValue: null,
setValue: function(val, silent) {
var inVal = val;
val = Math.min(this.to.get(), Math.max(this.from.get(), val));
if('step' in this){
var step = this.step.get();
val = Math.round(val/step)*step;
}
if(val !== this.lastValue || inVal !== val){
this.lastValue = val;
if(!silent) this.value.set(val);
}
}
});
export { Slider };
\ No newline at end of file
const Table = function(cfg){
Object.assign(this, cfg);
if(this.childrenEl && this.dom){
D.appendChild(this.dom, this.childrenEl);
}
if(this.childrenEl && !this.dom){
this.dom = this.childrenEl.parentNode;
if(!this.dom){
this.dom = this.childrenEl;
}
}
const children = this.childrenEl = this.childrenEl || D.div({
cls: 'cmp-table__children'
});
this.dom = this.dom || D.div({
cls: D.cls('cmp-table', cfg.cls)
}, children);
this.currentSlice = [];
this.childrenEls = [];
if(this.items instanceof Store.StoreBinding){
this.items.sub((items)=>{
this.items = items;
this.updateChildren();
});
}
if(this.action){
let actions = this.action;
delete this.action;
this.getActionDelegate((name, obj)=>{
if(name in actions){
actions[name].call(this, obj.data, obj)
}else{
console.warn('CMP.TABLE:error → action `'+name+'` is not specified!', obj);
}
});
}
setTimeout(()=>this.updateChildren(),0);
};
let regExpsCache = {};
Table.prototype = {
key: 'id',
currentSlice: [],
childrenEls: [],
sort: [{name: 'asc'}],
childrenEl: null,
filterText: '',
filterFn: () => true,
afterFilter: ()=>true,
emptyTpl: ()=><div class={'empty-table'}/>,
buildFilterRegExp: function(text) {
return new RegExp(text.replace(/[\[\]\(\)\?\*\.\+]/g,'').replace(/\s+/g,'|'), 'ig');
},
filter: function(text) {
this.filterText = text;
this.filterRegExp = this.buildFilterRegExp(text);
},
fetch: function() {
const sortFn = typeof this.sort === 'function';
const field = sortFn ? null :Object.keys(this.sort[0])[0]
this.currentSlice = (this.items || [])
.filter(item=>this.filterFn.call(item, this.filterText, this))
.sort(sortFn?this.sort:(a,b)=>a[field] > b[field] ? 1 : a[field] < b[field] ? -1 : 0)
.map(data=>({data, dom: null}));
this.afterFilter(this.getSelected());
},
updateChildren: function() {
this.fetch();
D.removeChildren(this.childrenEl);
this.currentSlice.forEach((item) => {
D.appendChild(this.childrenEl, item.dom = this.itemTpl(item.data, this, item));
});
if(this.currentSlice.length === 0){
D.appendChild(this.childrenEl, this.emptyTpl(this.items));
}
},
updateChild: function(item) {
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
removeChild: function(item, full) {
if(item.dom){
item.dom.parentNode.removeChild(item.dom);
item.dom = null;
this.currentSlice = this.currentSlice.filter(i=>!(i.data===item.data));
if(full)
this.items = this.items.filter(i=>!(i===item.data));
}
},
removeChildByData: function(data, full) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
this.removeChild(item, full);
},
updateChildByData: function(data) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
getSelected: function() {
return this.currentSlice.filter(i=>!i.hidden).map(i=>i.data)
},
highlight: function(text, filterText) {
if(!filterText)
return text;
let reg = regExpsCache[filterText] || (regExpsCache[filterText] = this.buildFilterRegExp(filterText))
const txts = [];
return D.join(text.replace(reg, function(match) {
txts.push(match);
return '|||||'
}).split('|||||'), (i)=>D.span({cls: 'highlighted'}, txts[i]))
},
preventAction: true,
getActionDelegate: function(fn) {
var me = this;
return this.action || (this.action = function(e) {
const [type, val] = this.getAttribute('data-action').split(':');
const match = me.currentSlice.filter(({data})=>data[me.key]+'' === val+'');
if(!match || !match.length){
debugger
return;
}
if(fn){
fn(type, match[0]);
}else{
if( type === 'hide' ){
if( match.length ){
match[ 0 ].hidden = true;
me.updateChild( match[ 0 ] )
me.afterFilter( me.getSelected() );
}
}
if( type === 'toggle' ){
if( match.length ){
match[ 0 ].full = !match[ 0 ].full;
me.updateChild( match[ 0 ] )
}
}
}
me.preventAction && e.stopPropagation();
});
},
};
export default Table;
export { Table };
\ No newline at end of file
import '../labeledField/labeledFormField.scss';
import './dropdownField.scss';
import '../searchField/searchField.scss';
import IconSearch from '/svg/ic_search.svg';
import { Table } from "view/cmp/table/Table.jsx";
import { textFilter } from "text/String.TextFilter.jsx";
import Input from "view/cmp/field/Input.jsx";
const noHighlight = {
highlight: (a)=>a
};
const DropdownField = D.declare('view.cmp.DropdownField', function(cfg, children){
this.textTpl = this.valueItemTpl = (item,me)=>me?me.highlight(item.name,dropStore.get('filterText')):item.name;
this.valueTpl = items=>D.join(items.map((item, i)=>this.valueItemTpl(item,noHighlight)), ', ');
Object.assign(this, cfg);
let isOpen = this.isOpen = new Store.Value.Boolean(false);
if(!cfg.bind)
cfg.bind = {sub: ()=>{console.error('BIND FOR DROPDOWN IS NOT SPECIFIED')}, set: ()=>{}, get: ()=>{}}
let table;
let dropStore = new Store({
filterText: ''
});
let action = this.action = {
CHANGE_JOB: function(set, item) {
if(cfg.singlevalue === true){
cfg.bind.set(void 0);
cfg.bind.set(item);
isOpen.set(false);
table.updateChildren();
}else{
let vals = cfg.bind.get();
if( set ){
vals = vals.concat( item )
}else{
vals = vals.filter( v => v.name !== item.name );
}
cfg.bind.set(vals);
if(cfg.multivalue === false){
isOpen.set(false);
table.removeChildByData(item, false);
dropStore.set('filterText', '');
}
}
},
CLEAR: function () {
dropStore.set('filterText', '');
},
BLUR: function () {
minput && minput.blur();
}
};
let listen = (e) => {
let target = e.target;
do{
if(target === this.dom){
return;
}
}while((target = target.parentNode));
isOpen.set(false);
}, minput;
isOpen.hook((v)=>{
if(v === true){
document.addEventListener('click', listen);
}else{
document.removeEventListener('click', listen);
}
});
this.dom = <div class="form-field">
<div class="form-field__label">
<span class="form-field__label-text">{cfg.label}</span>
<div class={D.cls('dropdown-field', {
'dropdown-field--opened': isOpen
})} >
{cfg.input
? <div className="form-field__wrapper">
{minput = <Input type="text" class="form-field__input form-field__input--selection" bind={dropStore.bind('filterText')}
placeholder={cfg.placeholder} on={{
focus: ()=>isOpen.set(true),
keydown:(e)=>{
if(e.key === 'Enter'){
cfg.onEnter && cfg.onEnter(dropStore.get('filterText'));
}
}
}}/>}
<span className="form-field__indicator"/>
</div>
: <button class="dropdown-field__toggler" on={{ click: () => isOpen.toggle() }}>
<span class={D.cls(
"dropdown-field__placeholder", {
"dropdown-field__placeholder--filled": _=>cfg.bind.sub(val=>_(!!(cfg.multivalue ? val && val.length : val && val.name)))
} )}>{_ => {
cfg.bind.sub( val => {
if( val && ( cfg.multivalue ? val.length : val && val.name ) ){
if( cfg.multivalue ){
_( this.valueTpl( val, table ) )
}else{
_( this.valueItemTpl( val ) )
}
}else{
_( cfg.placeholder );
}
} );
}}</span>
</button>
}
<div class="dropdown-field__tooltip">
{children}
{cfg.filterBox
? <div class="dropdown-field__search">
<div class="dropdown-field__search-field">
<label className="search-field">
<IconSearch width={"20"} height={"20"}/>
<Input type="search" class="search-field__input" bind={dropStore.bind('filterText')} placeholder={cfg.placeholder || 'Выбрать из списка'}/>
</label>
{/*<div class="dropdown-field__search-clear">*/}
{/*<IconClose width={"20"} height={"20"}/>*/}
{/*</div>*/}
</div>
<button class="dropdown-field__clear" type={"button"} onClick={()=>dropStore.set('filterText','')}>Сбросить</button>
</div>
: null}
{table = this.table = new Table({
sorters: [{id: 'title', type: String}],
sort: [{title: 'asc'}],
filterFn: function(text, me) {
if(cfg.filterFn){
if( !cfg.filterFn.call( this, text, me ) ){
return false;
}
}
if(cfg.singlevalue){
return this.name !== cfg.bind.get().name;
}
return (cfg.multivalue ?(text ? textFilter(this.name.toLowerCase(), text) : true):
cfg.bind.get().filter( i => i.name === this.name ).length === 0 && (text ? textFilter(this.name.toLowerCase(), text):true))
},
childrenEl: <ul className={cfg.multivalue?"dropdown-field__list":"form-field__selection-list"}/>,
itemTpl: (item, me, bonus)=>{
if(cfg.multivalue){
return <li>
<label className="picker-button picker-button--admin picker-button--multiple">
<input
checked={cfg.bind.get().filter( i => i.name === item.name ).length === 1}
type="checkbox" className="picker-button__field" onChange={
( e ) =>
action.CHANGE_JOB( e.currentTarget.checked, item )
}/>
<span className="picker-button__indicator"/>
<span className="picker-button__desc">{this.textTpl.call( me, item, me )}</span>
</label>
</li>;
}else{
return <li onClick={
( e ) =>
action.CHANGE_JOB( true, item )
}>
<span className="picker-button__desc">{this.textTpl.call( me, item, me )}</span>
</li>;
}
},
emptyTpl: cfg.emptyTpl || ((items)=><li>Нет должностей</li>),
items: []
})}
</div>
</div>
</div>
</div>;
cfg.items && cfg.items.sub(items=>{
table.items = items || [];
table.updateChildren();
});
cfg.bind.sub( Store.debounce(val => {
console.log('items changed',val)
table.updateChildren();
}, 100));
dropStore.sub('filterText', Store.debounce(function(text) {
table.filterText = (text+'').trim().toLowerCase();
table.updateChildren();
}, 200));
});
export default DropdownField;
export {DropdownField};
.dropdown-field {
position: relative;
width: 100%;
min-width: 330px;
}
.dropdown-field__toggler {
@include btn-reset;
position: relative;
box-sizing: border-box;
padding: 14px 25px;
width: 100%;
height: 50px;
text-align: left;
font-weight: 500;
font-size: 17px;
line-height: 20px;
color: $text-main;
background-color: #F6F6F6;
border: 1px solid rgba(208, 209, 209, 0.8);
border-radius: 2px;
transition: all 0.3s ease;
&::after {
content: "";
position: absolute;
top: 22px;
right: 22px;
width: 0;
height: 0;
border-style: solid;
border-width: 6px 5px 0 5px;
border-color: $gray-dark transparent transparent transparent;
pointer-events: none;
transition: all 0.3s ease;
}
&:hover {
background-color: #F2F2F2;
border-color: #D7D8D7;
}
//&:focus,
.dropdown-field--opened & {
outline: none;
background-color: $bg-main;
border-color: $accent-main;
border-radius: 2px 2px 0 0;
box-shadow: 0px 3px 10px #CFF3D9;
&::after {
transform: scale(1,-1);
border-color: $accent-main transparent transparent transparent;
}
& + .dropdown-field__tooltip {
max-height: none;
opacity: 1;
pointer-events: auto;
}
}
}
.dropdown-field__placeholder {
display: inline-block;
vertical-align: top;
max-width: calc(100% - 20px);
color: rgba(166, 166, 166, 0.5);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.dropdown-field__placeholder--filled {
color: $text-main;
}
.dropdown-field__tooltip {
position: absolute;
top: 100%;
left: 0;
right: 0;
padding: 20px;
max-height: 0;
background-color: $bg-main;
border-radius: 0 0 2px 2px;
box-shadow: 0px 3px 10px #ADADAD;
z-index: 1;
opacity: 0;
pointer-events: none;
overflow: hidden;
transition: opacity 0.3s ease;
.dropdown-field--opened & {
max-height: none;
opacity: 1;
pointer-events: auto;
}
/*
.dropdown-field__toggler:focus-within + & {
max-height: none;
opacity: 1;
pointer-events: auto;
}*/
/*
&:focus-within {
max-height: none;
opacity: 1;
pointer-events: auto;
}*/
}
.dropdown-field__search {
position: relative;
display: flex;
flex-direction: column;
}
.dropdown-field__search-field {
position: relative;
display: block;
}
.dropdown-field__search-clear {
@include hover;
position: absolute;
top: 0;
right: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
cursor: pointer;
}
.dropdown-field__clear {
@include btn-reset;
align-self: flex-end;
margin: 5px 0;
font-weight: 500;
font-size: 15px;
line-height: 30px;
color: $accent-dark;
transition: all 0.3s ease;
&:hover,
&:focus,
&:active {
color: $accent-medium;
outline: none;
}
&:disabled {
color: $gray-medium;
}
}
.dropdown-field__list {
@include list-reset;
max-height: 250px;
overflow-y: auto;
}
.dropdown-field__button {
padding-top: 10px;
button {
min-width: 136px;
}
}
This diff is collapsed. Click to expand it.
async function subscribe() {
if(window.nolive)
return;
let response = {};
try{
response = await fetch( "/[live]" );
}catch( e ){
}
if (response.status === 502) {
} else if (response.status !== 200) {
// An error - let's show it
//debugger
//showMessage(response.statusText);
// Reconnect in one second
} else {
// Get and show the message
try{
let message = await response.text();
let data = JSON.parse( message ),
should = data.filter(live =>
[...document.scripts]
.map((a)=>a.src.replace(location.protocol+'//'+location.host,''))
.indexOf(live.file)>-1
).forEach(a=>{
try{
eval( a.content )
console.log('Reloaded: '+a.file);
}catch(e){
console.error(e)
}
});
}catch(e){
console.error(e)
}
//showMessage(message);
// Call subscribe() again to get the next message
}
setTimeout(subscribe, 1000);
}
setTimeout(subscribe, 10000);
\ No newline at end of file
(function(w) {
var L = function() {
},
l = L.prototype = {
_plural: function(n) {
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)
},
plural: function(num) {
return arguments[l._plural(num)+1];
}
};
window.Localizer = window.L = new L;
})(window);
var Observable = (function(){
'use strict';
var ArraySlice = [].slice;
var Observable = function(){
this._clearListeners();
};
Observable.prototype = {
on: function( k, v ){
( this._listeners[ k ] || ( this._listeners[ k ] = [] ) ).push( v );
var _self = this;
return function ReleaseObservable(){
_self.un( k, v );
};
},
un: function( k, v ){
var list = this._listeners[ k ];
if( list ){
var id = list.indexOf( v );
if( id > -1 ){
list.splice( id, 1 );
}
}
},
fire: function( k ){
console.log(k)
var listeners = this._listeners[ k ],
listener;
if( listeners === void 0 )
return;
for( var i = 0, _i = listeners.length; i < _i; i++ ){
listener = listeners[ i ];
if( listener ){
listener.apply( this, ArraySlice.call( arguments, 1 ) );
}
}
},
once: function( k, v ){
var _self = this,
wrap = function(){
v.apply( this, arguments );
_self.un( k, wrap )
};
this.on( k, wrap );
},
_clearListeners: function(){
this._listeners = {};
}
};
return Observable;
})();
typeof module === 'object' && (module.exports = Observable);
\ No newline at end of file
// It is mostly node.js posix path.
window.__Path = (function(){
var splitPathRe =
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
var Path = {
dirname: function( path ){
var result = Path.posixSplitPath( path ),
root = result[ 0 ],
dir = result[ 1 ];
if( !root && !dir ){
// No dirname whatsoever
return '.';
}
if( dir ){
// It has a dirname, strip trailing slash
dir = dir.substr( 0, dir.length - 1 );
}
return root + dir;
},
trim: function(result) {
if( result[ 0 ] === '/' )
return result.substr( 1 );
return result;
},
resolve: function(){
var resolvedPath = '',
resolvedAbsolute = false;
for( var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i-- ){
var path = ( i >= 0 ) ? arguments[ i ] : '/';
// Skip empty and invalid entries
if( typeof path !== 'string' ){
throw new TypeError( 'Arguments to path.resolve must be strings' );
}else if( !path ){
continue;
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path[ 0 ] === '/';
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = Path.normalizeArray( resolvedPath.split( '/' ),
!resolvedAbsolute ).join( '/' );
return Path.trim(( ( resolvedAbsolute ? '/' : '' ) + resolvedPath ) || '.');
},
normalizeArray: function( parts, allowAboveRoot ){
var res = [];
for( var i = 0; i < parts.length; i++ ){
var p = parts[ i ];
// ignore empty parts
if( !p || p === '.' )
continue;
if( p === '..' ){
if( res.length && res[ res.length - 1 ] !== '..' ){
res.pop();
}else if( allowAboveRoot ){
res.push( '..' );
}
}else{
res.push( p );
}
}
return res;
},
join: function(){
var path = '';
for( var i = 0; i < arguments.length; i++ ){
var segment = arguments[ i ];
if( typeof segment !== 'string' ){
throw new TypeError( 'Arguments to path.join must be strings' );
}
if( segment ){
if( !path ){
path += segment;
}else{
path += '/' + segment;
}
}
}
return Path.normalize( path );
},
basename: function( path, ext ){
var f = Path.posixSplitPath( path )[ 2 ];
// TODO: make this comparison case-insensitive on windows?
if( ext && f.substr( -1 * ext.length ) === ext ){
f = f.substr( 0, f.length - ext.length );
}
return f;
},
posixSplitPath: function( filename ){
return splitPathRe.exec( filename ).slice( 1 );
},
normalize: function( path ){
var isAbsolute = Path.isAbsolute( path ),
trailingSlash = path && path[ path.length - 1 ] === '/';
// Normalize the path
path = Path.normalizeArray( path.split( '/' ), !isAbsolute ).join( '/' );
if( !path && !isAbsolute ){
path = '.';
}
if( path && trailingSlash ){
path += '/';
}
return ( isAbsolute ? '/' : '' ) + path;
},
// posix version
isAbsolute: function( path ){
return path.charAt( 0 ) === '/';
}
};
return Path;
})();
\ No newline at end of file
function mulberry32(a) {
var out = function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
};
out.getSeed = function() {
return a;
};
out.setSeed = function(A) {
a = A;
};
out.setStringSeed = function(str) {
str = str.replace(/[^0-9a-z]/g,'').substr(0,12);
if(str.length === 0)str = '1';
a = parseInt(str,36);
};
out.getStringSeed = function() {
return a.toString(36);
};
return out;
}
Math.random.seeded = mulberry32(Math.floor(Math.random()*4294967296));
\ No newline at end of file
//
let self = window;
self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(JSON.parse(r.responseText))},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||"get",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+","+t:t}),t(a())},r.onerror=s,r.withCredentials="include"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});
var ansispan = function (str) {
Object.keys(ansispan.foregroundColors).forEach(function (ansi) {
var span = '<span style="color: ' + ansispan.foregroundColors[ansi] + '">';
str = str.replace(
new RegExp(String.fromCharCode(33)+'\\[' + ansi + 'm', 'g'),
span
).replace(
new RegExp( String.fromCharCode( 33 ) +'\\[0;' + ansi + 'm', 'g'),
span
);
});
str = str.replace(/\033\[1m/g, '<b>').replace(/\033\[22m/g, '</b>');
str = str.replace(/\033\[3m/g, '<i>').replace(/\033\[23m/g, '</i>');
str = str.replace(/\033\[m/g, '</span>');
str = str.replace(/\033\[0m/g, '</span>');
return str.replace(/\033\[39m/g, '</span>')
.replace(/\[90m/g, ' ');
};
ansispan.foregroundColors = {
'30': 'black',
'31': 'red',
'32': 'green',
'33': 'yellow',
'34': 'blue',
'35': 'purple',
'36': 'cyan',
'37': 'white'
};
;(function(Path){
'use strict';
var log = console.log;
/*var log = function() {
console.log.apply(console, ['Define'].concat([].slice.call(arguments)));
};*/
if(window.env.LAMUR_ENV !== 'PRODUCTION'){
window.onerror = function( message, source, lineno, colno, error ){
fetch( source )
.then( function( resp ){
return resp.text();
} )
.then( function( data ){
if( data.match( /^(unknown|Error|error)/ ) !== null ){
var erDiv = D.div( { cls: 'error-block', renderTo: document.body },
D.input( {
attr: { type: 'button', value: 'Hide' }, on: {
click: function(){
erDiv.parentNode.removeChild( erDiv );
}
}
} ) )
var dataEl = D.div();
erDiv.appendChild( dataEl )
dataEl.innerHTML = ansispan( data )
}
} )
.catch();
var urla = source.substr( document.location.origin.length );
urla[ 0 ] === '/' && ( urla = urla.substr( 1 ) );
if( define.waiting[ urla ] ){
define( urla, [], function(){
} );
console.error( 'LOADER: сделаем вид что ', '`' + source.substr( document.location.origin.length ) + '`', 'загрузилось, но вообще — нет. Его поджидали:', define.waiting[ urla ] );
console.error( source, message, error );
}
};
}
var head = document.getElementsByTagName( 'head' )[ 0 ];
window.allLoaded = {css: {}, js: {}, jsList: [], cssList: []}
var cssLoader = function( fileName ){
var link = document.createElement( 'link' );
link.setAttribute( 'rel', 'stylesheet' );
link.setAttribute( 'type', 'text/css' );
link.setAttribute( 'href', fileName );
head.appendChild( link );
if(!window.allLoaded.css[fileName]){
window.allLoaded.css[ fileName ] = true;
window.allLoaded.cssList.push( fileName );
}
return true;
};
var jsLoader = function( fileName ){
var script = document.createElement( 'script' );
script.setAttribute( 'type', script.type = 'text/javascript' );
script.onload = function(a,b,c){
};
script.onerror = function(a,b,c){
if(fileName.indexOf('Fields')>-1)debugger
console.log('kkk',a,b,c)
};
script.setAttribute( 'src', script.src = fileName );
head.appendChild( script );
if(!window.allLoaded.js[fileName]){
window.allLoaded.js[ fileName ] = true;
window.allLoaded.jsList.push( fileName );
}
};
var InstantLoaders = [
{ name: '.scss', loader: cssLoader },
{ name: '.css', loader: cssLoader },
{ name: '.jsx', loader: jsLoader },
{ name: '.js', loader: jsLoader },
{ name: '.tsx', loader: jsLoader },
{ name: '.ts', loader: jsLoader },
{ name: '.svg', loader: jsLoader },
];
var definitions = {};
var waiting = {};
var resolve = function(base, file) {
if(file[0] !== '.' && file[0] !== '/')file = '/'+file;
return Path.resolve(Path.dirname(base), file);
};
var _define = function(name) {
var definition = definitions[name];
if(definition.notResolved === 0){
definition.fn.apply(null, definition.deps.map(function(dep) {
return dep === 'exports' ? definition.exports : definitions[dep].exports
}));
(waiting[definition.fileName] || []).forEach(function(name) {
definitions[name].notResolved--;
_define(name)
});
}
};
window.define = function(fileName, deps, fn) {
fileName = Path.trim(fileName);
deps = deps.map(function(dep) {
return dep === 'exports' ? 'exports': resolve(fileName, dep);
});
if(!(fileName in definitions) || definitions[fileName].notResolved !== 0){
definitions[ fileName ] = { fileName: fileName, deps: deps, fn: fn, exports: {} };
var notResolved = 0;
for( var i = 0, _i = deps.length; i < _i; i++ ){
const dep = deps[ i ];
if( dep === 'exports' )
continue;
var skip = false;
if( !( dep in definitions ) ){
var matched = false;
for( var j = 0, _j = InstantLoaders.length; j < _j; j++ ){
const instantLoader = InstantLoaders[ j ];
if( dep.substr( -instantLoader.name.length ).toLowerCase() === instantLoader.name ){
if( !( dep in definitions ) ){
definitions[ dep ] = { exports: {} };
if( instantLoader.loader( dep ) ){
skip = true;
definitions[ dep ].notResolved = 0;
}else{
definitions[ dep ].loading = true;
}
matched = true;
}
break;
}
}
if(!matched){
if( !( dep in definitions ) ){
definitions[ dep ] = { exports: {} };
if( jsLoader( dep ) ){
skip = true;
}else{
definitions[ dep ].loading = true;
}
matched = true;
}
}
}else{
skip = definitions[ dep ].notResolved === 0;
}
if( !skip ){
( waiting[ dep ] || ( waiting[ dep ] = [] ) ).push( fileName );
notResolved++;
}
}
definitions[ fileName ].notResolved = notResolved;
}else{
definitions[ fileName ].fn = fn;
}
_define(fileName)
};
window.define.definitions = definitions;
window.define.waiting = waiting;
})(window.__Path);
\ No newline at end of file
var Route = function(url) {
if(!(this instanceof Route))
return new Route(url);
//url.replace(/(:[a-zA-Z0-9\-_]+)(?=\/|$)/g)
var list = this.list = [];
var rand = Math.random().toString(36).substr(2);
this.splitted = url.replace(/(:([^\/]+))(?=\/|$)/g, function(str, full, token) {
list.push(token);
return rand;
}).split(rand);
var splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i].replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
i<_i-1 && out.push('([^\\/]+)');
}
this.RegExp = new RegExp('^'+out.join('')+'/?$', 'i');
};
Route.prototype = {
generate: function(data) {
var list = this.list,
splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i]);
i<_i-1 && out.push(data[list[i]] || '');
}
return out.join('');
},
load: function(url) {
var matched = url.match(this.RegExp),
data = {}, list = this.list,
silent = true;
var state = history.state || {},
stateData = state.data || {},
dataNotMatched = false;
for( var i = 0, _i = list.length; i < _i; i++ ){
var listElement = list[ i ];
data[listElement] = matched[i+1];
if(stateData[listElement] !== matched[i+1])
dataNotMatched = true;
}
for(i in stateData){
if(!(i in data)){
dataNotMatched = true;
}
}
if(state.place === this.pageName || dataNotMatched){
silent = false;
}
ACTION.NAVIGATE.execute(this.pageName, data, silent);
/*
store.set({
'navigation.current': event.state.place,
'navigation.data': event.state.data || {}
});
*/
},
match: function(url) {
return (url.match(this.RegExp) !== null? 1 : 0)*url.length;
}
};
var jwtDecode = function (jwt) {
function b64DecodeUnicode(str) {
return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {
var code = p.charCodeAt(0).toString(16).toUpperCase();
if (code.length < 2) {
code = '0' + code;
}
return '%' + code;
}));
}
function decode(str) {
var output = str.replace(/-/g, "+").replace(/_/g, "/");
switch (output.length % 4) {
case 0:
break;
case 2:
output += "==";
break;
case 3:
output += "=";
break;
default:
throw "Illegal base64url string!";
}
try {
return b64DecodeUnicode(output);
} catch (err) {
return atob(output);
}
}
var jwtArray = jwt.split('.');
return {
header: decode(jwtArray[0]),
payload: decode(jwtArray[1]),
signature: decode(jwtArray[2])
};
};
if(typeof window !== 'undefined'){
window.Route = Route;
window.jwtDecode = jwtDecode;
}
var Transform = (function() {
'use strict';
var hookAndConvert = function(fn) {
return function(hook, a) {
var type = typeof hook;
var notObject = type !== 'object';
var isHook = !notObject && ('hook' in hook);
if(isHook){
type = 'function'; notObject = true;
}
if(notObject){
if( type === 'function' ){
var last, val;
if(isHook){
return {hook: function(draw) {
return hook.hook(function(arg) {
val = fn(arg, a);
if(last === val)
return;
return draw(last = val);
});
}};
}else{
return function(draw) {
return hook(function(arg) {
val = fn(arg, a);
if(last === val)
return;
return draw(last = val);
});
};
}
}
}else{
return hook;
}
}
};
var Transform = {
toFixed: hookAndConvert(function(val, digits) {
return (val-0).toFixed(digits);
})
};
return Transform;
})();
typeof module === 'object' && (module.exports = Transform);
(typeof window === 'object') && (window.T = window.Transform = Transform);
\ No newline at end of file
const checkSpecialCharsAndEmpty = (value) => {
const thisValue = value.toString().toLowerCase();
let hasSpecialChars = false;
if (typeof value === 'string') {
hasSpecialChars = thisValue.includes('\n')
|| thisValue.includes('\t')
|| thisValue.includes(',')
|| thisValue.includes(';')
|| thisValue.includes('.')
|| thisValue.includes('"')
|| thisValue.includes('\'')
|| thisValue.includes('`')
|| thisValue.includes('´')
|| thisValue.includes(' ')
|| thisValue.length === 0;
}
return hasSpecialChars;
};
const separatorOrLineBreak = (length, elementIdx, separator) => (
length - 1 === elementIdx ? '\n' : separator
);
const escapeDoubleQuotesInsideElement = (element) => {
const thisElement = element.replace(/"/g, '""');
return thisElement;
};
const appendElement = (element, lineLength, elementIdx, separator) => {
const includesSpecials = checkSpecialCharsAndEmpty(element);
let thisElement = element;
if (includesSpecials) {
thisElement = escapeDoubleQuotesInsideElement(thisElement);
}
return (
includesSpecials
? `"${thisElement}"${separatorOrLineBreak(lineLength, elementIdx, separator)}`
: `${thisElement}${separatorOrLineBreak(lineLength, elementIdx, separator)}`
);
};
const toCSV = data => convertArrayOfObjectsToCSV(data, {separator: ','});
const convertArrayOfObjectsToCSV = (data, { header, separator }) => {
const array = [...data];
let csv = '';
if (header) {
header.forEach((headerEl, i) => {
const thisHeaderEl = headerEl || (headerEl === 0 ? 0 : '');
csv += appendElement(thisHeaderEl, header.length, i, separator);
});
}
array.forEach((row, idx) => {
const thisRow = Object.keys(row);
if (!header && idx === 0) {
thisRow.forEach((key, i) => {
const value = key || (key === 0 ? 0 : '');
csv += appendElement(value, thisRow.length, i, separator);
});
}
thisRow.forEach((key, i) => {
const value = row[key] || (row[key] === 0 ? 0 : '');
csv += appendElement(value, thisRow.length, i, separator);
});
});
return csv;
};
\ No newline at end of file
var evts = [
{
"year": 1776,
"name": "Declaration of Independence",
"place": "North America",
"require": ['Boston Tea Party', '']
},
{
"year": 1787,
"name": "Constitution of the United States of America",
"place": "North America"
},
{
"year": 1794,
"name": "Whiskey Rebellion",
"place": "North America"
},
{
"year": 1803,
"name": "Louisiana Purchase",
"place": "North America"
},
{
"year": 1815,
"name": "Battle of New Orleans",
"place": "North America"
},
{
"year": 1823,
"name": "Monroe Doctrine",
"place": "North America"
},
{
"year": 1829,
"name": "Era of the Common Man",
"place": "North America"
},
{
"year": 1848,
"name": "Treaty of Guadalupe Hidalgo",
"place": "North America"
},
{
"year": 1857,
"name": "Dred Scott Decision",
"place": "North America"
},
{
"year": 1863,
"name": "Battle of Gettysburg",
"place": "North America"
},
{
"year": 1876,
"name": "Battle of the Little Bighorn",
"place": "North America"
},
{
"year": 1886,
"name": "Haymarket Riot",
"place": "North America"
},
{
"year": 1896,
"name": "Plessy v. Ferguson",
"place": "North America"
},
{
"year": 1902,
"name": "Breakup of Northern Securities",
"place": "North America"
},
{
"year": 1915,
"name": "Sinking of the Lusitania",
"place": "North America"
},
{
"year": 1929,
"name": "Stock Market Crash",
"place": "North America"
},
{
"year": 1933,
"name": "FDR’s First Fireside Chat",
"place": "North America"
},
{
"year": 1945,
"name": "The Atomic Bombing of Hiroshima and Nagasaki",
"place": "North America"
},
{
"year": 1954,
"name": "U.S. Army–McCarthy Hearings",
"place": "North America"
},
{
"year": 1968,
"name": "Assassination of Martin Luther King, Jr.",
"place": "North America"
},
{
"year": 1972,
"name": "Watergate Scandal",
"place": "North America"
},
{
"year": 1981,
"name": "PATCO Strike",
"place": "North America"
},
{
"year": 1998,
"name": "The Monica Lewinsky Affair",
"place": "North America"
},
{
"year": null,
"name": "September 11 Attacks",
"place": "North America"
},
{
"year": 2016,
"name": "Election of Donald Trump",
"place": "North America"
}
];
\ No newline at end of file
var events = [
{
name: 'Fire control',
place: '%PLANET.REGION#HOT%',
require: ['Evolved brain', '#Curious']
},
{
name: 'COVID-19',
place: 'WORLD',
date: 2020,
require: ['Genome manipulation']
},
{
name: '%ANIMAL% war',
place: '%PLACE%',
require: ['%ANIMAL% evolved']
},
{
name: '%ANIMAL% evolved',
place: '%PLACE%',
require: ['Genome manipulation']
},
{
name: 'Genome fabrication',
place: [
{probability: 10, value: function(event){
return Math.rand(event.predecessors);
}},
{probability: 1, value: function(event) {
return Math.rand(event.world.countries)
}}
],
require: ['Genome manipulation'],
},
{
name: '%ANIMAL% creation',
place: '%PLACE%',
require: ['Genome fabrication']
},
{
name: 'Genome manipulation',
require: [],
place: 'any'
}
];
var Spread = {Normal: function(centerPercent, slope) {
slope = slope || 1;
}};/*function(cfg) {
Object.assign(this, cfg);
};
Spread.prototype = {
random: Math.random,
fn: function(){ return this.random() }
};
Spread.Normal = new Spread({ fn: function(){
}});*/
var dicts = {
ANIMAL: {
cat: {
weight: 3,//[2, 7, Spread.Normal(50) ],
humanLoyal: 5
},
dog: {
weight: 12,//[5, 30, Spread.Normal(50)],
humanLoyal: 9
},
crab: {
weight: 1,//[0.4, 19, Spread.Normal(10)],
humanLoyal: 1
},
parrot: {
weight: 0.08,//[0.03, 4, Spread.Normal(10)],
humanLoyal: 5
}
}
};
export {events, dicts};
\ No newline at end of file
@import "./fonts.scss";
body {
margin: 0;
padding: 0;
min-width: 320px;
font-family: $font;
font-size: 18px;
line-height: 1.28;
color: $text-main;
background-color: $bg-main;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@media (max-width: $mobile) {
font-family: $font-mobile;
}
}
img {
display: block;
max-width: 100%;
height: auto;
}
.page-content {
display: flex;
flex-direction: column;
box-sizing: border-box;
padding-top: 90px;
min-height: 100vh;
min-height: calc(var(--vh, 1vh) * 100);
@media (max-width: $mobile) {
padding-top: 60px;
}
&.isAdminArea {
min-width: 1280px;
.page-header {
position: absolute;
min-width: 1280px;
}
}
}
.page-content__inner {
display: flex;
flex-direction: column;
flex-grow: 1;
}
.readers-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
border: 0;
white-space: nowrap;
clip-path: inset(100%);
clip: rect(0 0 0 0);
overflow: hidden;
}
.zero-wrapper {
width: 100%;
}
.error-block {
background: #194965;
div {
white-space: pre;
font-family: monospace;
padding: 0 32px 16px;
color: #ccdde8;
font-size: 16px;
}
}
.log-block {
background: #ccdde8;
div {
white-space: pre;
font-family: monospace;
padding: 0 32px 16px;
color: #194965;
font-size: 14px;
}
}
.test-request-block {
padding: 0 32px 16px;
}
.tmp {
display: contents;
}
.onerror {
animation-name: shake;
animation-duration: 1s;
animation-fill-mode: both;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
@keyframes shake {
from, to {
transform: translate3d(0, 0, 0);
}
10%, 30%, 50%, 70%, 90% {
transform: translate3d(-10px, 0, 0);
}
20%, 40%, 60%, 80% {
transform: translate3d(10px, 0, 0);
}
}
.highlighted {
background: rgba($accent-main, 0.5);
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/SFProText-Regular.woff2") format("woff2"),
url("/fonts/SFProText-Regular.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("/fonts/SFProText-RegularItalic.woff2") format("woff2"),
url("/fonts/SFProText-RegularItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/SFProText-Medium.woff2") format("woff2"),
url("/fonts/SFProText-Medium.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 500;
font-display: swap;
src: url("/fonts/SFProText-MediumItalic.woff2") format("woff2"),
url("/fonts/SFProText-MediumItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/SFProText-Semibold.woff2") format("woff2"),
url("/fonts/SFProText-Semibold.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 600;
font-display: swap;
src: url("/fonts/SFProText-SemiboldItalic.woff2") format("woff2"),
url("/fonts/SFProText-SemiboldItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/SFProText-Bold.woff2") format("woff2"),
url("/fonts/SFProText-Bold.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 700;
font-display: swap;
src: url("/fonts/SFProText-BoldItalic.woff2") format("woff2"),
url("/fonts/SFProText-BoldItalic.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrRoman.woff2") format("woff2"),
url("/fonts/HelveticaNeueCyrRoman.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrMedium.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrBold.woff2") format("woff2"),
url("/fonts/HelveticaNeueCyrBold.woff") format("woff");
}
@mixin container {
margin: 0 auto;
box-sizing: border-box;
padding: 0 30px;
width: 100%;
max-width: 1060px;
@media (max-width: $mobile) {
padding: 0 20px;
}
}
@mixin pageInner {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 54px;
background-image: url("/uploads/images/bg-leaves.svg");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: bottom center;
@media (max-width: 1024px) {
padding: 40px;
}
@media (max-width: $mobile) {
margin: 0;
padding: 0 30px 30px;
background-image: url("/uploads/images/bg-leaves-mob.svg");
}
}
@mixin infoPage {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 30px 30px 25px;
background-color: $bg-accent;
}
@mixin adminPage {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 30px 30px 25px;
background-color: $bg-accent;
background-image: url("/uploads/images/bg-leaves-admin.svg");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: bottom center;
}
@mixin list-reset {
margin: 0;
padding: 0;
list-style: none;
}
@mixin btn-reset {
display: inline-block;
vertical-align: top;
padding: 0;
border: 0;
background-color: transparent;
cursor: pointer;
}
@mixin center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin hover {
transition: opacity 0.3s ease;
&:hover,
&:focus {
opacity: 0.7;
outline: none;
}
}
@mixin flagSeen {
display: flex;
align-items: center;
font-weight: 400;
font-size: 12px;
line-height: 30px;
color: #B2C5B7;
svg {
display: block;
margin-left: 9px;
color: $accent-main;
}
}
@mixin mainTitle {
font-weight: 700;
font-size: 44px;
line-height: 1.14;
letter-spacing: 0.01em;
@media (max-width: 1024px) {
font-size: 38px;
}
}
@mixin title {
font-weight: 700;
font-size: 32px;
line-height: 40px;
@media (max-width: $mobile) {
font-size: 16px;
line-height: 20px;
letter-spacing: 0.15px;
}
}
@mixin headline {
font-weight: 700;
font-size: 24px;
line-height: 32px;
@media (max-width: $mobile) {
font-size: 20px;
line-height: 25px;
}
}
@mixin lesserHeadline {
font-weight: 700;
font-size: 18px;
line-height: 24px;
@media (max-width: $mobile) {
font-weight: 700;
font-size: 16px;
line-height: 20px;
letter-spacing: 0.15px;
}
}
@mixin mainSubtitle {
font-weight: 600;
font-size: 18px;
line-height: 22px;
}
@mixin subtitle {
font-weight: 600;
font-size: 16px;
line-height: 22px;
}
@mixin mainBodyText {
font-weight: 500;
font-size: 18px;
line-height: 23px;
color: $gray-dark;
@media (max-width: 1024px) {
font-size: 17px;
line-height: 22px;
}
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
line-height: 19px;
letter-spacing: 0.25px;
}
}
@mixin bodyText {
font-weight: 500;
font-size: 17px;
line-height: 22px;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 14px;
line-height: 18px;
letter-spacing: 0.1px;
}
}
@mixin mainCaption {
font-weight: 500;
font-size: 15px;
line-height: 20px;
color: $gray-dark;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
line-height: 19px;
letter-spacing: 0.25px;
}
}
@mixin caption {
font-weight: 500;
font-size: 13px;
line-height: 17px;
color: $gray-dark;
}
@mixin lesserCaption {
font-weight: 400;
font-size: 12px;
line-height: 17px;
color: $green-gray;
}
$bg-main: #ffffff;
$bg-accent: #f6f6f6;
$bg-pattern: #e0e0e0;
$text-main: #000000;
$gray-dark: #575756;
$gray-medium: #a6a6a6;
$gray-light: #dfdfdf;
$accent-main: #34BE5B;
$accent-medium: #259C47;
$accent-dark: #006C43;
$green-gray: #B2C5B7;
$teal: #3B6977;
$indigo: #4591A9;
$red: #FF0000;
$brick: #C94C0A;
$persimmon: #EC7B3F;
$sienna: #D8960D;
$standardCard: #BDD6DE;
$standardCardSeen: #f8f8f8;
$font: 'SF Pro Text', Arial, sans-serif;
$font-mobile: 'Helvetica Neue', Arial, sans-serif;
$mobile: 767px;
$tablet: 1024px;
$desktopMin: 1279px;
function mulberry32(a) {
var out = function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
out.getSeed = function() {
return a;
};
out.setSeed = function(A) {
a = A;
};
out.setStringSeed = function(str) {
str = str.replace(/[^0-9a-z]/g,'').substr(0,12);
if(str.length === 0)str = '1';
a = parseInt(str,36);
};
out.getStringSeed = function() {
return a.toString(36);
};
return out;
}
Math.random.seeded = mulberry32(Math.floor(Math.random()*4294967296));
Math.rand = function(a, b){
if(Array.isArray(a)){
return a[Math.random.seeded()*a.length|0];
}
if(typeof a === 'object' && 'max' in a){
b = a.max;
a = a.min || 0;
}
a = Math.ceil(a);
b = Math.floor(b);
return Math.floor(Math.random.seeded() * (b - a + 1)) + a;
};
Math.rand.probability = function(items) {
var sum = 0, i, _i, total = 0;
for( i = 0, _i = items.length; i < _i; i++ ){
const item = items[ i ];
sum += item.probability |0;
}
const theRandom = Math.random.seeded();
for( i = 0, _i = items.length; i < _i; i++ ){
const item = items[ i ];
total += item.probability/sum;
if(theRandom < total)
return item;
}
};
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<base href="/"/>
<title>Техническое задание</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script>$ENV$</script>
<script src="core/Path.js"></script>
<script src="core/Require.js"></script>
<script src="core/LivestReloading.js"></script>
<script src="core/Observer.js"></script>
<script src="core/DOM.js"></script>
<script src="core/Localizer.js"></script>
<script src="core/Random.Seeded.js"></script>
<script src="core/data/store/Store.js"></script>
<script src="core/Route.js"></script>
<link async href="https://fonts.googleapis.com/css2?family=Literata:ital@0;1&display=swap" rel="stylesheet">
$COMMIT$
$BUNDLE$
<style>
td {
padding: 4px 8px;
text-align: center;
}
.info {
background: #fffabc;
padding: 16px 32px;
margin: 16px 0;
}
.page-content {
max-width: 1024px;
margin: auto;
font-family: 'Literata', serif;
position: relative;
}
.note {
max-width: 800px;
margin: 16px 0 32px auto;
padding: 16px 16px 8px 8px;
border-bottom: 2px solid #ff5e00;
}
.header {
font-weight: bold;
font-size: 64px;
margin: 32px 0 16px;
}
.subHeader {
font-weight: bold;
font-size: 32px;
margin: 32px 0 16px 0px;
}
.thead td {
border-bottom: 2px solid #000;
}
.thead td {
border-bottom: 2px solid #000;
padding: 4px 16px;
font-size: 24px;
}
a {
color: #1c7cf3;
font-family: sans-serif;
}
.note.note-float {
float: right;
margin: 0;
background: #ffe7d8;
font-family: sans-serif;
padding: 16px 32px 16px;
}
.summary td {
padding-top: 32px;
text-align: left;
font-size: 18px;
}
input[type=checkbox], input[type=radio] {
left: -42px !important;
height: 24px;
width: 24px;
}
</style>
</head>
<body>
<script>
define('start', ['main.jsx'], function(main) {
main.default();
});
let d = document.createElement('div');
d.innerText = 'v0.'+ CommitNUMBER;
d.style = 'position: fixed;\n' +
' z-index: 100;\n' +
' top: 0px;\n' +
' right: 0px;\n' +
' font-size: 11px;';
document.body.appendChild(d);
/*define('start', ['d'], function(main) {
main.default();
});*/
</script>
</body>
</html>
import '/model/Store';
import {lal} from '/posts/post.jsx';
import {VideoCalculator} from '/posts/VideoCalculator.jsx';
const {IF, ELSE} = Store;
export default function() {
var krokotau = Store.Value.Boolean(false);
let graph,
dom = <div renderTo={document.body} class={["page-content", {krokotau}]}>
<button onClick={()=>krokotau.toggle()}>togl</button>
Hello world!
{VideoCalculator}
</div>;
const w = window;
let resizeFn;
w.addEventListener('resize', Store.debounce(resizeFn = function() {
tmpStore.set({
isMobile: w.innerWidth < 1025,
width: w.innerWidth
});
},1000/4));
resizeFn();
tmpStore.set('loaded', true);
};
@import "/global-styles/variables.scss";
@import "/global-styles/mixins.scss";
select, input {
font-size: 18px;
padding: 8px;
}
.field label {
select, input {
position: absolute;
left: 300px;
}
}
.field {
margin: 24px 0;
font-size: 18px;
}
\ No newline at end of file
let latest, STORE_VERSION = 'v1.0';
const store = new Store(latest = {
_VERSION_: STORE_VERSION,
'navigation': {
current: 'Login'
}
});
try{
var data = JSON.parse( localStorage.getItem( 'store' ) );
if(data._VERSION_ !== store.get('_VERSION_')){
console.warn('STORE:outdated, new state → localStorage');
console.warn('\tSTORE:currentData #'+ store.get('_VERSION_'), store._props);
console.warn('\tSTORE:savedData #'+ STORE_VERSION, data);
console.warn('\tSTORE:hint → Run Store.restore() for restore saved state');
console.warn('\tStore:hint → Run Store.update() for load latest default state');
Store.restore = function() {
for( var k in data ){
if(k !== '_VERSION_'){
store.set( k, data[ k ] );
}
}
};
Store.update = function() {
for( var k in latest ){
if(k !== '_VERSION_'){
store.set( k, latest[ k ] );
}
}
};
}else{
for( var k in data ){
store.set( k, data[ k ] );
}
console.log('STORE:loaded ← localStorage', data);
}
}catch( e ){}
store.events.on('change', function(a) {
localStorage.setItem('store', JSON.stringify(store._props));
});
const tmpStore = new Store({
loaded: false,
navigation: {current: 'Login'},
isMobile: false,
width: window.innerWidth
});
let lastNav = null;
store.sub('navigation.current', function(val) {
console.log('APP:navigation', lastNav,'→', val);
lastNav = val;
});
window.store = store;
window.tmpStore = tmpStore;
const lal = <div>aga!</div>;
export {lal};
\ No newline at end of file
<svg width="17" height="11" viewBox="0 0 17 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.75667 10.6538C6.3956 11.0717 5.76411 11.1177 5.34621 10.7567L0.346207 6.43667C0.131602 6.25125 0.00582357 5.98343 0.000182138 5.69987C-0.00545977 5.41632 0.109567 5.14371 0.316626 4.9499L5.31663 0.2699C5.71984 -0.107509 6.35266 -0.0865889 6.73007 0.316626C7.10748 0.719839 7.08656 1.35266 6.68334 1.73007L2.49513 5.65024L6.65376 9.2433C7.07167 9.60437 7.11774 10.2359 6.75667 10.6538Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 5.5C16.5 6.05228 16.0523 6.5 15.5 6.5L1.5 6.5C0.947715 6.5 0.5 6.05228 0.5 5.5C0.5 4.94771 0.947715 4.5 1.5 4.5L15.5 4.5C16.0523 4.5 16.5 4.94772 16.5 5.5Z" fill="currentColor"/>
</svg>
<svg width="17" height="11" viewBox="0 0 17 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0386 0.346239C10.4106 -0.0716678 11.0612 -0.117742 11.4918 0.243329L16.6433 4.56333C16.8644 4.74875 16.994 5.01657 16.9998 5.30012C17.0056 5.58368 16.8871 5.85629 16.6738 6.0501L11.5223 10.7301C11.1068 11.1075 10.4548 11.0866 10.066 10.6834C9.67714 10.2802 9.69869 9.64734 10.1141 9.26993L14.4293 5.34976L10.1446 1.7567C9.71403 1.39563 9.66656 0.764145 10.0386 0.346239Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 5.5C0 4.94772 0.461282 4.5 1.0303 4.5H15.4545C16.0236 4.5 16.4848 4.94772 16.4848 5.5C16.4848 6.05228 16.0236 6.5 15.4545 6.5H1.0303C0.461282 6.5 0 6.05228 0 5.5Z" fill="currentColor"/>
</svg>
<svg width="16" height="14" viewBox="0 0 16 14" xmlns="http://www.w3.org/2000/svg">
<path d="M9.84254 0.288818C9.44977 -0.0994427 8.81661 -0.0957828 8.42835 0.296992C8.04009 0.689767 8.04375 1.32292 8.43653 1.71118L9.84254 0.288818ZM15 6.7931L15.7271 7.47963C16.1001 7.08455 16.0894 6.4639 15.703 6.08192L15 6.7931ZM8.41243 12.3135C8.03327 12.715 8.05144 13.3479 8.45301 13.7271C8.85458 14.1063 9.48748 14.0881 9.86664 13.6865L8.41243 12.3135ZM13.3721 7.7931C13.9244 7.7931 14.3721 7.34539 14.3721 6.7931C14.3721 6.24082 13.9244 5.7931 13.3721 5.7931V7.7931ZM1 5.7931C0.447715 5.7931 0 6.24082 0 6.7931C0 7.34539 0.447715 7.7931 1 7.7931V5.7931ZM8.43653 1.71118L14.297 7.50429L15.703 6.08192L9.84254 0.288818L8.43653 1.71118ZM14.2729 6.10658L8.41243 12.3135L9.86664 13.6865L15.7271 7.47963L14.2729 6.10658ZM13.3721 5.7931H1V7.7931H13.3721V5.7931Z" fill="currentColor"/>
</svg>
<svg width="22" height="18" viewBox="0 0 22 18" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5626 17.5098C10.0049 18.1224 9.05621 18.1669 8.44365 17.6091L0.490157 10.3678C0.184593 10.0896 0.00733684 9.69761 0.000224305 9.28443C-0.00689014 8.87125 0.156768 8.47344 0.452577 8.18488L8.40606 0.426257C8.99907 -0.152219 9.94874 -0.140441 10.5272 0.452565C11.1057 1.04557 11.0939 1.99524 10.5009 2.57372L5.1858 7.75861L20.5 7.75861C21.3284 7.75861 22 8.43018 22 9.25861C22 10.087 21.3284 10.7586 20.5 10.7586L5.37558 10.7586L10.4633 15.3908C11.0759 15.9486 11.1204 16.8973 10.5626 17.5098Z" fill="currentColor"/>
</svg>
<svg width="21" height="17" viewBox="0 0 21 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.44727 8.36693L8.29444 14.7339L18.8194 2" stroke="white" stroke-opacity="0.67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M17.8552 4.45284L4.44862 17.8595c-.46863.4686-.46863 1.2284 0 1.697.46862.4686 1.22841.4686 1.69704 0L19.5523 6.14988c.4686-.46862.4686-1.22841 0-1.69704-.4687-.46862-1.2284-.46862-1.6971 0z" fill="currentColor"/>
<path d="M19.5523 17.8551L6.14566 4.44851c-.46863-.46863-1.22842-.46863-1.69704 0-.46863.46862-.46863 1.22841 0 1.69704L17.8552 19.5522c.4687.4686 1.2284.4686 1.6971 0 .4686-.4687.4686-1.2285 0-1.6971z" fill="currentColor"/>
</svg>
<svg width="17" height="16" viewBox="0 0 17 16" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.97052 8.7225L11.693 0L16.003 4.30994L7.28047 13.0324L2.97052 8.7225ZM1.45125 10.195L0 16L5.80499 14.5488L1.45125 10.195Z" fill="currentColor"/>
</svg>
<svg width="20" height="14" viewBox="0 0 20 14" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 13.5234C15.5228 13.5234 20 7.02344 20 7.02344C20 7.02344 15.5228 0.523438 10 0.523438C4.47715 0.523438 0 7.02344 0 7.02344C0 7.02344 4.47715 13.5234 10 13.5234ZM9.99984 10.5248C11.8408 10.5248 13.3332 8.95782 13.3332 7.02482C13.3332 5.09182 11.8408 3.52482 9.99984 3.52482C8.15889 3.52482 6.6665 5.09182 6.6665 7.02482C6.6665 8.95782 8.15889 10.5248 9.99984 10.5248Z" fill="currentColor"/>
<ellipse cx="10" cy="6.82363" rx="2" ry="2.1" fill="currentColor"/>
</svg>
<svg width="21" height="13" viewBox="0 0 21 13" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5 13C16.299 13 21 6.5 21 6.5C21 6.5 16.299 0 10.5 0C4.70101 0 0 6.5 0 6.5C0 6.5 4.70101 13 10.5 13ZM10.5 11.0015C12.9853 11.0015 15 8.98675 15 6.50146C15 4.01618 12.9853 2.00146 10.5 2.00146C8.01472 2.00146 6 4.01618 6 6.50146C6 8.98675 8.01472 11.0015 10.5 11.0015Z" fill="currentColor"/>
<circle cx="10.5" cy="6.5" r="2.5" fill="currentColor"/>
<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="21" height="13">
<path d="M21 6.5C21 6.5 16.299 13 10.5 13C4.70101 13 0 6.5 0 6.5C0 6.5 4.70101 0 10.5 0C16.299 0 21 6.5 21 6.5Z" fill="white"/>
</mask>
<g mask="url(#mask0)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0589 12.881L4.47549 1.47964L5.94131 0.118988L16.5247 11.5204L15.0589 12.881Z" fill="white"/>
</g>
</svg>
<svg width="11" height="18" viewBox="0 0 11 18" xmlns="http://www.w3.org/2000/svg">
<path d="M1.65127 0.241154C1.23217 -0.118533 0.600841 -0.0703692 0.241154 0.34873C-0.118533 0.767829 -0.0703692 1.39916 0.34873 1.75885L1.65127 0.241154ZM10 8.72414L10.6769 9.46024C10.8872 9.26684 11.0047 8.9927 10.9999 8.70701C10.995 8.42133 10.8681 8.15138 10.6513 7.96529L10 8.72414ZM0.323127 16.2639C-0.0834098 16.6377 -0.109926 17.2703 0.2639 17.6769C0.637727 18.0834 1.27034 18.1099 1.67687 17.7361L0.323127 16.2639ZM0.34873 1.75885L9.34873 9.48298L10.6513 7.96529L1.65127 0.241154L0.34873 1.75885ZM9.32313 7.98804L0.323127 16.2639L1.67687 17.7361L10.6769 9.46024L9.32313 7.98804Z" fill="currentColor"/>
</svg>
<svg width="700" height="250" viewBox="0 0 700 250" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M147.627 237.195H192.756V195.62H222.371V157.653H192.756V10.8049H126.473C96.231 57.2439 65.5186 107.448 37 158.437V195.62H147.627V237.195ZM79.4646 156.397C99.9917 119.842 124.123 80.4634 146.217 46.7324H148.724V158.908H79.4646V156.397Z" fill="#BFBFBF"/>
<path d="M349.922 243C405.862 243 439.708 198.757 439.708 123.765C439.708 48.615 405.392 5 349.922 5C294.295 5 260.135 48.615 260.135 123.608C260.135 198.757 293.981 243 349.922 243ZM349.922 205.504C324.067 205.504 308.084 177.891 308.084 123.608C308.084 69.795 324.224 42.4964 349.922 42.4964C375.776 42.4964 391.759 69.6381 391.759 123.608C391.759 177.891 375.933 205.504 349.922 205.504Z" fill="#BFBFBF"/>
<path d="M588.256 237.195H633.385V195.62H663V157.653H633.385V10.8049H567.102C536.86 57.2439 506.147 107.448 477.629 158.437V195.62H588.256V237.195ZM520.093 156.397C540.621 119.842 564.752 80.4634 586.846 46.7324H589.353V158.908H520.093V156.397Z" fill="#BFBFBF"/>
<path d="M590.98 37.8144C590.98 37.8144 584.921 47.472 574.456 40.6179C563.99 33.7638 547.636 31.6243 539.016 44.5193C530.396 57.4144 522.409 53.1056 522.409 53.1056C522.409 53.1056 535.276 60.8392 545.203 58.331C555.117 55.9131 559.62 51.0093 559.62 51.0093C559.62 51.0093 568.91 59.8184 580.207 51.7032C591.492 43.6782 591.6 39.1865 591.6 39.1865L590.98 37.8144Z" fill="#E0E0E0"/>
<path d="M583.503 169.157C591.733 176.534 602.866 180.536 610.882 187.148C621.478 195.859 619.589 215.926 617.483 221.249C615.946 217.728 614.513 214.222 610.131 211.325C604.192 207.388 593.544 203.728 588.225 197.576C582.356 190.797 581.738 178.205 582.16 170.445C583.023 172.678 584.737 177.234 587.304 180.988C589.858 184.831 592.769 187.619 597.703 191.143C583.444 175.035 585.794 172.596 583.503 169.157Z" fill="#E0E0E0"/>
<path d="M85.3707 48.2779C85.3707 48.2779 86.1862 59.6499 98.6442 58.5121C111.102 57.3742 126.547 63.1642 128.102 78.5967C129.658 94.0293 138.734 93.9754 138.734 93.9754C138.734 93.9754 123.742 94.7619 116.155 87.8865C108.537 81.0966 106.864 74.6528 106.864 74.6528C106.864 74.6528 94.5252 78.0683 88.3613 65.5989C82.1659 53.215 84.1791 49.1983 84.1791 49.1983L85.3707 48.2779Z" fill="#E0E0E0"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="8.5" fill="#6ECE89" fill-opacity="0.46" stroke="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.8512 7.11546C12.0308 7.28678 12.0506 7.58642 11.8954 7.78471L8.42415 11.8357C8.34445 11.9375 8.22934 11.9972 8.10746 11.9999C7.98558 12.0026 7.86841 11.948 7.7851 11.8498L6.11602 9.95175C5.9538 9.76043 5.96279 9.46016 6.1361 9.28109C6.30941 9.10201 6.58141 9.11194 6.74363 9.30326L8.08612 10.8161L11.2449 7.16429C11.4001 6.96599 11.6716 6.94413 11.8512 7.11546Z" fill="#34BE5B"/>
</svg>
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="13" cy="13" r="13" fill="#7CD996"/>
<path d="M13.8385 13.8052H18V12.1948H13.8385V8H12.1615V12.1948H8V13.8052H12.1615V18H13.8385V13.8052Z" fill="white"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="60" height="60" fill="white"/>
<path d="M57.2864 13.4848V18.3612H0.675317C0.453364 18.3612 0.231411 18.3873 0.0355699 18.3808V7.42676C0.0355699 7.15259 0.00292969 6.87841 0.00292969 6.5977C0.0290418 4.60012 1.61535 3.02687 3.60641 3.00728C6.00872 2.9877 8.41104 3.01381 10.8134 3.01381H14.9913C16.1011 3.01381 17.2043 2.93547 18.1705 3.61439C18.6405 3.94732 18.9669 4.35859 19.3129 4.80249C19.7437 5.35738 20.1811 5.91226 20.6119 6.46061C21.082 7.06119 21.552 7.66177 22.022 8.26888C22.2701 8.58223 22.5051 8.92821 22.7792 9.22197C23.2166 9.68546 23.7911 9.92047 24.4178 9.92047C24.5875 9.92047 24.7572 9.93353 24.9204 9.93353H52.175C52.6581 9.93353 53.1411 9.92047 53.6242 9.927C55.5239 9.93353 57.071 11.3566 57.2407 13.2237C57.2734 13.302 57.2864 13.3869 57.2864 13.4848Z" fill="#D4E3DD"/>
<path d="M57.2859 21.0702V31.5151C57.09 31.3258 56.8485 31.143 56.62 30.9667C56.5939 30.9472 56.5678 30.9276 56.5417 30.9015C56.5155 30.8819 56.4894 30.8623 56.4633 30.8427C56.4503 30.8362 56.4372 30.8231 56.4242 30.8166C56.2675 30.7056 56.1173 30.5946 55.9541 30.4902C55.6604 30.2878 55.3536 30.0528 55.0467 29.9223C54.9423 29.857 54.8378 29.7917 54.7399 29.7329C54.6551 29.6872 54.5767 29.635 54.4919 29.5893C54.407 29.5436 54.3221 29.5045 54.2373 29.4588C54.1524 29.4131 54.0675 29.4 53.9827 29.3347C53.9696 29.3347 53.9566 29.3151 53.9435 29.3086C53.826 29.2368 53.715 29.1846 53.5975 29.1454C53.5975 29.1454 53.5975 29.1454 53.591 29.1454C53.591 29.1454 53.591 29.1519 53.5845 29.1519C53.5061 29.1258 53.4278 29.0801 53.356 29.0801C53.2189 29.0149 53.0753 28.9365 52.9317 28.8843C52.8598 28.8582 52.788 28.819 52.7162 28.7929C52.1222 28.5644 51.5085 28.3621 50.8884 28.2119C47.8072 27.4547 44.4583 27.6309 41.5011 28.806C39.497 29.6089 37.7148 30.7644 36.2068 32.2528C36.1415 32.318 36.0763 32.3833 36.011 32.4486C35.9457 32.5139 35.8804 32.5792 35.8217 32.6444C35.3778 33.1145 34.96 33.6106 34.5683 34.1394C30.7102 39.3096 30.5927 46.7385 34.2484 52.0458C34.2549 52.0588 34.268 52.0719 34.2745 52.0849C34.4312 52.3134 34.5944 52.5419 34.7641 52.7639C34.9404 52.9923 35.1232 53.2469 35.3125 53.4428H4.65031C4.29127 53.4428 3.93222 53.4558 3.57318 53.4493C1.59519 53.4232 0.0284582 51.8434 0.00234601 49.8589C-0.0107101 48.8666 0.0349862 47.8678 0.0349862 46.8756V21.0376H57.0639C57.1422 21.0376 57.2206 21.0702 57.2859 21.0702Z" fill="#D4E3DD"/>
<path d="M59.9623 42.097C59.9493 41.9207 59.9297 41.7379 59.9101 41.5617C59.9101 41.5551 59.9101 41.5421 59.9101 41.5355C59.9101 41.5225 59.9036 41.5094 59.9036 41.4964C59.8905 41.4115 59.8774 41.3201 59.8644 41.2353C59.7338 40.4911 59.551 39.7599 59.303 39.0418C59.2312 38.8264 59.1528 38.6175 59.068 38.4086C59.0549 38.3825 59.0353 38.3303 59.0223 38.2976C59.0223 38.2976 59.0223 38.2976 59.0223 38.2911C58.9962 38.2324 58.9635 38.1671 58.9374 38.1083C58.7938 37.795 58.6436 37.4882 58.4804 37.1879C58.2911 36.8419 58.0888 36.5024 57.8733 36.176C57.7689 36.0194 57.6644 35.8627 57.5535 35.7125C57.5274 35.6734 57.4164 35.5232 57.3642 35.4449C56.9398 34.8574 56.4045 34.3286 55.8823 33.839C55.6016 33.5779 55.3078 33.3298 55.0075 33.0883C55.001 33.0817 54.9945 33.0752 54.9879 33.0687C54.9749 33.0622 54.9684 33.0491 54.9488 33.0426C54.877 32.9903 54.8052 32.9381 54.7334 32.8859C54.5767 32.7749 54.4135 32.6639 54.2568 32.5595C53.604 32.1286 52.9186 31.7696 52.207 31.4432C52.1939 31.4367 52.1809 31.4301 52.1678 31.4236C52.1613 31.4171 52.1483 31.4171 52.1352 31.4106C52.0373 31.3714 51.9394 31.3322 51.8349 31.2931C51.6652 31.2278 51.502 31.169 51.3322 31.1103C50.9732 30.9862 50.6076 30.8818 50.2421 30.7904C49.8373 30.6859 49.4261 30.6076 49.0083 30.5423C49.0017 30.5423 48.9103 30.5293 48.8451 30.5162H48.8385C48.7798 30.5097 48.708 30.5032 48.708 30.5032C48.5252 30.4836 48.3359 30.464 48.1531 30.4509C47.4089 30.3987 46.6647 30.4052 45.9205 30.464C45.7377 30.4771 45.5615 30.4966 45.3852 30.5227C45.3852 30.5227 45.3852 30.5227 45.3787 30.5227C45.3721 30.5227 45.3656 30.5227 45.3591 30.5293C45.2808 30.5423 45.2089 30.5554 45.1306 30.5684C44.8173 30.6207 44.5039 30.6859 44.1906 30.7578C43.5508 30.9079 42.9176 31.1103 42.304 31.3453C42.2387 31.3714 42.1081 31.3975 42.0559 31.4432C42.1342 31.4106 42.1865 31.3844 42.2061 31.3779C42.193 31.3844 42.1669 31.391 42.1342 31.4106C42.1081 31.4236 42.082 31.4367 42.0494 31.4432C41.9123 31.502 41.7817 31.5672 41.6446 31.6325C41.3509 31.7761 41.0636 31.9263 40.7829 32.0829C40.5022 32.2396 40.2281 32.4093 39.9539 32.5921C39.7254 32.7488 39.3337 32.9316 39.164 33.1535C39.2097 33.1209 39.2554 33.0883 39.2945 33.0491C39.2489 33.0883 39.2032 33.1209 39.1575 33.1601C39.0922 33.2123 39.0204 33.271 38.9551 33.3298C38.8441 33.4212 38.7331 33.5191 38.6222 33.617C38.4002 33.8129 38.1913 34.0152 37.9824 34.2176C37.7343 34.4657 37.4993 34.7268 37.2709 34.9879C37.1729 35.0989 37.0815 35.2099 36.9902 35.3274C36.9771 35.347 36.9575 35.36 36.9445 35.3796C36.9183 35.4122 36.8922 35.4514 36.8792 35.471C36.494 35.9867 36.1415 36.5351 35.8282 37.0965C35.665 37.3968 35.5083 37.6971 35.3647 38.0039C35.332 38.0692 35.3059 38.141 35.2733 38.2062C35.2472 38.2585 35.2276 38.3172 35.2015 38.3694C35.2211 38.3172 35.2472 38.265 35.2668 38.2128C35.1884 38.2911 35.1427 38.5261 35.1035 38.6306C34.8685 39.2507 34.6792 39.8839 34.5356 40.5237C34.4638 40.8501 34.4051 41.183 34.3528 41.5094C34.3528 41.516 34.3528 41.5225 34.3463 41.529C34.3463 41.529 34.3463 41.529 34.3463 41.5355C34.3398 41.6074 34.3267 41.6792 34.3202 41.751C34.3006 41.9207 34.2875 42.0904 34.2745 42.2602C34.2223 42.9978 34.2223 43.7355 34.2875 44.4732C34.3006 44.6037 34.3071 44.7343 34.3267 44.8583C34.3267 44.8779 34.3332 44.9301 34.3398 44.9823C34.3398 44.9889 34.3398 44.9954 34.3398 45.0085C34.3594 45.1651 34.392 45.3283 34.4181 45.485C34.4834 45.844 34.5617 46.1966 34.6531 46.5491C34.7641 46.9669 34.8881 47.3781 35.0383 47.7829C35.097 47.9526 35.1623 48.1158 35.2276 48.2855C35.2341 48.2921 35.2341 48.3051 35.2341 48.3116V48.3182C35.2406 48.3312 35.2472 48.3443 35.2537 48.3573C35.2863 48.4226 35.3124 48.4879 35.3386 48.5532C35.665 49.2582 36.0501 49.9371 36.481 50.5834C36.5985 50.7597 36.7225 50.9294 36.8465 51.0991C36.8596 51.1187 36.8726 51.1383 36.8792 51.1513C36.8857 51.1579 36.8857 51.1579 36.8922 51.1644C36.9445 51.2297 37.0032 51.3015 37.0554 51.3668C37.2839 51.6475 37.5255 51.9216 37.78 52.1828C38.0412 52.4504 38.3088 52.7115 38.5895 52.9596C38.7397 53.0967 38.8963 53.2273 39.053 53.3578C39.1052 53.4035 39.1575 53.4427 39.2097 53.4884C39.2227 53.4949 39.2293 53.508 39.2423 53.5145C39.2489 53.521 39.2554 53.521 39.2619 53.5275C39.8755 53.9715 40.5022 54.3827 41.1681 54.7287C41.4684 54.8854 41.7752 55.042 42.0951 55.1726C42.1016 55.1726 42.1081 55.1791 42.1147 55.1791C42.1212 55.1791 42.1212 55.1857 42.1277 55.1857C42.2126 55.2183 42.4084 55.2901 42.4541 55.3097C42.6304 55.375 42.8132 55.4403 42.9959 55.499C43.714 55.734 44.4517 55.9168 45.1959 56.0343C45.2546 56.0474 45.3199 56.0539 45.3787 56.0604C45.4635 56.0735 45.5484 56.08 45.6333 56.0865C45.8291 56.1061 46.0315 56.1257 46.2273 56.1388C46.5798 56.1583 46.9389 56.1714 47.2914 56.1649C47.6635 56.1583 48.0421 56.1388 48.4142 56.1061C48.5513 56.0931 48.6884 56.08 48.8255 56.0604H48.832H48.8385C48.9169 56.0474 48.9887 56.0408 49.067 56.0278C49.7263 55.9233 50.3726 55.7667 51.0058 55.5643C51.3192 55.4664 51.626 55.3554 51.9328 55.2379C51.9655 55.2248 52.0242 55.2118 52.0764 55.1922C52.0895 55.1791 52.1156 55.1661 52.1483 55.153C52.2984 55.0877 52.442 55.0225 52.5922 54.9507C53.1732 54.67 53.7411 54.3501 54.2829 53.991C54.4853 53.8539 54.779 53.7103 54.9749 53.5275C54.9945 53.4949 55.0402 53.4492 55.0728 53.4231C55.1185 53.3839 55.1642 53.3513 55.2099 53.3121C55.3339 53.2077 55.458 53.1032 55.5755 52.9988C56.0455 52.581 56.4894 52.1371 56.9007 51.6605C57.0247 51.5169 57.1422 51.3668 57.2662 51.2231C57.2793 51.2036 57.2989 51.184 57.3185 51.1709C57.3511 51.1252 57.3772 51.0795 57.4033 51.0404C57.5796 50.8054 57.7428 50.5638 57.906 50.3158C58.2585 49.7739 58.5718 49.1995 58.846 48.6119C58.8917 48.5205 58.9309 48.4226 58.9766 48.3312C58.9962 48.2855 59.0223 48.2529 59.0353 48.2398C59.0745 48.1419 59.1006 48.0244 59.1267 47.9461C59.2442 47.6393 59.3487 47.3259 59.4401 47.0126C59.6294 46.3728 59.7665 45.72 59.8774 45.0607C59.8774 45.0542 59.8774 45.0476 59.884 45.0411C59.884 45.0411 59.884 45.0411 59.884 45.0346C59.897 44.9497 59.9036 44.8583 59.9166 44.7734C59.9297 44.6168 59.9493 44.4666 59.9558 44.31C59.9819 43.964 59.9884 43.6245 59.995 43.2785C60.008 42.8934 59.995 42.4952 59.9623 42.097ZM52.331 44.6037H48.473V48.4944C48.473 49.2452 47.8593 49.8066 47.1347 49.8392C46.4101 49.8718 45.7965 49.1995 45.7965 48.4944V44.6037H41.9319C41.1811 44.6037 40.6197 43.9901 40.5871 43.2655C40.5545 42.5409 41.2268 41.9272 41.9319 41.9272H45.7965V38.0953C45.7965 37.3445 46.4101 36.7831 47.1347 36.7505C47.8593 36.7179 48.473 37.3902 48.473 38.0953V41.9272H52.331C53.0818 41.9272 53.6432 42.5409 53.6758 43.2655C53.7019 43.9901 53.0295 44.6037 52.331 44.6037Z" fill="#D4E3DD"/>
</svg>
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.47368 1H27.5263C30.5789 1 33 3.52632 33 6.47368V27.5263C33 30.5789 30.4737 33 27.5263 33H6.47368C3.42105 33 1 30.4737 1 27.5263V6.47368C1 3.42105 3.42105 1 6.47368 1Z" stroke="#8A8A8A" stroke-width="1.5"/>
<path d="M27.1403 13.8497L27.1308 10.6324C27.1308 10.3126 26.9149 10.0533 26.6484 10.0533H25.6834V8.31644C25.6834 7.99658 25.4676 7.73758 25.201 7.73758H24.236V6.00073C24.236 5.68087 24.0202 5.42188 23.7537 5.42188H19.4115C19.2832 5.42188 19.1607 5.48301 19.0702 5.59139L17.7643 7.15872H10.2447C9.97789 7.15872 9.76229 7.41772 9.76229 7.73758V9.47443H8.7973C8.53052 9.47443 8.31491 9.73343 8.31491 10.0533V11.7901H7.34992C7.08314 11.7901 6.86754 12.0494 6.86754 12.3693V13.8497L5.42967 15.4295L5.42161 26.5783C5.42081 27.6835 6.31648 28.5798 7.42161 28.5798H26.5796C27.6836 28.5798 28.5788 27.6852 28.5796 26.5812L28.5877 15.4454L27.1403 13.8497ZM10.7273 8.31644H17.9642C18.0922 8.31644 18.2147 8.2553 18.3053 8.14692L19.6114 6.57959H23.2713V7.73758H20.8589C20.7306 7.73758 20.6081 7.79872 20.5176 7.9071L19.2114 9.47443H10.7273V8.31644ZM9.27991 10.6324H19.4115C19.5396 10.6324 19.6621 10.5713 19.7526 10.4629L21.0588 8.89557H24.7186V10.0533H22.3063C22.178 10.0533 22.0555 10.1144 21.9649 10.2228L20.6588 11.7901H9.27991V10.6324ZM7.83253 12.9481H20.8589C20.987 12.9481 21.1095 12.887 21.2 12.7786L22.5061 11.2113H26.166L26.1755 14.5272H7.84204L7.83253 12.9481ZM27.1317 25.7913C27.1312 26.3432 26.6836 26.7903 26.1317 26.7903H7.86754C7.31526 26.7903 6.86754 26.3426 6.86754 25.7903V16.264H27.1405L27.1317 25.7913Z" fill="#8A8A8A"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D8960D" fill-opacity="0.5"/>
<path d="M27.3626 17L27.7912 33.7434H32.1923L32.6374 17H27.3626ZM30 43C31.8626 43 33 41.8269 33 39.9389C33 38.0326 31.8626 36.8595 30 36.8595C28.1538 36.8595 27 38.0326 27 39.9389C27 41.8269 28.1538 43 30 43Z" fill="white"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.4211 1.24211H14.3789V0.505263C14.3789 0.231579 14.1474 0 13.8737 0C13.6 0 13.3684 0.231579 13.3684 0.505263V1.22105H6.02105V0.505263C6.02105 0.231579 5.78947 0 5.51579 0C5.24211 0 5.01053 0.231579 5.01053 0.505263V1.22105H2.94737C1.32632 1.24211 0 2.54737 0 4.16842V17.0737C0 18.6947 1.32632 20 2.92632 20H16.4C18.0211 20 19.3263 18.6737 19.3263 17.0737V4.16842C19.3684 2.54737 18.0421 1.24211 16.4211 1.24211ZM2.94737 2.25263H4.98947V2.96842C4.98947 3.24211 5.22105 3.47368 5.49474 3.47368C5.76842 3.47368 6 3.24211 6 2.96842V2.25263H13.3474V2.96842C13.3474 3.24211 13.5789 3.47368 13.8526 3.47368C14.1263 3.47368 14.3579 3.24211 14.3579 2.96842V2.25263H16.4211C17.4737 2.25263 18.3368 3.11579 18.3368 4.16842V5.05263H1.03158V4.16842C1.03158 3.11579 1.89474 2.25263 2.94737 2.25263ZM16.4211 18.9684H2.94737C1.89474 18.9684 1.03158 18.1053 1.03158 17.0526V6.08421H18.3368V17.0737C18.3368 18.1263 17.4737 18.9684 16.4211 18.9684Z" fill="#34BE5B"/>
<path d="M15.0526 16.568H14.6737V13.9996C14.6737 13.1154 13.9579 12.3996 13.0737 12.3996H11.0737V11.5364C11.0737 11.0733 10.6947 10.7154 10.2526 10.7154H10.1053V10.3575C10.5684 10.168 10.9053 9.70483 10.9053 9.13641C10.9053 8.56799 10.4842 8.06273 10.1474 7.68378C9.9158 7.41009 9.43159 7.41009 9.20001 7.68378L9.13686 7.76799C8.86317 8.08378 8.44212 8.58904 8.44212 9.15746C8.44212 9.72588 8.77896 10.189 9.24212 10.3785V10.7364H9.1158C8.65264 10.7364 8.29475 11.1154 8.29475 11.5575V12.4206H6.3158C5.43159 12.4206 4.7158 13.1364 4.7158 14.0206V16.589H4.33685C4.10528 16.589 3.9158 16.7785 3.9158 17.0101C3.9158 17.2417 4.10528 17.4311 4.33685 17.4311H15.0737C15.3053 17.4311 15.4947 17.2417 15.4947 17.0101C15.4737 16.7575 15.2842 16.568 15.0526 16.568ZM9.68422 8.42062C9.85264 8.63115 10.0632 8.92588 10.0632 9.11536C10.0632 9.36799 9.89475 9.57852 9.68422 9.57852C9.4737 9.57852 9.30528 9.36799 9.30528 9.11536C9.30528 8.90483 9.5158 8.63115 9.68422 8.42062ZM9.13686 11.5575L10.1895 11.5364V12.3996H9.13686V11.5575ZM6.3158 13.2627H13.0526C13.4737 13.2627 13.8105 13.5996 13.8105 14.0206V14.3996C13.4316 14.168 12.9684 14.168 12.6105 14.4206L12.2105 14.7154C12.1263 14.7785 12.0211 14.7785 11.9369 14.7154L11.5158 14.4206C11.1369 14.1469 10.6316 14.1469 10.2526 14.4206L9.85264 14.7154C9.76843 14.7785 9.66317 14.7785 9.57896 14.7154L9.15791 14.4206C8.77896 14.1469 8.2737 14.1469 7.89475 14.4206L7.4737 14.7154C7.38949 14.7785 7.28422 14.7785 7.20001 14.7154L6.77896 14.4206C6.42107 14.168 5.93685 14.168 5.55791 14.3996V13.9996C5.55791 13.5785 5.89475 13.2627 6.3158 13.2627ZM5.55791 15.4101C5.57896 15.4101 5.57896 15.4101 5.60001 15.389L6.00001 15.0943C6.08422 15.0311 6.18949 15.0311 6.2737 15.0943L6.6737 15.389C6.86317 15.5154 7.0737 15.5785 7.30528 15.5785C7.53685 15.5785 7.74738 15.5154 7.93685 15.368L8.35791 15.0733C8.44212 15.0101 8.54738 15.0101 8.63159 15.0733L9.05264 15.368C9.43159 15.6417 9.93685 15.6417 10.3158 15.368L10.7158 15.0733C10.8 15.0101 10.9053 15.0101 10.9895 15.0733L11.4105 15.368C11.7895 15.6417 12.2947 15.6417 12.6737 15.368L13.0737 15.0733C13.1579 15.0101 13.2632 15.0101 13.3474 15.0733L13.7684 15.368H13.7895V16.5048H5.55791V15.4101Z" fill="#34BE5B"/>
</svg>
<svg fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><rect height="18" rx="2" ry="2" width="18" x="3" y="4"/><line x1="16" x2="16" y1="2" y2="6"/><line x1="8" x2="8" y1="2" y2="6"/><line x1="3" x2="21" y1="10" y2="10"/></svg>
<svg width="15" height="11" viewBox="0 0 15 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.648 0.254006C15.0729 0.63092 15.1197 1.29011 14.7526 1.72636L6.54308 10.6386C6.3546 10.8626 6.08235 10.9939 5.79411 10.9998C5.50587 11.0057 5.22875 10.8856 5.03174 10.6695L0.274381 5.45008C-0.109266 5.02918 -0.0879995 4.36859 0.321879 3.97463C0.731757 3.58066 1.37504 3.6025 1.75868 4.0234L5.74365 8.39538L13.2143 0.36143C13.5813 -0.0748123 14.2232 -0.122908 14.648 0.254006Z" fill="currentColor"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path d="M15.5864 3.00346L3 15.5898L4.4142 17.004L17.0006 4.41766L15.5864 3.00346Z" fill="currentColor"/>
<path d="M4.4142 2.99986L3 4.41406L15.5864 17.0004L17.0006 15.5862L4.4142 2.99986Z" fill="currentColor"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03115 1.6947C3.60817 1.6947 1.6947 3.60817 1.6947 6.03115V25.9688C1.6947 28.3028 3.61871 30.3053 6.03115 30.3053H25.9688C28.3028 30.3053 30.3053 28.3813 30.3053 25.9688V6.03115C30.3053 3.69724 28.3813 1.6947 25.9688 1.6947H6.03115ZM0 6.03115C0 2.67221 2.67221 0 6.03115 0H25.9688C29.3383 0 32 2.78251 32 6.03115V25.9688C32 29.3383 29.2175 32 25.9688 32H6.03115C2.66166 32 0 29.2175 0 25.9688V6.03115Z" fill="#4591A9"/>
<path d="M23 21H9V22H23V21Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M23 24H9V25H23V24Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M16 27H9V28H16V27Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M9.51852 18H22.4815C22.7682 18 23 17.7468 23 17.4348V5.56522C23 5.25322 22.7682 5 22.4815 5H9.51852C9.23178 5 9 5.25322 9 5.56522V17.4348C9 17.7468 9.23178 18 9.51852 18ZM16.8063 11.5L21.963 6.77817V16.2218L16.8063 11.5ZM21.0581 16.8696H10.9419L16 12.2382L21.0581 16.8696ZM16 10.7618L10.9419 6.13043H21.0576L16 10.7618ZM15.1937 11.5L10.037 16.2218V6.77817L15.1937 11.5Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.93335 6H16.0667V17.1981C16.0667 18.1289 15.356 19 14.3377 19H5.66235C4.64407 19 3.93335 18.1289 3.93335 17.1981V6ZM5.02535 7.04107V17.1981C5.02535 17.6827 5.37392 17.9589 5.66235 17.9589H14.3377C14.6261 17.9589 14.9747 17.6827 14.9747 17.1981V7.04107H5.02535Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.2 9C7.45774 9 7.66667 9.2032 7.66667 9.45385V15.5461C7.66667 15.7968 7.45774 16 7.2 16C6.94227 16 6.73334 15.7968 6.73334 15.5461V9.45385C6.73334 9.2032 6.94227 9 7.2 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99999 9C10.2577 9 10.4667 9.2032 10.4667 9.45385V15.5461C10.4667 15.7968 10.2577 16 9.99999 16C9.74226 16 9.53333 15.7968 9.53333 15.5461V9.45385C9.53333 9.2032 9.74226 9 9.99999 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8 9C13.0577 9 13.2666 9.2032 13.2666 9.45385V15.5461C13.2666 15.7968 13.0577 16 12.8 16C12.5422 16 12.3333 15.7968 12.3333 15.5461V9.45385C12.3333 9.2032 12.5422 9 12.8 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.36367 2.02914C8.06404 2.02914 7.81224 2.26453 7.81224 2.56502V3.48459C7.81224 3.76878 7.57072 3.99916 7.27279 3.99916C6.97486 3.99916 6.73334 3.76878 6.73334 3.48459V2.56502C6.73334 1.70528 7.45866 1 8.36367 1H11.6363C12.5413 1 13.2667 1.70528 13.2667 2.56502V3.48543C13.2667 3.76962 13.0252 4 12.7272 4C12.4293 4 12.1878 3.76962 12.1878 3.48543V2.56502C12.1878 2.26453 11.936 2.02914 11.6363 2.02914H8.36367Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 3.62111C3 3.27808 3.24065 3 3.5375 3H16.4625C16.7594 3 17 3.27808 17 3.62111V6.37889C17 6.72192 16.7594 7 16.4625 7H3.5375C3.24065 7 3 6.72192 3 6.37889V3.62111ZM4 4.15556V5.84444H16V4.15556H4Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M27.3626 17L27.7912 33.7434H32.1923L32.6374 17H27.3626ZM30 43C31.8626 43 33 41.8269 33 39.9389C33 38.0326 31.8626 36.8595 30 36.8595C28.1538 36.8595 27 38.0326 27 39.9389C27 41.8269 28.1538 43 30 43Z" fill="white"/>
<circle cx="30" cy="30" r="30" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.3386 20.5131C44.1369 21.2746 44.2249 22.6063 43.5352 23.4876L28.1073 41.4921C27.7531 41.9447 27.2415 42.2099 26.6998 42.2218C26.1581 42.2337 25.6374 41.9911 25.2671 41.5545L17.849 33.1189C17.128 32.2686 17.168 30.9341 17.9382 30.1382C18.7085 29.3423 19.9174 29.3864 20.6383 30.2367L26.605 36.9604L40.6441 20.7302C41.3339 19.8489 42.5402 19.7517 43.3386 20.5131Z" fill="white"/>
</svg>
<svg width="21" height="20" viewBox="0 0 21 20" xmlns="http://www.w3.org/2000/svg">
<path d="M20.0379 14.5562V18.9915C20.0379 19.0799 20.0253 19.1619 20.0063 19.2376C19.918 19.6729 19.5331 20.001 19.0789 20.001H0.952682C0.466877 20.001 0.0630916 19.6288 0.0126184 19.1556C4.7947e-08 19.0988 0 19.0483 0 18.9852V14.5499C0 14.0262 0.429023 13.6035 0.946373 13.6035C1.20505 13.6035 1.4448 13.7108 1.61514 13.8811C1.78549 14.0515 1.89275 14.2912 1.89275 14.5499V18.1019H18.1514V14.5499C18.1514 14.0262 18.5805 13.6035 19.0978 13.6035C19.3565 13.6035 19.5962 13.7108 19.7666 13.8811C19.9306 14.0578 20.0379 14.2975 20.0379 14.5562Z" fill="currentColor"/>
<path d="M15.4764 10.1136L10.8265 14.7634C10.8202 14.776 10.8076 14.7824 10.8013 14.7887C10.631 14.959 10.4101 15.0663 10.1893 15.0978C10.1704 15.0978 10.1515 15.1041 10.1325 15.1041C10.0947 15.1104 10.0568 15.1104 10.019 15.1104L9.91172 15.1041C9.89279 15.1041 9.87386 15.0978 9.85493 15.0978C9.6278 15.0663 9.41329 14.959 9.24295 14.7887C9.23664 14.7824 9.22402 14.7697 9.21771 14.7634L4.56786 10.1136C4.35335 9.89907 4.24609 9.61515 4.24609 9.33124C4.24609 9.04733 4.35335 8.76342 4.56786 8.54891C4.99688 8.11988 5.6972 8.11988 6.13253 8.54891L8.92749 11.3439V1.1041C8.92749 0.498423 9.42591 0 10.0316 0C10.3344 0 10.612 0.126183 10.8139 0.321767C11.0158 0.52366 11.1357 0.794954 11.1357 1.1041V11.3439L13.9306 8.54891C14.3597 8.11988 15.06 8.11988 15.4953 8.54891C15.9054 8.98424 15.9054 9.68456 15.4764 10.1136Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.1274 29.4889L33.2021 21.4141C33.9832 20.6331 35.2495 20.6331 36.0305 21.4142L38.5896 23.9732C39.3706 24.7542 39.3706 26.0206 38.5896 26.8016L30.5148 34.8764C29.7338 35.6574 28.4674 35.6574 27.6864 34.8764L25.1274 32.3173C24.3463 31.5363 24.3463 30.27 25.1274 29.4889ZM20.4042 38.3831C20.2211 39.1155 20.8845 39.7789 21.6169 39.5958L25.5428 38.6143C26.2969 38.4258 26.557 37.4867 26.0074 36.9371L23.0629 33.9927C22.5133 33.443 21.5742 33.7031 21.3857 34.4572L20.4042 38.3831Z" fill="white"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 24C23 23.4477 23.4477 23 24 23H28C28.5523 23 29 22.5523 29 22V19C29 18.4477 28.5523 18 28 18H22.5C20.0147 18 18 20.0147 18 22.5V38.5C18 40.9853 20.0147 43 22.5 43H28C28.5523 43 29 42.5523 29 42V39C29 38.4477 28.5523 38 28 38H24C23.4477 38 23 37.5523 23 37V24Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.9941 34.053L28.6026 33.9976C27.4981 33.9862 26.6119 33.0817 26.6232 31.9772L26.6541 28.9799C26.6654 27.8754 27.57 26.9892 28.6745 27.0005L33.9805 27.0551L33.9746 23.9997L42.9998 30.4999L33.9998 36.9998L33.9941 34.053Z" fill="white"/>
</svg>
<svg width="18" height="10" viewBox="0 0 18 10" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18 7L8.44999 7C8.21836 5.85888 7.20948 5 6 5C4.79052 5 3.78164 5.85888 3.55001 7L2.62268e-07 7L1.74845e-07 8L3.55001 8C3.78164 9.14112 4.79052 10 6 10C7.20948 10 8.21836 9.14112 8.44999 8L18 8L18 7ZM13.5 2.5C13.5 3.32843 12.8284 4 12 4C11.1716 4 10.5 3.32843 10.5 2.5C10.5 1.67157 11.1716 0.999999 12 0.999999C12.8284 1 13.5 1.67157 13.5 2.5ZM12 5C13.2095 5 14.2184 4.14112 14.45 3L18 3L18 2L14.45 2C14.2184 0.85888 13.2095 -4.18801e-07 12 -5.24537e-07C10.7905 -6.30273e-07 9.78164 0.858879 9.55001 2L6.99382e-07 2L6.11959e-07 3L9.55001 3C9.78164 4.14112 10.7905 5 12 5Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path d="M30 31.041C29.9168 31.041 29.8336 31.0288 29.7544 31.0003L13.5466 25.5814C13.2218 25.4717 13 25.1589 13 24.8096V22.5591C13 22.1976 13.2337 21.8767 13.5743 21.7792L29.7822 17.0305C29.9247 16.9898 30.0753 16.9898 30.2178 17.0305L46.4257 21.7792C46.7663 21.8807 47 22.1976 47 22.5591V24.8096C47 25.163 46.7782 25.4717 46.4534 25.5814L41.7321 27.1616L30.2456 31.0044C30.1664 31.0288 30.0832 31.041 30 31.041Z" fill="white"/>
<path d="M29.7979 37.8692C26.1936 37.8692 22.708 36.5693 20.4741 34.392C20.3157 34.2376 20.2285 34.0264 20.2285 33.803V27.8925C20.2285 27.4457 20.585 27.0801 21.0207 27.0801C21.4564 27.0801 21.8129 27.4457 21.8129 27.8925V33.4455C23.7656 35.2044 26.7204 36.2444 29.7979 36.2444C32.8755 36.2444 35.8303 35.2044 37.783 33.4455V27.5878C37.783 27.141 38.1395 26.7754 38.5752 26.7754C39.0109 26.7754 39.3674 27.141 39.3674 27.5878V33.807C39.3674 34.0305 39.2802 34.2417 39.1218 34.3961C36.8879 36.5693 33.4023 37.8692 29.7979 37.8692Z" fill="white"/>
<path d="M41.6331 35.3999C41.1974 35.3999 40.8409 35.0343 40.8409 34.5875V25.3541L30.5823 22.5146C30.1585 22.3968 29.9089 21.9541 30.0238 21.5194C30.1387 21.0847 30.5704 20.8288 30.9942 20.9466L41.839 23.9486C42.1836 24.0461 42.4252 24.367 42.4252 24.7326V34.5875C42.4252 35.0343 42.0688 35.3999 41.6331 35.3999Z" fill="white"/>
<path d="M41.839 27C41.4033 27 40.8409 27.4468 40.8409 27V25.3541L30.5823 22.5146C30.1585 22.3968 29.9089 21.9541 30.0238 21.5194C30.1387 21.0847 30.5704 20.8288 30.9942 20.9466L41.839 23.9486C42.1836 24.0461 42.4252 24.367 42.4252 24.7326V27C42.4252 27.4468 42.2747 27 41.839 27Z" fill="#D4E3DD"/>
<path d="M41.637 39.0834C40.2349 39.0834 39.0902 37.9134 39.0902 36.4714C39.0902 35.0333 40.2309 33.8594 41.637 33.8594C43.0431 33.8594 44.1839 35.0293 44.1839 36.4714C44.1799 37.9094 43.0392 39.0834 41.637 39.0834ZM41.637 35.4883C41.1063 35.4883 40.6746 35.9311 40.6746 36.4754C40.6746 37.0198 41.1063 37.4625 41.637 37.4625C42.1678 37.4625 42.5995 37.0198 42.5995 36.4754C42.5995 35.9311 42.1638 35.4883 41.637 35.4883Z" fill="white"/>
<path d="M43.3957 42.9999H39.8745C39.6328 42.9999 39.4031 42.8862 39.2526 42.6871C39.1021 42.4921 39.0466 42.2362 39.106 41.9925L40.0725 37.9465C40.1755 37.5119 40.6072 37.2438 41.031 37.3494C41.3835 37.4388 41.6212 37.7556 41.6331 38.109C41.645 37.7556 41.8866 37.4388 42.2351 37.3494C42.6589 37.2438 43.0907 37.5078 43.1936 37.9465L44.1601 41.9925C44.2195 42.2362 44.1641 42.4921 44.0135 42.6871C43.867 42.8862 43.6373 42.9999 43.3957 42.9999Z" fill="white"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="8.5" fill="#FF0000" fill-opacity="0.1" stroke="#FF0D0D"/>
<line x1="15.3536" y1="3.35355" x2="3.35355" y2="15.3536" stroke="#E40606"/>
</svg>
<svg width="16" height="20" viewBox="0 0 16 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.30841C4.32465 1.30841 1.28736 4.44313 1.28736 8.32759C1.28736 11.3591 2.9183 13.0882 5.56846 15.8979C5.8205 16.1651 6.08177 16.4421 6.35172 16.7309C6.56916 16.9635 6.8106 17.1986 7.06572 17.4467L7.07155 17.4523C7.32044 17.6944 7.58254 17.9493 7.82299 18.2066L8 18.3959L8.17701 18.2066C8.41746 17.9493 8.67956 17.6944 8.92845 17.4523L8.93428 17.4467C9.1894 17.1986 9.43083 16.9635 9.64828 16.7309C9.6532 16.7257 9.65821 16.7205 9.66331 16.7154C12.5626 13.8137 14.7126 11.6454 14.7126 8.32759C14.7126 4.44313 11.6754 1.30841 8 1.30841ZM0 8.32759C0 3.75166 3.5834 0 8 0C12.4166 0 16 3.75166 16 8.32759C16 12.2127 13.4696 14.7438 10.7296 17.4846C10.6778 17.5363 10.626 17.5882 10.5741 17.6401C10.3357 17.8947 10.0764 18.1468 9.83011 18.3864L9.82434 18.392C9.56922 18.6401 9.32778 18.8751 9.11034 19.1077L8.46667 19.7964C8.34514 19.9264 8.17644 20 8 20C7.82356 20 7.65486 19.9264 7.53333 19.7964L6.88966 19.1077C6.67221 18.8751 6.43078 18.6401 6.17566 18.392L6.16989 18.3864C5.92097 18.1443 5.65886 17.8894 5.41839 17.6321C5.1369 17.3309 4.85996 17.0387 4.58923 16.7531C2.0127 14.0347 0 11.9111 0 8.32759Z" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.89485 5.07373C6.29445 5.07373 4.96546 6.4146 4.96546 8.10822C4.96546 9.80183 6.29445 11.1427 7.89485 11.1427C9.49525 11.1427 10.8242 9.80183 10.8242 8.10822C10.8242 6.4146 9.49525 5.07373 7.89485 5.07373ZM3.6781 8.10822C3.6781 5.73905 5.54854 3.78638 7.89485 3.78638C10.2412 3.78638 12.1116 5.73905 12.1116 8.10822C12.1116 10.4774 10.2412 12.4301 7.89485 12.4301C5.54854 12.4301 3.6781 10.4774 3.6781 8.10822Z" fill="#34BE5B"/>
</svg>
<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.6954 13.3886C10.9959 13.1845 11.4087 13.0305 11.8737 13.0851C12.932 13.2092 14.0739 13.7526 15.0703 14.4414C16.078 15.1381 17.0177 16.0392 17.6572 16.972C18.1651 17.7127 18.08 18.5254 17.5902 19.1216C17.1306 19.681 16.365 19.9999 15.5586 19.9999H2.44191C1.63498 19.9999 0.869081 19.6806 0.409519 19.1209C-0.0803018 18.5242 -0.164976 17.7113 0.343335 16.9704C0.98303 16.0381 1.92231 15.1373 2.92962 14.4409C3.92557 13.7523 5.06688 13.2091 6.12487 13.0851C6.58984 13.0305 7.00265 13.1845 7.30321 13.3886L8.99928 14.5402L10.6954 13.3886ZM11.6678 14.5208C11.6503 14.5258 11.623 14.5372 11.5896 14.5599L9.44642 16.0151C9.17934 16.1964 8.81922 16.1964 8.55214 16.0151L6.40892 14.5599C6.37556 14.5372 6.34821 14.5258 6.33078 14.5208C6.32051 14.5179 6.31494 14.5174 6.31318 14.5174C5.61973 14.5989 4.72633 14.9883 3.83455 15.6049C2.95389 16.2138 2.15219 16.9909 1.62832 17.7545C1.54196 17.8803 1.52793 17.9723 1.5309 18.031C1.53399 18.0922 1.55797 18.1621 1.61971 18.2373C1.75022 18.3963 2.04055 18.5566 2.44191 18.5566H15.5586C15.9597 18.5566 16.2499 18.3964 16.3803 18.2376C16.442 18.1625 16.466 18.0928 16.4691 18.0317C16.4721 17.9732 16.4581 17.8814 16.3719 17.7556C15.8484 16.992 15.0465 16.2146 14.1653 15.6054C13.2731 14.9886 12.3791 14.5989 11.6854 14.5174C11.6836 14.5174 11.6781 14.5179 11.6678 14.5208Z" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.999 1.44331C6.80523 1.44331 4.9055 3.31049 4.9055 5.76178C4.9055 8.21307 6.80523 10.0803 8.999 10.0803C11.1928 10.0803 13.0925 8.21307 13.0925 5.76178C13.0925 3.31049 11.1928 1.44331 8.999 1.44331ZM3.375 5.76178C3.375 2.6459 5.82595 0 8.999 0C12.172 0 14.623 2.6459 14.623 5.76178C14.623 8.87766 12.172 11.5236 8.999 11.5236C5.82595 11.5236 3.375 8.87766 3.375 5.76178Z" fill="#34BE5B"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 15.2159C19 15.446 18.9574 15.7464 18.8722 16.1172C18.7869 16.4879 18.6974 16.7798 18.6037 16.9929C18.4247 17.419 17.9048 17.8707 17.044 18.348C16.2429 18.7827 15.4503 19 14.6662 19C14.4361 19 14.2124 18.9851 13.995 18.9553C13.7777 18.9254 13.5327 18.8722 13.26 18.7955C12.9872 18.7188 12.7848 18.6569 12.6527 18.6101C12.5206 18.5632 12.2841 18.4759 11.9432 18.348C11.6023 18.2202 11.3935 18.1435 11.3168 18.1179C10.4815 17.8196 9.73578 17.4659 9.07954 17.0568C7.98864 16.3835 6.86151 15.4652 5.69816 14.3018C4.5348 13.1385 3.61647 12.0114 2.94317 10.9205C2.5341 10.2642 2.18041 9.51846 1.88211 8.68322C1.85653 8.60651 1.77984 8.3977 1.65199 8.05681C1.52414 7.7159 1.43678 7.47938 1.3899 7.34729C1.34304 7.21519 1.28125 7.01277 1.20454 6.74003C1.12785 6.46731 1.07457 6.22229 1.04475 6.00495C1.01489 5.78765 1 5.56393 1 5.3338C1 4.54971 1.21734 3.75709 1.65197 2.95597C2.12925 2.09517 2.58098 1.57528 3.00711 1.3963C3.22017 1.30255 3.51207 1.21306 3.88281 1.12785C4.25354 1.04261 4.55398 1 4.7841 1C4.90342 1 4.99291 1.01278 5.05255 1.03836C5.20597 1.08949 5.43181 1.41335 5.73012 2.00995C5.82386 2.17188 5.9517 2.402 6.11363 2.70028C6.27556 2.99858 6.42472 3.26918 6.56109 3.51207C6.69744 3.75497 6.82954 3.98296 6.95738 4.19604C6.98296 4.23012 7.05753 4.33666 7.1811 4.51562C7.30468 4.69461 7.39631 4.84588 7.45597 4.96946C7.51563 5.09303 7.54544 5.2145 7.54544 5.3338C7.54544 5.50425 7.42401 5.71734 7.1811 5.97301C6.93821 6.2287 6.67401 6.46307 6.3885 6.67613C6.10298 6.8892 5.83878 7.11506 5.59589 7.3537C5.35298 7.59232 5.23153 7.78836 5.23153 7.94176C5.23153 8.01847 5.25283 8.11434 5.29546 8.22941C5.33807 8.34446 5.37428 8.43182 5.40411 8.49148C5.43394 8.55114 5.4936 8.65341 5.58309 8.79829C5.67258 8.94319 5.72161 9.02415 5.73012 9.0412C6.37783 10.2088 7.11931 11.2102 7.95454 12.0455C8.78978 12.8807 9.79119 13.6222 10.9588 14.2699C10.9759 14.2784 11.0568 14.3274 11.2017 14.4169C11.3466 14.5064 11.4489 14.5661 11.5085 14.5959C11.5682 14.6257 11.6555 14.6619 11.7706 14.7045C11.8857 14.7472 11.9815 14.7685 12.0582 14.7685C12.2116 14.7685 12.4077 14.647 12.6463 14.4041C12.8849 14.1612 13.1108 13.897 13.3239 13.6115C13.5369 13.326 13.7713 13.0618 14.027 12.8189C14.2827 12.576 14.4957 12.4545 14.6662 12.4545C14.7855 12.4545 14.907 12.4844 15.0305 12.544C15.1541 12.6037 15.3054 12.6953 15.4844 12.8189C15.6634 12.9425 15.7699 13.017 15.804 13.0426C16.017 13.1705 16.245 13.3026 16.4879 13.4389C16.7308 13.5753 17.0014 13.7244 17.2997 13.8864C17.598 14.0483 17.8281 14.1761 17.99 14.2699C18.5867 14.5682 18.9105 14.794 18.9616 14.9475C18.9872 15.0071 19 15.0966 19 15.2159Z" stroke="#34BE5B" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
<rect x="0.5" y="0.5" width="29" height="29" rx="2.5" fill="none" stroke="currentColor"/>
<circle cx="18.75" cy="8.25" r="2.25" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6627 9.00918C11.9837 8.95935 12.3032 9.11462 12.5115 9.42168L16.27 15.5254L18.8862 13.1402C19.0778 12.8557 19.5437 12.7094 19.6641 12.7165C19.9626 12.7341 20.2372 12.9241 20.4061 13.2298L25.3328 22.1462C25.5331 22.5087 25.5551 22.979 25.3899 23.3678C25.2248 23.7566 24.8997 24 24.5455 24H5.45455C5.12593 24 4.82041 23.7903 4.64584 23.4449C4.47126 23.0995 4.45217 22.667 4.5953 22.3L10.922 9.66843C11.0629 9.30716 11.3417 9.05901 11.6627 9.00918ZM11.9991 12.3444L6.97684 21.6316H22.7338L19.5437 15.858L17.0053 18.1276C16.8243 18.3964 16.5567 18.552 16.2745 18.5526C15.9922 18.5533 15.7242 18.3989 15.5424 18.131L11.9991 12.3444Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#34BE5B"/>
<path d="M31.9349 31.858H39.6803C40.7065 31.858 41.5383 31.0261 41.5383 29.9999C41.5383 28.9737 40.7065 28.1418 39.6803 28.1418H31.9349V20.3964C31.9349 19.3278 31.0686 18.4614 29.9999 18.4614C28.9312 18.4614 28.0649 19.3278 28.0649 20.3964V28.1418H20.3195C19.2933 28.1418 18.4614 28.9737 18.4614 29.9999C18.4614 31.0261 19.2933 31.858 20.3195 31.858H28.0649V39.6033C28.0649 40.672 28.9312 41.5383 29.9999 41.5383C31.0686 41.5383 31.9349 40.672 31.9349 39.6033V31.858Z" fill="white"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path d="M8.8 15.6C5.04 15.6 2 12.56 2 8.8C2 5.04 5.04 2 8.8 2C12.56 2 15.6 5.04 15.6 8.8C15.6 12.56 12.56 15.6 8.8 15.6ZM8.8 3.6C5.92 3.6 3.6 5.92 3.6 8.8C3.6 11.68 5.92 14 8.8 14C11.68 14 14 11.68 14 8.8C14 5.92 11.68 3.6 8.8 3.6Z" fill="currentColor"/>
<path d="M17.1999 18.0004C16.9599 18.0004 16.7999 17.9204 16.6399 17.7604L12.6399 13.7604C12.3199 13.4404 12.3199 12.9604 12.6399 12.6404C12.9599 12.3204 13.4399 12.3204 13.7599 12.6404L17.7599 16.6404C18.0799 16.9604 18.0799 17.4404 17.7599 17.7604C17.5999 17.9204 17.4399 18.0004 17.1999 18.0004Z" fill="currentColor"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M31 12.7603C31 12.4872 31 21.6064 31 21.5V9.552C31 8.69621 30.2821 8 29.3997 8H8.77233C7.88985 8 7.17199 8.69621 7.17199 9.55193V13.9647H1.63974C1.28639 13.9647 1 14.2426 1 14.5854C1 14.9282 1.28639 15.2061 1.63974 15.2061H7.17199V16.2479H3.34671C2.99336 16.2479 2.70697 16.5257 2.70697 16.8686C2.70697 17.2113 2.99336 17.4892 3.34671 17.4892H7.17199V18.531H4.93269C4.57934 18.531 4.29295 18.8089 4.29295 19.1517C4.29295 19.4946 4.57934 19.7724 4.93269 19.7724H7.17199V21.5C7.17199 21.6063 7.17199 21.8966 7.17199 22V22.5C7.17199 21.9888 7.17199 22.1148 7.17199 22.5C7.17199 23.5 7.5 23.9957 8.45147 23.9957H9.5H28.5L29.5 24C30.5 24 31 23.5 31 22.5C31 22.3394 31 12.9174 31 12.7603ZM29.7205 22.0649L21.9576 16.6963L29.7205 9.98814V22.0649ZM20.5209 16.2756C20.5101 16.2845 20.4992 16.2936 20.4889 16.3033L19.0837 17.5176L17.5602 16.2152C17.555 16.2106 17.5496 16.2061 17.5443 16.2017L9.40226 9.24138H28.6609L20.5209 16.2756ZM18.663 18.8125C18.7839 18.9158 18.9349 18.9674 19.0859 18.9674C19.2381 18.9674 19.3902 18.915 19.5114 18.8103L20.9777 17.5432L28.5129 22.7543H9.61544L17.0869 17.465L18.663 18.8125ZM11.1193 18.531H8.45147V17.4892H11.1193C11.4726 17.4892 11.759 17.2114 11.759 16.8686C11.759 16.5257 11.4726 16.2479 11.1193 16.2479H8.45147V15.2061H11.1193C11.4726 15.2061 11.759 14.9282 11.759 14.5854C11.759 14.2426 11.4726 13.9647 11.1193 13.9647H8.45147V10.0831L16.1035 16.6245L8.45147 22.0416V19.7724H11.1193C11.4726 19.7724 11.759 19.4946 11.759 19.1517C11.759 18.8089 11.4726 18.531 11.1193 18.531Z" fill="currentColor"/>
</svg>
<svg width="10" height="10" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
<path d="M4 10L5 10L5 4L4 4L4 10Z" fill="currentColor"/>
<path d="M8 4L4.5 -3.0598e-07L1 4L8 4Z" fill="currentColor"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 10C5 9.448 4.552 9 4 9H1C0.448 9 0 9.448 0 10C0 10.552 0.448 11 1 11H4C4.552 11 5 10.552 5 10ZM19 9H16C15.448 9 15 9.448 15 10C15 10.552 15.448 11 16 11H19C19.552 11 20 10.552 20 10C20 9.448 19.552 9 19 9ZM10 15C9.448 15 9 15.448 9 16V19C9 19.553 9.448 20 10 20C10.552 20 11 19.553 11 19V16C11 15.448 10.552 15 10 15ZM10 0C9.448 0 9 0.448 9 1V4C9 4.552 9.448 5 10 5C10.552 5 11 4.552 11 4V1C11 0.448 10.552 0 10 0ZM6.366 1.706C6.09 1.228 5.479 1.063 5 1.34C4.521 1.616 4.358 2.228 4.634 2.706L6.134 5.304C6.41 5.782 7.021 5.946 7.5 5.67C7.979 5.394 8.142 4.782 7.866 4.304L6.366 1.706ZM13.866 14.696C13.59 14.218 12.979 14.054 12.5 14.33C12.021 14.606 11.858 15.218 12.134 15.696L13.634 18.294C13.91 18.772 14.521 18.937 15 18.66C15.479 18.384 15.642 17.772 15.366 17.294L13.866 14.696ZM5.67 12.5C5.394 12.021 4.782 11.858 4.304 12.134L1.706 13.634C1.228 13.91 1.063 14.521 1.34 15C1.616 15.479 2.228 15.642 2.706 15.366L5.304 13.866C5.782 13.59 5.946 12.979 5.67 12.5ZM14.33 7.5C14.606 7.979 15.218 8.142 15.696 7.866L18.294 6.366C18.772 6.09 18.937 5.479 18.66 5C18.384 4.521 17.772 4.358 17.294 4.634L14.696 6.134C14.218 6.41 14.054 7.021 14.33 7.5ZM1.706 6.366L4.304 7.866C4.782 8.142 5.394 7.979 5.67 7.5C5.946 7.021 5.782 6.41 5.304 6.134L2.706 4.634C2.228 4.358 1.616 4.521 1.34 5C1.063 5.479 1.228 6.09 1.706 6.366ZM18.294 13.634L15.696 12.134C15.218 11.858 14.606 12.021 14.33 12.5C14.054 12.979 14.218 13.59 14.696 13.866L17.294 15.366C17.772 15.642 18.384 15.479 18.66 15C18.937 14.521 18.772 13.91 18.294 13.634ZM7.5 14.33C7.021 14.054 6.41 14.218 6.134 14.696L4.634 17.294C4.358 17.772 4.521 18.384 5 18.66C5.479 18.937 6.09 18.772 6.366 18.294L7.866 15.696C8.142 15.218 7.979 14.606 7.5 14.33ZM12.5 5.67C12.979 5.946 13.59 5.782 13.866 5.304L15.366 2.706C15.642 2.228 15.479 1.616 15 1.34C14.521 1.063 13.91 1.228 13.634 1.706L12.134 4.304C11.858 4.782 12.021 5.394 12.5 5.67Z" fill="url(#paint0_angular)"/>
<defs>
<radialGradient id="paint0_angular" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10 10) scale(10)">
<stop offset="0.203111" stop-color="white"/>
<stop offset="0.703211" stop-color="#34BE5B"/>
</radialGradient>
</defs>
</svg>
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.1578 28.8951H23.5262C24.6841 28.8951 25.5262 27.9478 24.8946 26.8951C23.7367 25.2109 21.5262 23.4215 19.842 23.2109C19.6315 23.2109 19.4209 23.2109 19.2104 23.4215L17.2104 24.8951L15.2104 23.4215C14.9999 23.3162 14.7894 23.3162 14.5788 23.3162C12.8946 23.5267 10.6841 25.2109 9.5262 27.0004C8.89462 27.9478 9.73673 29.0004 10.8946 29.0004H16.263H18.1578V28.8951Z" fill="#C10A78"/>
<path d="M6.47368 1H27.5263C30.5789 1 33 3.52632 33 6.47368V27.5263C33 30.5789 30.4737 33 27.5263 33H6.47368C3.42105 33 1 30.4737 1 27.5263V6.47368C1 3.42105 3.42105 1 6.47368 1Z" stroke="#C10A78" stroke-width="1.5"/>
<path d="M17.0001 12.1582C14.7896 12.1582 12.7896 14.1582 12.7896 16.895C12.7896 19.6319 14.7896 21.6319 17.0001 21.6319C19.2106 21.6319 21.2106 19.6319 21.2106 16.895C21.2106 14.1582 19.2106 12.1582 17.0001 12.1582Z" fill="#C10A78"/>
<path d="M23.3158 7.52539C21.2106 7.52539 19.4211 9.10434 18.8948 11.2096C21.1053 12.0517 22.579 14.2622 22.579 16.8938C22.579 17.2096 22.579 17.4201 22.4737 17.7359C22.7895 17.8412 23 17.8412 23.3158 17.8412C25.9474 17.8412 27.9474 15.5254 27.9474 12.6833C27.9474 9.84118 25.9474 7.52539 23.3158 7.52539Z" fill="#D0A3BE"/>
<path d="M11.5264 16.8938C11.5264 14.3675 13.0001 12.0517 15.2106 11.2096C14.5791 9.10434 12.7896 7.52539 10.6843 7.52539C8.05273 7.52539 6.05273 9.84118 6.05273 12.6833C6.05273 15.5254 8.158 17.8412 10.6843 17.8412C11.0001 17.8412 11.2106 17.8412 11.5264 17.7359C11.5264 17.4201 11.5264 17.2096 11.5264 16.8938Z" fill="#D0A3BE"/>
<path d="M11.1052 23.2101C11.9473 22.5785 12.9999 22.0522 13.9473 21.8417C13.1052 21.2101 12.4736 20.368 12.0526 19.4206L10.6841 20.4733L8.57887 18.9996C8.36835 18.8943 8.15782 18.7891 7.94729 18.7891C6.26308 18.9996 4.05256 20.6838 2.89466 22.4733C2.36835 23.4206 3.21045 24.368 4.36835 24.368H9.73677C10.1578 23.947 10.5789 23.5259 11.1052 23.2101Z" fill="#D0A3BE"/>
<path d="M30.9999 22.3678C29.842 20.6836 27.6315 18.8941 25.9473 18.6836C25.7367 18.6836 25.5262 18.6836 25.3157 18.8941L23.2104 20.3678L21.842 19.4204C21.421 20.3678 20.7894 21.2099 19.9473 21.8415C20.8946 22.052 21.9473 22.5783 22.7894 23.2099C23.2104 23.5257 23.7367 23.9468 24.1578 24.3678H29.6315C30.7894 24.3678 31.6315 23.4204 30.9999 22.3678Z" fill="#D0A3BE"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.9999 26.9895H5.06652V21.0438C5.06652 20.3758 4.53319 19.8413 3.86651 19.8413C3.19984 19.8413 2.6665 20.3758 2.6665 21.0438V28.192C2.6665 28.8601 3.19984 29.3945 3.86651 29.3945H10.9999C11.6666 29.3945 12.1999 28.8601 12.1999 28.192C12.1999 27.524 11.6666 26.9895 10.9999 26.9895Z" fill="#4591A9"/>
<path d="M3.86651 12.2256C4.53319 12.2256 5.06652 11.6911 5.06652 11.0231V5.07737H10.9999C11.6666 5.07737 12.1999 4.54293 12.1999 3.87487C12.1999 3.20681 11.6666 2.67236 10.9999 2.67236H3.86651C3.19984 2.67236 2.6665 3.20681 2.6665 3.87487V11.0231C2.6665 11.6911 3.19984 12.2256 3.86651 12.2256Z" fill="#4591A9"/>
<path d="M20.9998 5.07737H26.9332V11.0231C26.9332 11.6911 27.4665 12.2256 28.1332 12.2256C28.7999 12.2256 29.3332 11.6911 29.3332 11.0231V3.87487C29.3332 3.20681 28.7999 2.67236 28.1332 2.67236H20.9998C20.3331 2.67236 19.7998 3.20681 19.7998 3.87487C19.7998 4.54293 20.3331 5.07737 20.9998 5.07737Z" fill="#4591A9"/>
<path d="M28.1332 19.8413C27.4665 19.8413 26.9332 20.3758 26.9332 21.0438V26.9895H20.9998C20.3331 26.9895 19.7998 27.524 19.7998 28.192C19.7998 28.8601 20.3331 29.3945 20.9998 29.3945H28.1332C28.7999 29.3945 29.3332 28.8601 29.3332 28.192V21.0438C29.3332 20.3758 28.7999 19.8413 28.1332 19.8413Z" fill="#4591A9"/>
<path d="M30.7333 14.7642H26.4C25.6666 14.7642 25.1333 15.3654 25.1333 16.0335C25.1333 16.7683 25.7333 17.3028 26.4 17.3028H30.7333C31.4667 17.3028 32 16.7015 32 16.0335C32 15.2986 31.4 14.7642 30.7333 14.7642Z" fill="#4591A9"/>
<path d="M6.93339 16.0335C6.93339 15.2986 6.33339 14.7642 5.66671 14.7642H1.26668C0.600005 14.7642 0 15.2986 0 16.0335C0 16.7683 0.600005 17.3028 1.26668 17.3028H5.60005C6.33339 17.3028 6.93339 16.7683 6.93339 16.0335Z" fill="#4591A9"/>
<path d="M16.0001 25.1191C15.2667 25.1191 14.7334 25.7204 14.7334 26.3885V30.7308C14.7334 31.4657 15.3334 32.0001 16.0001 32.0001C16.7334 32.0001 17.2668 31.3989 17.2668 30.7308V26.3885C17.2668 25.7204 16.7334 25.1191 16.0001 25.1191Z" fill="#4591A9"/>
<path d="M16.0001 6.9478C16.7334 6.9478 17.2668 6.34655 17.2668 5.67849V1.26931C17.2668 0.601252 16.7334 0 16.0001 0C15.2667 0 14.7334 0.601252 14.7334 1.26931V5.61169C14.7334 6.34655 15.2667 6.9478 16.0001 6.9478Z" fill="#4591A9"/>
<path d="M15.4446 10.6108L7.67444 13.7392C7.39693 13.8783 7.39693 14.2954 7.67444 14.3649L10.8658 15.6163L10.9351 15.1296C11.0045 14.3649 11.4902 13.7392 12.2533 13.4611L15.514 12.4183C15.7221 12.3488 15.8609 12.3488 16.069 12.3488C16.2771 12.3488 16.4159 12.3488 16.624 12.4183L18.4278 12.9745V11.445C18.4278 11.3755 18.4278 11.3755 18.4278 11.306L16.624 10.5413C16.2078 10.4717 15.7915 10.4717 15.4446 10.6108Z" fill="#4591A9"/>
<path d="M21.1342 15.6165L24.3255 14.3651C24.603 14.2261 24.603 13.8089 24.3255 13.7394L20.5098 12.21V13.948C20.8566 14.2261 21.0648 14.7127 21.0648 15.1298L21.1342 15.6165Z" fill="#4591A9"/>
<path d="M18.3592 13.7394L16.3473 13.1137C16.1392 13.0441 15.8617 13.0441 15.6535 13.1137L12.3928 14.1565C11.9072 14.2955 11.6297 14.7126 11.5603 15.1993L11.144 21.039C11.144 21.3866 11.4909 21.6647 11.8378 21.5257L15.5148 20.1353C15.7923 20.0657 16.1392 20.0657 16.4167 20.1353L20.0936 21.5257C20.4405 21.6647 20.7874 21.3866 20.7874 21.039L20.5793 18.1192H18.0817L18.2898 16.4507C18.1511 16.2421 18.0123 15.964 18.0123 15.6859C18.0123 15.4079 18.0817 15.0602 18.2898 14.8517V13.7394H18.3592Z" fill="#4591A9"/>
<path d="M19.0529 16.2422L18.8448 17.4241H20.0242L19.8854 16.2422C20.0242 16.1032 20.1629 15.8946 20.1629 15.686C20.1629 15.4775 20.0242 15.2689 19.8854 15.1299V11.5148C19.8854 11.3062 19.6773 11.0977 19.4692 11.0977C19.261 11.0977 19.0529 11.3062 19.0529 11.5148V15.1299C18.8448 15.2689 18.7754 15.4775 18.7754 15.686C18.7754 15.8946 18.8448 16.1032 19.0529 16.2422Z" fill="#4591A9"/>
</svg>
<svg width="90" height="90" viewBox="0 0 90 90" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="45" cy="45" r="43.5" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M40.4989 23.4947L69.333 32.264C70.1256 32.5051 70.5729 33.3431 70.3322 34.1357L59.2087 70.7602C58.968 71.5529 58.1303 72 57.3377 71.759L28.5036 62.9897C27.711 62.7486 27.2637 61.9106 27.5044 61.1179L38.6279 24.4935C38.8687 23.7008 39.7063 23.2536 40.4989 23.4947Z" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M30.0092 25.3322L61.724 25.1484C62.5524 25.1436 63.2281 25.8112 63.2332 26.6396L63.4815 66.8476C63.4866 67.676 62.8192 68.3515 61.9908 68.3563L30.276 68.5401C29.4476 68.5449 28.7719 67.8773 28.7668 67.0488L28.5185 26.8408C28.5134 26.0124 29.1808 25.337 30.0092 25.3322Z" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M50.6963 21.4771C50.5219 19.2139 48.6159 17.4461 46.2996 17.4621C43.9833 17.4781 42.111 19.268 41.962 21.5283L36.7345 21.5571L36.7911 26.9566L55.9804 26.8478L55.9238 21.4483L50.6963 21.4771ZM46.3363 23.0814C45.4563 23.09 44.7403 22.3852 44.7319 21.4958C44.7229 20.6192 45.4303 19.9064 46.3232 19.8984C47.2033 19.8897 47.9193 20.5946 47.9277 21.484C47.9367 22.3605 47.2293 23.0733 46.3363 23.0814Z" fill="#006C43"/>
<path d="M40.1242 37.29C40.8068 36.1591 40.4397 34.6905 39.3044 34.0097C38.1691 33.3289 36.6954 33.6937 36.0128 34.8245C35.3302 35.9553 35.6972 37.424 36.8325 38.1048C37.9679 38.7856 39.4416 38.4208 40.1242 37.29Z" fill="#D2E744"/>
<path d="M38.067 49.8364C39.3913 49.8812 40.501 48.8484 40.5455 47.5293C40.5901 46.2103 39.5526 45.1047 38.2283 45.0598C36.904 45.0149 35.7943 46.0478 35.7498 47.3668C35.7052 48.6858 36.7427 49.7915 38.067 49.8364Z" fill="#D2E744"/>
<path d="M40.5876 59.0009C40.7534 57.6916 39.8222 56.4959 38.5076 56.3302C37.193 56.1645 35.9929 57.0916 35.827 58.4008C35.6612 59.7101 36.5924 60.9058 37.907 61.0715C39.2216 61.2372 40.4217 60.3102 40.5876 59.0009Z" fill="#D2E744"/>
<path d="M38.0689 37.7922L36.2486 35.9946L37.2589 34.9774L38.0584 35.7546L40.6281 33.1593L41.6634 34.1667L38.0689 37.7922Z" fill="#006C43"/>
<path d="M38.139 49.0334L36.3186 47.2358L37.329 46.2187L38.1284 46.9958L40.6981 44.4005L41.7334 45.4079L38.139 49.0334Z" fill="#006C43"/>
<path d="M38.2092 60.2746L36.3882 58.4906L37.3992 57.4599L38.198 58.2507L40.7683 55.6417L41.803 56.6627L38.2092 60.2746Z" fill="#006C43"/>
<path d="M49.744 33.0628L44.3785 33.0939C44.0202 33.096 43.7317 33.388 43.7339 33.7463C43.7361 34.1045 44.0283 34.3932 44.3865 34.3911L49.7521 34.36C50.1103 34.3579 50.3989 34.0659 50.3967 33.7076C50.3944 33.3494 50.1023 33.0607 49.744 33.0628Z" fill="#006C43"/>
<path d="M55.8755 35.3125L44.3956 35.3791C44.0373 35.3811 43.7487 35.6732 43.751 36.0314C43.7532 36.3896 44.0453 36.6783 44.4036 36.6763L55.8836 36.6097C56.2418 36.6076 56.5304 36.3156 56.5282 35.9574C56.5259 35.5991 56.2338 35.3104 55.8755 35.3125Z" fill="#006C43"/>
<path d="M55.8882 37.5821L44.4082 37.6486C44.05 37.6507 43.7614 37.9427 43.7636 38.3009C43.7659 38.6592 44.058 38.9479 44.4163 38.9458L55.8962 38.8793C56.2545 38.8772 56.5431 38.5851 56.5408 38.2269C56.5386 37.8687 56.2464 37.58 55.8882 37.5821Z" fill="#006C43"/>
<path d="M49.8208 44.4534L44.4552 44.4845C44.097 44.4866 43.8084 44.7787 43.8106 45.1369C43.8129 45.4951 44.105 45.7838 44.4633 45.7817L49.8288 45.7506C50.1871 45.7486 50.4756 45.4565 50.4734 45.0983C50.4712 44.7401 50.179 44.4513 49.8208 44.4534Z" fill="#006C43"/>
<path d="M55.9388 46.6904L44.4588 46.757C44.1006 46.7591 43.812 47.0511 43.8142 47.4093C43.8164 47.7676 44.1086 48.0563 44.4668 48.0542L55.9468 47.9876C56.305 47.9856 56.5936 47.6935 56.5914 47.3353C56.5892 46.9771 56.297 46.6884 55.9388 46.6904Z" fill="#006C43"/>
<path d="M55.965 48.96L44.485 49.0265C44.1268 49.0286 43.8382 49.3207 43.8404 49.6789C43.8426 50.0371 44.1348 50.3258 44.493 50.3237L55.973 50.2572C56.3312 50.2551 56.6198 49.963 56.6176 49.6048C56.6154 49.2466 56.3232 48.9579 55.965 48.96Z" fill="#006C43"/>
<path d="M49.8899 55.7083L44.5243 55.7394C44.1661 55.7415 43.8775 56.0336 43.8797 56.3918C43.8819 56.75 44.1741 57.0387 44.5323 57.0366L49.8979 57.0055C50.2561 57.0034 50.5447 56.7114 50.5425 56.3531C50.5403 55.9949 50.2481 55.7062 49.8899 55.7083Z" fill="#006C43"/>
<path d="M56.0215 57.958L44.5415 58.0246C44.1833 58.0266 43.8947 58.3187 43.8969 58.6769C43.8992 59.0351 44.1913 59.3238 44.5496 59.3218L56.0295 59.2552C56.3878 59.2532 56.6764 58.9611 56.6741 58.6029C56.6719 58.2447 56.3798 57.956 56.0215 57.958Z" fill="#006C43"/>
<path d="M56.0339 60.2285L44.5539 60.2951C44.1957 60.2971 43.9071 60.5892 43.9093 60.9474C43.9115 61.3056 44.2037 61.5944 44.5619 61.5923L56.0419 61.5257C56.4001 61.5237 56.6887 61.2316 56.6865 60.8734C56.6843 60.5152 56.3921 60.2265 56.0339 60.2285Z" fill="#006C43"/>
</svg>
<svg width="34" height="30" viewBox="0 0 34 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M33 10.3659C33 9.11707 32.1805 8.06341 31.0488 7.75122C30.8927 4.00488 27.8098 1 24.0244 1H9.97561C6.1122 1 2.95122 4.16098 2.95122 8.02439V17.1171C1.81951 17.4683 1 18.4829 1 19.7317C1 20.9805 1.81951 22.0341 2.95122 22.3463C3.10732 26.0927 6.19024 29.0976 9.97561 29.0976H24.0244C27.8878 29.0976 31.0488 25.9366 31.0488 22.0732V12.9805C32.1805 12.6293 33 11.6146 33 10.3659ZM9.97561 2.56098H24.0244C26.9512 2.56098 29.3317 4.86341 29.4878 7.75122C28.3561 8.10244 27.5366 9.11707 27.5366 10.3659C27.5366 10.7561 27.6146 11.1073 27.7707 11.4585L23.9073 16.2195C23.4 15.5171 22.5805 15.0488 21.6829 15.0488C20.5902 15.0488 19.6537 15.7122 19.1854 16.6488L14.9707 14.5415C14.7756 13.2927 13.6439 12.3171 12.3171 12.3171C10.9122 12.3171 9.78049 13.3707 9.62439 14.6976L6.03415 18.2878C5.68293 17.7415 5.13659 17.3122 4.5122 17.1171V8.02439C4.51219 5.01951 6.97073 2.56098 9.97561 2.56098ZM12.3171 16.2195C11.6537 16.2195 11.1463 15.7122 11.1463 15.0488C11.1463 14.3854 11.6537 13.878 12.3171 13.878C12.9805 13.878 13.4878 14.3854 13.4878 15.0488C13.4878 15.7122 12.9805 16.2195 12.3171 16.2195ZM13.0976 17.6634C13.839 17.4293 14.4634 16.8829 14.8146 16.1805L19.0293 18.2878C19.2244 19.3024 19.9659 20.122 20.9415 20.3951V27.5366H13.0976V17.6634ZM21.6829 18.9512C21.0195 18.9512 20.5122 18.4439 20.5122 17.7805C20.5122 17.1171 21.0195 16.6098 21.6829 16.6098C22.3463 16.6098 22.8537 17.1171 22.8537 17.7805C22.8537 18.4439 22.3463 18.9512 21.6829 18.9512ZM2.56098 19.7317C2.56098 19.0683 3.06829 18.561 3.73171 18.561C4.39512 18.561 4.90244 19.0683 4.90244 19.7317C4.90244 20.3951 4.39512 20.9024 3.73171 20.9024C3.06829 20.9024 2.56098 20.3951 2.56098 19.7317ZM4.5122 22.3463C5.52683 22.0341 6.26829 21.1756 6.42439 20.0829L10.0146 16.4927C10.3659 17.039 10.9122 17.4683 11.5366 17.6634V27.5366H9.97561C7.04878 27.5366 4.66829 25.2341 4.5122 22.3463ZM24.0244 27.5366H22.4634V20.3951C23.5171 20.0829 24.2585 19.1854 24.4146 18.0927L28.8244 12.6683C29.0195 12.7854 29.2537 12.9024 29.5268 12.9805V22.0732C29.4878 25.078 27.0293 27.5366 24.0244 27.5366ZM30.2683 11.5366C29.6049 11.5366 29.0976 11.0293 29.0976 10.3659C29.0976 9.70244 29.6049 9.19512 30.2683 9.19512C30.9317 9.19512 31.439 9.70244 31.439 10.3659C31.439 11.0293 30.9317 11.5366 30.2683 11.5366Z" fill="#C10A78" stroke="#C10A78" stroke-width="0.6"/>
</svg>
<svg width="90" height="90" viewBox="0 0 90 90" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="45" cy="45" r="43.5" fill="white" stroke="#EC7B3F" stroke-width="3"/>
<path d="M45 46.5625C50.1781 46.5625 54.375 42.3656 54.375 37.1875C54.375 32.0094 50.1781 27.8125 45 27.8125C39.8219 27.8125 35.625 32.0094 35.625 37.1875C35.6795 42.3656 39.8765 46.5625 45 46.5625ZM45 30.3198C48.8154 30.3198 51.8677 33.4266 51.8677 37.1875C51.8677 41.0029 48.7609 44.0552 45 44.0552C41.2391 44.0552 38.1323 40.9484 38.1323 37.1875C38.1323 33.4266 41.2391 30.3198 45 30.3198Z" fill="#EC7B3F"/>
<path d="M43.9419 39.9782C44.1524 40.2539 44.4682 40.3642 44.8366 40.3642C45.1524 40.3642 45.4682 40.1988 45.7314 39.9782L49.0998 36.173C49.5735 35.6767 49.5208 34.8495 49.0471 34.4083C48.5735 33.912 47.784 33.9671 47.3629 34.4635L44.8366 37.276L43.9419 36.2282C43.4682 35.7318 42.7314 35.6767 42.2577 36.173C41.784 36.6693 41.7314 37.4414 42.205 37.9377L43.9419 39.9782Z" fill="#EC7B3F"/>
<path d="M67.7895 51.7831H59.7895V22.261C59.7895 21.0478 58.8421 20 57.6316 20H24.5263C23.3158 20 22.3158 21.0478 22.3158 22.261V29.8346H21.2105C20.5263 29.8346 20 30.386 20 31.1029C20 31.8199 20.5263 32.3713 21.2105 32.3713H22.3684V39.0993H21.2105C20.5263 39.0993 20 39.6507 20 40.3676C20 41.0846 20.5263 41.636 21.2105 41.636H22.3684V48.364H21.2105C20.5263 48.364 20 48.9154 20 49.6324C20 50.3493 20.5263 50.9007 21.2105 50.9007H22.3684V57.6287H21.2105C20.5263 57.6287 20 58.1801 20 58.8971C20 59.614 20.5263 60.1654 21.2105 60.1654H22.3684V67.6838C22.3684 68.9522 23.3684 70 24.5789 70H57.6316C58.8421 70 59.7895 68.9522 59.7895 67.6838V61.4338H67.7895C69 61.4338 70 60.386 70 59.1176V54.1544C70 52.8309 69 51.7831 67.7895 51.7831ZM42.3684 58.8419L38.9474 56.5809L42.3158 54.3199H44.1053V58.8971H42.3684V58.8419ZM46.5263 54.2647L62.2632 54.1544V58.8419H46.5263V54.2647ZM24.7368 60.0551H25.8947C26.5789 60.0551 27.1053 59.5037 27.1053 58.7868C27.1053 58.0699 26.5789 57.5184 25.8947 57.5184H24.7368V50.8456H25.8947C26.5789 50.8456 27.1053 50.2941 27.1053 49.5772C27.1053 48.8603 26.5789 48.3088 25.8947 48.3088H24.7368V41.5809H25.8947C26.5789 41.5809 27.1053 41.0294 27.1053 40.3125C27.1053 39.5956 26.5789 39.0441 25.8947 39.0441H24.7368V32.3162H25.8947C26.5789 32.3162 27.1053 31.7647 27.1053 31.0478C27.1053 30.3309 26.5789 29.7794 25.8947 29.7794H24.7368V22.4816H29.6842V67.3529H24.7368V60.0551ZM57.4211 67.4081H32.1579V22.4816H57.4211V51.7831H42.3158C41.8947 51.7831 41.4737 51.8934 41.1579 52.114L37.4211 54.5956C36.7895 55.0368 36.3684 55.7537 36.3684 56.5809C36.3684 57.4081 36.7368 58.125 37.4211 58.5662L41.1579 61.0478C41.5263 61.2684 41.8947 61.3787 42.3158 61.3787H57.3684V67.4081H57.4211ZM64.6842 58.8419V54.0993H67.5789L67.7895 58.8419H64.6842Z" fill="#EC7B3F"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 23V2H21.7276C22.4903 2 23.2237 2.32009 23.7752 2.89373L31.083 10.4939C32.3425 11.8038 32.2986 14.008 30.9882 15.2573L29.6863 13.638C30.1231 13.2216 30.1377 12.4869 29.7179 12.0502L22.4101 4.45008C22.2263 4.25887 21.9818 4.15217 21.7276 4.15217H3.97646V20.8478H21.7522C21.9917 20.8478 22.223 20.7531 22.4032 20.5814L29.6863 13.638L30.9882 15.2573L23.7051 22.2006C23.1646 22.7159 22.4706 23 21.7522 23H2Z" fill="#34BE5B"/>
<path d="M2 1.03125C2 0.461707 2.43372 0 2.96875 0H3.03125C3.56627 0 4 0.461706 4 1.03125V30H2L2 1.03125Z" fill="#34BE5B"/>
<path d="M0.0322266 30.0605C0.0322266 29.525 0.466375 29.0908 1.00192 29.0908H6.28834C6.82388 29.0908 7.25803 29.525 7.25803 30.0605C7.25803 30.5961 6.82388 31.0302 6.28834 31.0302H1.00192C0.466375 31.0302 0.0322266 30.5961 0.0322266 30.0605Z" fill="#34BE5B"/>
<path d="M0 31C0 30.4477 0.308426 30 0.688889 30H21.3111C21.6916 30 22 30.4477 22 31C22 31.5523 21.6916 32 21.3111 32H0.688887C0.308425 32 0 31.5523 0 31Z" fill="#34BE5B"/>
<path d="M15.5 19C19.0901 19 22 16.0901 22 12.5C22 8.90988 19.0901 6 15.5 6C11.9099 6 9 8.90988 9 12.5C9.03779 16.0901 11.9477 19 15.5 19ZM15.5 7.73837C18.1453 7.73837 20.2616 9.89244 20.2616 12.5C20.2616 15.1453 18.1076 17.2616 15.5 17.2616C12.8924 17.2616 10.7384 15.1076 10.7384 12.5C10.7384 9.89244 12.8924 7.73837 15.5 7.73837Z" fill="#34BE5B"/>
<path d="M14.3502 14.6215C14.4959 14.7926 14.7145 14.8611 14.9695 14.8611C15.1881 14.8611 15.4067 14.7584 15.5889 14.6215L17.9206 12.26C18.2485 11.952 18.212 11.4386 17.8841 11.1648C17.5562 10.8568 17.0098 10.891 16.7183 11.199L14.9695 12.9445L14.3502 12.2942C14.0223 11.9862 13.5122 11.952 13.1843 12.26C12.8564 12.568 12.82 13.0472 13.1479 13.3552L14.3502 14.6215Z" fill="#34BE5B"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 17C19.314 17 22 14.314 22 11C22 7.68605 19.314 5 16 5C12.686 5 10 7.68605 10 11C10.0349 14.314 12.7209 17 16 17ZM16 6.60465C18.4419 6.60465 20.3953 8.59302 20.3953 11C20.3953 13.4419 18.407 15.3953 16 15.3953C13.593 15.3953 11.6047 13.407 11.6047 11C11.6047 8.59302 13.593 6.60465 16 6.60465Z" fill="#EC7B3F"/>
<path d="M15.3228 12.786C15.4575 12.9625 15.6596 13.0331 15.8954 13.0331C16.0975 13.0331 16.2996 12.9272 16.4681 12.786L18.6239 10.3507C18.927 10.0331 18.8933 9.50368 18.5902 9.22132C18.287 8.90368 17.7818 8.93897 17.5123 9.25662L15.8954 11.0566L15.3228 10.386C15.0196 10.0684 14.5481 10.0331 14.2449 10.3507C13.9418 10.6684 13.9081 11.1625 14.2112 11.4801L15.3228 12.786Z" fill="#EC7B3F"/>
<path d="M30.5853 20.3412H25.4653V1.44706C25.4653 0.670588 24.8589 0 24.0842 0H2.89684C2.12211 0 1.48211 0.670588 1.48211 1.44706V6.29412H0.774737C0.336842 6.29412 0 6.64706 0 7.10588C0 7.56471 0.336842 7.91765 0.774737 7.91765H1.51579V12.2235H0.774737C0.336842 12.2235 0 12.5765 0 13.0353C0 13.4941 0.336842 13.8471 0.774737 13.8471H1.51579V18.1529H0.774737C0.336842 18.1529 0 18.5059 0 18.9647C0 19.4235 0.336842 19.7765 0.774737 19.7765H1.51579V24.0824H0.774737C0.336842 24.0824 0 24.4353 0 24.8941C0 25.3529 0.336842 25.7059 0.774737 25.7059H1.51579V30.5176C1.51579 31.3294 2.15579 32 2.93053 32H24.0842C24.8589 32 25.4653 31.3294 25.4653 30.5176V26.5176H30.5853C31.36 26.5176 32 25.8471 32 25.0353V21.8588C32 21.0118 31.36 20.3412 30.5853 20.3412ZM14.3158 24.8588L12.1263 23.4118L14.2821 21.9647H15.4274V24.8941H14.3158V24.8588ZM16.9768 21.9294L27.0484 21.8588V24.8588H16.9768V21.9294ZM3.03158 25.6353H3.77263C4.21053 25.6353 4.54737 25.2824 4.54737 24.8235C4.54737 24.3647 4.21053 24.0118 3.77263 24.0118H3.03158V19.7412H3.77263C4.21053 19.7412 4.54737 19.3882 4.54737 18.9294C4.54737 18.4706 4.21053 18.1176 3.77263 18.1176H3.03158V13.8118H3.77263C4.21053 13.8118 4.54737 13.4588 4.54737 13C4.54737 12.5412 4.21053 12.1882 3.77263 12.1882H3.03158V7.88235H3.77263C4.21053 7.88235 4.54737 7.52941 4.54737 7.07059C4.54737 6.61176 4.21053 6.25882 3.77263 6.25882H3.03158V1.58824H6.1979V30.3059H3.03158V25.6353ZM23.9495 30.3412H7.78105V1.58824H23.9495V20.3412H14.2821C14.0126 20.3412 13.7432 20.4118 13.5411 20.5529L11.1495 22.1412C10.7453 22.4235 10.4758 22.8824 10.4758 23.4118C10.4758 23.9412 10.7116 24.4 11.1495 24.6824L13.5411 26.2706C13.7768 26.4118 14.0126 26.4824 14.2821 26.4824H23.9158V30.3412H23.9495ZM28.5979 24.8588V21.8235H30.4505L30.5853 24.8588H28.5979Z" fill="#EC7B3F"/>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
<path d="M15 30C23.2843 30 30 23.2843 30 15C30 6.71573 23.2843 0 15 0C6.71573 0 0 6.71573 0 15C0 23.2843 6.71573 30 15 30Z" fill="currentColor"/>
<path d="M13.2 9.4502C13.2 8.5502 13.95 7.9502 15 7.9502C16.05 7.9502 16.8 8.5502 16.8 9.4502C16.8 10.3502 16.05 11.1002 15 11.1002C13.95 11.1002 13.2 10.3502 13.2 9.4502ZM15 12.4502C15.75 12.4502 16.35 13.0502 16.35 13.8002V20.7002C16.35 21.4502 15.75 22.0502 15 22.0502C14.25 22.0502 13.65 21.4502 13.65 20.7002L13.65 13.8002C13.65 13.0502 14.25 12.4502 15 12.4502Z" fill="white"/>
</svg>
<svg width="27" height="22" viewBox="0 0 27 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.7945 0C19.2585 0 18.7202 0.200689 18.3168 0.604112L14.8594 4.06149C14.7764 4.14449 14.7106 4.24302 14.6656 4.35145C14.6207 4.45989 14.5976 4.57612 14.5976 4.69349C14.5976 4.81086 14.6207 4.92708 14.6656 5.03552C14.7106 5.14396 14.7764 5.24249 14.8594 5.32548C15.027 5.4931 15.2543 5.58726 15.4914 5.58726C15.6088 5.58726 15.725 5.56414 15.8334 5.51923C15.9419 5.47431 16.0404 5.40848 16.1234 5.32548L19.5808 1.8681C19.7083 1.74055 19.8807 1.74054 20.0083 1.8681L24.8784 6.74747C25.0059 6.87501 25.0059 7.0475 24.8784 7.17499L16.0862 15.9672C15.9586 16.0947 15.7862 16.0947 15.6587 15.9672L10.7886 11.0878C10.6611 10.9603 10.6611 10.7878 10.7886 10.6603L11.6158 9.8238C11.7133 9.74522 11.7932 9.647 11.8502 9.53552C11.9073 9.42405 11.9402 9.30181 11.9469 9.17676C11.9536 9.05171 11.9339 8.92665 11.8891 8.80972C11.8443 8.69278 11.7754 8.58658 11.6868 8.49803C11.5983 8.40948 11.4921 8.34056 11.3752 8.29576C11.2582 8.25095 11.1332 8.23125 11.0081 8.23796C10.8831 8.24466 10.7608 8.27761 10.6493 8.33466C10.5379 8.39172 10.4396 8.47159 10.3611 8.5691L9.52461 9.40556C8.71773 10.2124 8.71774 11.5449 9.52461 12.3518L14.404 17.2311C15.2108 18.038 16.5433 18.038 17.3502 17.2311L26.1423 8.43898C26.9492 7.63214 26.9492 6.29034 26.1423 5.48348L21.263 0.604112C20.8595 0.200692 20.3305 0 19.7945 0ZM10.8722 4.16373C10.3363 4.16373 9.79792 4.36441 9.39449 4.76784L0.602336 13.5693C-0.198913 14.3767 -0.202642 15.7105 0.602336 16.5155L5.4817 21.3949C6.28856 22.2017 7.62106 22.2017 8.42791 21.3949L11.8853 17.9375C12.0529 17.7699 12.1471 17.5425 12.1471 17.3055C12.1471 17.0684 12.0529 16.8411 11.8853 16.6735C11.7177 16.5059 11.4903 16.4117 11.2533 16.4117C11.0163 16.4117 10.7889 16.5059 10.6213 16.6735L7.16392 20.1309C7.03637 20.2584 6.86396 20.2584 6.7364 20.1309L1.86632 15.2515C1.73878 15.124 1.73882 14.9515 1.86632 14.824L10.6585 6.03183C10.786 5.90427 10.9584 5.90427 11.086 6.03183L15.9561 10.9112C16.0836 11.0388 16.0836 11.2112 15.9561 11.3387L15.1289 12.1752C15.037 12.2554 14.9626 12.3536 14.9101 12.4638C14.8577 12.5739 14.8284 12.6936 14.8241 12.8155C14.8197 12.9374 14.8404 13.0589 14.8849 13.1725C14.9293 13.2861 14.9966 13.3894 15.0825 13.476C15.1685 13.5625 15.2712 13.6306 15.3845 13.6759C15.4978 13.7211 15.6191 13.7427 15.741 13.7393C15.863 13.7358 15.9829 13.7074 16.0934 13.6558C16.2039 13.6042 16.3027 13.5305 16.3836 13.4392L17.2201 12.6027C18.027 11.7959 18.0269 10.4541 17.2201 9.64721L12.3407 4.76784C11.9373 4.36442 11.4082 4.16373 10.8722 4.16373Z" fill="white" fill-opacity="0.7"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 2.93258C0 1.31296 1.31149 0 2.92929 0H9.08989C9.59253 0 10 0.407471 10 0.910112C10 1.41275 9.59253 1.82022 9.08989 1.82022H2.92929C2.31564 1.82022 1.81818 2.31825 1.81818 2.93258V15.0674C1.81818 15.6818 2.31564 16.1798 2.92929 16.1798H9.08989C9.59253 16.1798 10 16.5872 10 17.0899C10 17.5925 9.59253 18 9.08989 18H2.92929C1.31149 18 0 16.687 0 15.0674V2.93258ZM9 8.9C9 8.40294 9.36631 8 9.81818 8L14.8487 8L13.2939 6.57733C12.9362 6.25002 12.9 5.68143 13.213 5.30736C13.526 4.93329 14.0697 4.89538 14.4274 5.22269L17.7061 8.22269C17.8929 8.39359 18 8.64049 18 8.90001C18 9.15954 17.8929 9.40643 17.7061 9.57733L14.4274 12.5773C14.0697 12.9046 13.526 12.8667 13.213 12.4927C12.9 12.1186 12.9362 11.55 13.2939 11.2227L14.8488 9.8H9.81818C9.36631 9.8 9 9.39706 9 8.9Z" fill="currentColor"/>
</svg>
<svg width="8" height="12" viewBox="0 0 8 12" xmlns="http://www.w3.org/2000/svg">
<path d="M1.65127 0.241154C1.23217 -0.118533 0.600841 -0.0703691 0.241154 0.34873C-0.118533 0.767829 -0.0703691 1.39916 0.34873 1.75885L1.65127 0.241154ZM6.625 5.82759L7.30187 6.56369C7.5122 6.37028 7.62975 6.09615 7.62485 5.81046C7.61996 5.52478 7.49309 5.25483 7.27627 5.06874L6.625 5.82759ZM0.323127 10.2639C-0.0834098 10.6377 -0.109926 11.2703 0.2639 11.6769C0.637727 12.0834 1.27034 12.1099 1.67687 11.7361L0.323127 10.2639ZM0.34873 1.75885L5.97373 6.58643L7.27627 5.06874L1.65127 0.241154L0.34873 1.75885ZM5.94813 5.09149L0.323127 10.2639L1.67687 11.7361L7.30187 6.56369L5.94813 5.09149Z" fill="currentColor"/>
</svg>
<svg width="21" height="19" viewBox="0 0 21 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.66406 8.97656C7.19531 8.97656 8.68359 7.46484 8.68359 4.86328C8.68359 2.32031 7.16016 0.761719 4.66406 0.761719C2.17969 0.761719 0.644531 2.33203 0.644531 4.86328C0.644531 7.45312 2.13281 8.97656 4.66406 8.97656ZM6.39844 18L17.6367 1.08984H14.9297L3.69141 18H6.39844ZM4.66406 6.9375C3.80859 6.9375 3.31641 6.1875 3.31641 4.875C3.31641 3.59766 3.82031 2.8125 4.66406 2.8125C5.49609 2.8125 6 3.59766 6 4.875C6 6.17578 5.51953 6.9375 4.66406 6.9375ZM16.6641 18.1875C19.1953 18.1875 20.6836 16.6758 20.6836 14.0742C20.6836 11.5312 19.1602 9.97266 16.6641 9.97266C14.1797 9.97266 12.6445 11.543 12.6445 14.0742C12.6445 16.6641 14.1445 18.1875 16.6641 18.1875ZM16.6641 16.1484C15.8086 16.1484 15.3281 15.3984 15.3281 14.0859C15.3281 12.8086 15.8203 12.0234 16.6641 12.0234C17.5078 12.0234 18.0117 12.8086 18.0117 14.0859C18.0117 15.3867 17.5195 16.1484 16.6641 16.1484Z" fill="white" fill-opacity="0.67"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="16" fill="currentColor"/>
<path d="M22 24H10.0018C8.89651 24 8.06943 23.0697 8.66985 22.1417C9.7342 20.4967 11.8549 18.8866 13.4571 18.6873C13.6652 18.6614 13.8693 18.7326 14.0395 18.8552L16 20.2667L17.9605 18.8552C18.1307 18.7326 18.3348 18.6615 18.5429 18.6873C20.1456 18.8866 22.2679 20.4976 23.3318 22.143C23.9316 23.0706 23.1046 24 22 24Z" fill="white"/>
<ellipse cx="16.0001" cy="12.8889" rx="4.44444" ry="4.88889" fill="white"/>
</svg>
const Capitalize = function(str) {
return typeof str === 'string' && str.length > 0?str[0].toUpperCase()+str.substr(1):'';
};
if(!('capitalize' in String)){
String.capitalize = function() {
return Capitalize(this);
}
}
export {Capitalize}
\ No newline at end of file
var textCache = {};
const textFilter = function(where, what) {
var prepared = textCache[what];
if(!prepared){
var tokens = what.split(/\s/)
textCache[what] = prepared = tokens.map(token => token[0] === '-' ? {has: false, text: token.substr(1)}: {has: true, text: token});
}
var yep = true;
for( var i = 0, _i = prepared.length; i < _i; i++ ){
var preparedElement = prepared[ i ];
if(preparedElement.text === '')
continue;
var matched = where.indexOf(preparedElement.text)>-1;
if(preparedElement.has === false && matched){
return false
}else if(preparedElement.has === true && !matched)
yep = false;
}
return yep;
};
export {textFilter};
\ No newline at end of file
var textCache = {};
String.Typography = function(text, cfg) {
const {html} = cfg || {};
if(typeof text !== 'string')
return text;
text = text.trim();
if(text[0] === ',')text = text.substr(1);
if(text[text.length-1] === ',')text = text.substr(0, text.length - 1);
const income = text;
if(text.split(/[«"»]/).length % 2 === 0){
// odd count of quotes
text = text.replace(/[«»]/,'')
}
let valids = {}, id = 1, add = (val)=>{
const uid = '_!@#'+id+'#@!_';
id++;
valids[uid] = val;
return uid;
};
text = text
.trim()
.replace(/\n/g,'|||||')
.replace(/\s\s+/g,' ')
.replace(/ /g,' ')
.replace(/([а-я][-–—][0-9][-–—][а-я])/g, add)
.replace(/(\d)(руб)/g,'$1 $2')
//.replace(/([а-яА-Я])[—-]([а-яА-Я])/g, (full, a, b)=>add(a+'-'+b))
.replace(/([а-яА-Яa-zA-Z])[—-]([а-яА-Я])/g, (full, a, b)=>add(html?'<nobr>'+a+'-'+b+'</nobr>': a+'-'+b))
.replace(/([0-9])[,]([0-9])/g, (full, a, b)=>add(a+','+b))
.replace(/(ВкусВилл)/g, add)
.replace(/([^\s])[—-]/g, '$1 —')
.replace(/([,\.:])([а-яА-Я0-9\.,"])/g, '$1 $2')
.replace(/\s([,\.:])/g, '$1')
.replace(/([\(])\s/g, '$1')
.replace(/[^\s]([\(])/g, ' $1')
.replace(/[\s+]([\)])/g, '$1')
.replace(/([а-я\?\.])(\d+\.)/g, '$1 $2')
.replace(/ [-–—] /g, (html?'&nbsp;':' ')+'— ')
.replace(/-(\d)/g, '–$1')
.replace(/ (\d\. [а-яА-Я])/g, '\n$1')
.replace(/"([а-яА-Я][^"]+)\s+"([а-яА-Я\s][^"]+)"\s+([а-яА-Я][^"]+)"/g,'«$1 “$2” $3»')
.replace(/"([^"]+)"/g,'«$1»')
.replace(\s+/g,'«')
.replace(/\s+»/g,'»')
.replace(/([а-я])([А-Я])/g,(ful, a, b)=>a+' '+b.toLowerCase())
//.replace(/\. /g,'.&shy; ')
// phone
.replace(/(\+7|8)[\s\(]*(\d{3})[\s\)]*(\d{3})[\s\-—–]*(\d{2})[\s-—–]*(\d{2})/, html ?'+7&nbsp;($2)&nbsp;$3-$4-$5' : '+7 ($2) $3-$4-$5')
.replace(/свершении/g,'совершении')
[html?'replace':'trim'](/[А-Я]+/g, function(text) {
return text.length > 2 || text === 'НЕ' ? '<span class="important">'+text.toLowerCase()+'</span>': text;
})
[html?'replace':'trim'](/, ([А-Я])/g, (f, a)=>', '+a.toLowerCase())
.replace(/\|\|\|\|\|/g,'\n')
[html?'replace':'trim'](/\*\*([^*]+)\*\*/g,'<span class="notificate-text">$1</span>')
;
// HANGING
/*
text = text
.replace(/([«(])/g,'<span class="before-hanging-open"></span>&shy;<span class="hanging-open">$1</span>')
.replace(/([»)])/g,'<span class="hanging-close">$1</span>');
*/
//<span class="hanging-close">»</span>');
var lines = text.split('\n');
var numberStarting = 0;
var lastNumber = 0;
var remake = [];
lines.forEach(function(line) {
line.replace(/^(\d+)\.\s/, function(full, num) {
num = num-0;
if(lastNumber !== num - 1){
if(lastNumber>num){
// ok
}else{
var text = remake.pop();
while(lastNumber<num - 1){
if(text === void 0){
return full;
}
text.replace(new RegExp('[^\\d]'+(lastNumber+1)+'[^\\d]'), function(ful, pos,a){
remake.push(text.substr(0, pos).replace(lastNumber+1, lastNumber+1+'.'))
text = text.substr(pos+(lastNumber+1+'').length)
});
lastNumber++;
}
remake.push(text.replace(lastNumber, lastNumber+'.'));
}
}
lastNumber = num;
});
remake.push(line);
});
var longSentance = 200;
if(remake.length === 1 && remake[0].length>longSentance){
remake = remake[ 0 ].split( '. ' ).map( a => a + '.' ).reduce((store, sentance)=>{
var last = (store.pop()||'');
if(last.length+sentance.length< longSentance*1.3){
store.push([ last, sentance ].join( ' ' ));
}else{
if(last)
store.push(last);
store.push(sentance);
}
return store
},[]);
remake = [].concat.apply( [], remake.map( a => [ a, '' ] ));
}
let out = remake.length === 1 ? remake[0] : remake.map(a=>html?'<p>'+a+'</p>':a).join('\n');
out = out.replace(/_!@#(\d+)#@!_/g, (f, num)=>{
return valids[f]
});
out = out.trim();
if(out.length>70)
out = out[0].toUpperCase()+out.substr(1);
/*console.log(income);
console.log(out);*/
return out;
};
String.Search = function(string, search) {
var prepared = textCache[search];
if(!prepared){
var tokens = search.split(/\s/)
textCache[search] = prepared = tokens
.map(token => token[0] === '-' ? {has: false, text: token.substr(1)}: {has: true, text: token});
}
var yep = true;
for( var i = 0, _i = prepared.length; i < _i; i++ ){
var preparedElement = prepared[ i ];
if(preparedElement.text === '')
continue;
var matched = string.indexOf(preparedElement.text)>-1;
if(preparedElement.has === false && matched){
return false
}else if(preparedElement.has === true && !matched)
yep = false;
}
return yep;
};
export const Typography = String.Typography;
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment