chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:32:02 +08:00
commit b43a0c2713
1102 changed files with 261576 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
.idea
runtime
.git
**/node_modules/**
+11
View File
@@ -0,0 +1,11 @@
node_modules
.next
dist
lib
**/.next/**
**/dist/**
**/static/**
**/build/**
**/public/**
**/diagram.js
+2
View File
@@ -0,0 +1,2 @@
# 第三方依赖太多,导致项目主语言被冲散
*.js linguist-language=typescript
+13
View File
@@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: ['https://think-1256095494.cos.ap-shanghai.myqcloud.com/think-wechat.jpg', 'https://think-1256095494.cos.ap-shanghai.myqcloud.com/think-alipay.jpg']
+12
View File
@@ -0,0 +1,12 @@
---
name: 功能请求
about: 为项目提供想法
title: "[FEATURE]"
labels: ''
assignees: ''
---
## 请描述功能点
## 也可提供功能的实现方案
+14
View File
@@ -0,0 +1,14 @@
---
name: Bug 反馈
about: 反馈 Bug 以改善项目
title: "[BUG]"
labels: ''
assignees: ''
---
## 1. 问题的表现是怎样的?
## 2. 问题的复现路径
## 3. 预期是什么?
+24
View File
@@ -0,0 +1,24 @@
node_modules
.DS_Store
.idea
dist
dist-ssr
coverage
test-results
.pnpm-store
tsconfig.tsbuildinfo
.env
*.local
*.cache
*error.log
*debug.log
*.conf
**/prod.yaml
scripts/update.sh
output
runtime
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
pnpm run precommit
+1
View File
@@ -0,0 +1 @@
strict-peer-dependencies=false
+9
View File
@@ -0,0 +1,9 @@
node_modules
.next
dist
lib
**/.next/**
**/dist/**
**/build/**
**/public/**
+12
View File
@@ -0,0 +1,12 @@
{
"singleQuote": true,
"quoteProps": "consistent",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"arrowParens": "always",
"trailingComma": "es5",
"tabWidth": 2,
"semi": true,
"printWidth": 120,
"endOfLine": "lf"
}
+110
View File
@@ -0,0 +1,110 @@
module.exports = {
processors: [],
plugins: ['stylelint-order'],
extends: ['stylelint-config-standard', 'stylelint-config-css-modules'],
rules: {
'selector-class-pattern': [
// 命名规范 -
'(.)+$',
{
message: 'Expected class selector to be kebab-case',
},
],
'string-quotes': 'single', // 单引号
'at-rule-empty-line-before': null,
'at-rule-no-unknown': null,
'at-rule-name-case': 'lower', // 指定@规则名的大小写
'length-zero-no-unit': true, // 禁止零长度的单位(可自动修复)
'shorthand-property-no-redundant-values': true, // 简写属性
'number-leading-zero': 'always', // 小数不带0
'declaration-block-no-duplicate-properties': true, // 禁止声明快重复属性
'no-descending-specificity': true, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器。
'selector-max-id': 3, // 限制一个选择器中 ID 选择器的数量
'max-nesting-depth': 5,
'indentation': [
2,
{
// 指定缩进 warning 提醒
severity: 'warning',
},
],
'order/properties-order': [
// 规则顺序
'position',
'top',
'right',
'bottom',
'left',
'z-index',
'display',
'float',
'width',
'height',
'max-width',
'max-height',
'min-width',
'min-height',
'padding',
'padding-top',
'padding-right',
'padding-bottom',
'padding-left',
'margin',
'margin-top',
'margin-right',
'margin-bottom',
'margin-left',
'margin-collapse',
'margin-top-collapse',
'margin-right-collapse',
'margin-bottom-collapse',
'margin-left-collapse',
'overflow',
'overflow-x',
'overflow-y',
'clip',
'clear',
'font',
'font-family',
'font-size',
'font-smoothing',
'osx-font-smoothing',
'font-style',
'font-weight',
'line-height',
'letter-spacing',
'word-spacing',
'color',
'text-align',
'text-decoration',
'text-indent',
'text-overflow',
'text-rendering',
'text-size-adjust',
'text-shadow',
'text-transform',
'word-break',
'word-wrap',
'white-space',
'vertical-align',
'list-style',
'list-style-type',
'list-style-position',
'list-style-image',
'pointer-events',
'cursor',
'background',
'background-color',
'border',
'border-radius',
'content',
'outline',
'outline-offset',
'opacity',
'filter',
'visibility',
'size',
'transform',
],
},
};
+26
View File
@@ -0,0 +1,26 @@
FROM node:18-alpine as builder
COPY . /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN npm config set registry http://mirrors.cloud.tencent.com/npm/
RUN npm i -g pm2 @nestjs/cli pnpm
RUN apk --no-cache add bash dos2unix \
&& find . -name "*.sh" -exec dos2unix {} \; \
&& apk del dos2unix
RUN bash build-output.sh
FROM node:18-alpine as prod
ENV TZ=Asia/Shanghai
COPY --from=builder /app/docker/* /app/docker/
COPY --from=builder /app/output/ /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN npm config set registry http://mirrors.cloud.tencent.com/npm/
RUN set -x \
&& apk update \
&& apk add --no-cache tzdata redis \
&& chmod +x /app/docker/start.sh \
&& npm i -g pm2 @nestjs/cli pnpm \
&& rm -rf /var/cache/apk/*
ENTRYPOINT sh /app/docker/start.sh
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 fantasticit
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+56
View File
@@ -0,0 +1,56 @@
# think
## 声明
1. 请先阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)
2. 如果希望参与独立编辑器开发,可以到[这个仓库](https://github.com/fantasticit/sailkit)参与
3. 由于服务器成本和免费的 SSL 证书也没了,网站不定期会挂,敬请谅解
## 简介
Think 是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。同时支持多人协作文档。使用的技术如下:
- `MySQL`:数据存储
- `next.js`:前端页面框架
- `nest.js`:服务端框架
- `tiptap`:编辑器及文档协作
可访问[云策文档帮助中心](https://think.codingit.cn/share/wiki/WoiR8N5uj4i7),查看更多功能文档。
## 链接
[云策文档](https://think.codingit.cn)已经部署上线,可前往注册使用。
## 预览
<details>
<summary>查看预览图</summary>
<img alt="知识库" src="http://wipi.oss-cn-shanghai.aliyuncs.com/2022-02-20/YN67GM4VQMBTZFZ88TYP8X/image.png" width="420" />
<img alt="新建文档" src="http://wipi.oss-cn-shanghai.aliyuncs.com/2022-02-20/YN67GM4VQMBTZFZ88TYPQX/image.png" width="420" />
<img alt="编辑器" src="http://wipi.oss-cn-shanghai.aliyuncs.com/2022-02-20/YN67GM4VQMBTZFZ88TYPZX/image.png" width="420" />
</details>
## 项目开发
[项目开发说明](./let-us-start.md)。
## 自动化部署
> 思路:在服务器部署 webhook,然后在 github setting 中配置相应钩子,实现自动化部署
参考:[webhook](https://github.com/adnanh/webhook/blob/master/docs/Hook-Examples.md#incoming-github-webhook)
## 赞助
如果这个项目对您有帮助,并且您希望支持该项目的开发和维护,请随时扫描一下二维码进行捐赠。非常感谢您的捐款,谢谢!
<div style="display: flex;">
<img width="300" alt="alipay" src="https://think-1256095494.cos.ap-shanghai.myqcloud.com/think-alipay.jpg" />
<img width="300" alt="wechat" src="https://think-1256095494.cos.ap-shanghai.myqcloud.com/think-wechat.jpg" />
</div>
## 贡献者
感谢所有为本项目作出贡献的同学!
<a href="https://github.com/fantasticit/think/contributors"><img src="https://opencollective.com/think/contributors.svg?width=890" /></a>
+7
View File
@@ -0,0 +1,7 @@
# WeHub 来源说明
- 原始项目:`fantasticit/think`
- 原始仓库:https://github.com/fantasticit/think
- 导入方式:上游默认分支的最新快照
- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准
- 本文件仅用于记录来源,不代表 WeHub 是原项目作者
+82
View File
@@ -0,0 +1,82 @@
#! /bin/bash
# 该脚本只保留生产环境运行所需文件到统一目录
if [ ! -f './config/prod.yaml' ]; then
echo "缺少 config/prod.yaml 文件,可参考 docker-prod-sample.yaml 进行配置"
exit 1
fi
# 构建
pnpm fetch --prod
pnpm install
pnpm run build
outputDir="output"
# 新建输出目录
if [ -d ${outputDir} ]; then
rm -rfv ${outputDir}
fi
mkdir -p ${outputDir}
cd ${outputDir}
mkdir -p packages
mkdir -p packages/config
mkdir -p packages/constants
mkdir -p packages/domains
mkdir -p packages/client
mkdir -p packages/server
cd ../
# 复制文件
cp -v -L -r config ${outputDir}
cd ${outputDir}/config
rm -f dev.yaml
cd ../../
cp -v -L package.json ${outputDir}
cp -v -L pnpm-lock.yaml ${outputDir}
cp -v -L pnpm-workspace.yaml ${outputDir}
# packages/config
cd packages/config
configOutput="../../${outputDir}/packages/config"
cp -v -L package.json ${configOutput}
cp -v -L -r lib ${configOutput}
cd ../../
# packages/constants
cd packages/constants
constantsOutput="../../${outputDir}/packages/constants"
cp -v -L package.json ${constantsOutput}
cp -v -L -r lib ${constantsOutput}
cd ../../
# packages/domains
cd packages/domains
domainsOutput="../../${outputDir}/packages/domains"
cp -v -L package.json ${domainsOutput}
cp -v -L -r lib ${domainsOutput}
cd ../../
# packages/client
cd packages/client
clientOutput="../../${outputDir}/packages/client"
cp -v -L package.json ${clientOutput}
cp -v -L prod-server.js ${clientOutput}
cp -v -L -r public ${clientOutput}
cp -v -L -r .next ${clientOutput}
cd ../../
# packages/server
cd packages/server
serverOutput="../../${outputDir}/packages/server"
cp -v -L package.json ${serverOutput}
cp -v -L nest-cli.json ${serverOutput}
cp -v -L -r dist ${serverOutput}
cd ../../
# @see https://github.com/typicode/husky/issues/914#issuecomment-826768549
cd ${outputDir}
npm set-script prepare ""
pnpm install -r --offline --prod
cd ../
echo "${outputDir} 打包完成"
+74
View File
@@ -0,0 +1,74 @@
# 开发环境配置
client:
port: 5001
assetPrefix: '/'
apiUrl: 'http://localhost:5002/api'
collaborationUrl: 'ws://localhost:5003'
# 预先连接的来源,空格分割(比如图片存储服务器)
dnsPrefetch: '//wipi.oss-cn-shanghai.aliyuncs.com'
# 站点地址(如:https://think.codingit.cn/),一定要设置,否则会出现 cookie、跨域等问题
siteUrl:
'http://localhost:5001'
# 一定要设置,否则会出现 cookie、跨域等问题,注意如果网页部署在 https://think.codingit.cn,那这里的值应当为 .codingit.cn(没有 think
siteDomain: ''
server:
prefix: '/api'
port: 5002
collaborationPort: 5003
maxDocumentVersion: 20 # 最大版本记录数
logRetainDays: 3 # 日志保留天数,比如只保留近三天日志
enableRateLimit: true # 是否限流
rateLimitWindowMs: 60000 # 限流时间
rateLimitMax: 1000 # 单位限流时间内单个 ip 最大访问数量
email: # 邮箱服务,参考 http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html?servCode=6010376 获取 SMTP 配置
host: ''
port: 465
user: ''
password: ''
admin:
name: 'admin' # 注意修改
password: 'admin' # 注意修改
email: 'admin@think.com' # 注意修改为真实邮箱地址
# 数据库配置
db:
mysql:
host: '127.0.0.1'
username: 'think'
password: 'think'
database: 'think'
port: 3306
charset: 'utf8mb4'
timezone: '+08:00'
synchronize: true
redis:
host: '127.0.0.1'
port: '6379'
password: 'root'
db: 0
# oss 文件存储服务
oss:
local:
enable: true
# 线上更改为服务端地址(如:https://api.codingit.cn
server: 'http://localhost:5002'
s3:
enable: false
config:
# isp 提供商,可选 minio,s3,aliyun,tencent
cloudisp: 'minio'
accessKeyId: ''
secretAccessKey: ''
bucket: ''
region: ''
# 仅cloudisp 的值为 minio/s3 时配置,其它提供商为空
forcePathStyle: false
# 仅cloudisp 的值为 minio 时配置,其它提供商为空
endpoint: ''
# jwt 配置
jwt:
secretkey: 'zA_Think+KNOWLEDGE+WIKI+DOCUMENTS@2022'
expiresIn: '6h'
+75
View File
@@ -0,0 +1,75 @@
# 开发环境配置
client:
port: 5001
assetPrefix: '/'
apiUrl: 'http://localhost:5002/api'
collaborationUrl: 'ws://localhost:5003'
# 以下为页面 meta 配置
seoAppName: '云策文档'
seoDescription: '云策文档是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。'
seoKeywords: '云策文档,协作,文档,fantasticit,https://github.com/fantasticit/think'
# 预先连接的来源,空格分割(比如图片存储服务器)
dnsPrefetch: '//wipi.oss-cn-shanghai.aliyuncs.com'
# 站点地址(如:http://think.codingit.cn/),一定要设置,否则会出现 cookie、跨域等问题
siteUrl: 'http://localhost:5001'
siteDomain: ''
server:
prefix: '/api'
port: 5002
collaborationPort: 5003
maxDocumentVersion: 20 # 最大版本记录数
logRetainDays: 3 # 日志保留天数,比如只保留近三天日志
enableRateLimit: true # 是否限流
rateLimitWindowMs: 60000 # 限流时间
rateLimitMax: 1000 # 单位限流时间内单个 ip 最大访问数量
email: # 邮箱服务,参考 http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html?servCode=6010376 获取 SMTP 配置
host: ''
port: 465
user: ''
password: ''
admin:
name: 'admin' # 注意修改
password: 'admin' # 注意修改
email: 'admin@think.com' # 注意修改为真实邮箱地址
# 数据库配置
db:
mysql:
host: 'mysql-for-think'
username: 'think'
password: 'think'
database: 'think'
port: 3306
charset: 'utf8mb4'
timezone: '+08:00'
synchronize: true
redis:
host: 'redis-for-think'
port: '6379'
password: 'root'
# oss 文件存储服务
oss:
local:
enable: true
# 线上更改为服务端地址(如:https://api.codingit.cn
server: 'http://localhost:5002'
s3:
enable: true
config:
# isp 提供商,可选 minio,s3,aliyun,tencent
cloudisp: 'minio'
accessKeyId: ''
secretAccessKey: ''
bucket: ''
region: ''
# 仅cloudisp 的值为 minio/s3 时配置,其它提供商为空
forcePathStyle: false
# 仅cloudisp 的值为 minio 时配置,其它提供商为空
endpoint: ''
# jwt 配置
jwt:
secretkey: 'zA_Think+KNOWLEDGE+WIKI+DOCUMENTS@2022'
expiresIn: '6h'
+60
View File
@@ -0,0 +1,60 @@
version: '3'
services:
think:
build:
context: .
image: think
container_name: think
volumes:
- ./config:/app/config
- ./runtime/static:/app/packages/server/static
environment:
- TZ=Asia/Shanghai
expose:
- '5001-5003'
ports:
- '5001-5003:5001-5003'
depends_on:
- mysql
- redis
networks:
- think
mysql:
image: mysql:5.7
restart: always
container_name: mysql-for-think
volumes:
- ./runtime/mysql:/var/lib/mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=think
- MYSQL_USER=think
- MYSQL_PASSWORD=think
expose:
- '3306'
ports:
- '3306:3306'
command:
- '--character-set-server=utf8mb4'
- '--collation-server=utf8mb4_unicode_ci'
networks:
- think
redis:
image: redis:latest
restart: always
container_name: redis-for-think
command: >
--requirepass root
expose:
- '6379'
ports:
- '6379:6379'
volumes:
- ./runtime/redis:/data
privileged: true
networks:
- think
networks:
think:
driver: bridge
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
### Author:jonnyan404
### date:2022年5月22日
pnpm run pm2
pm2 startup
pm2 save
pm2 logs
+12
View File
@@ -0,0 +1,12 @@
# 以下为前台动态渲染的配置,修改后,无需打包,重启服务即可
dynamic:
# 输入 logo 的图片地址
logo: ''
appName: '云策文档'
appDescription: '云策文档是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。'
appKeywords: '云策文档,协作,文档,fantasticit,https://github.com/fantasticit/think'
# 版权信息,可以是 HTML
copyrightInformation: '<p>Develop by fantasticit</p>'
# 外部跳转按钮配置
externalButtonText: 'Github'
externalButtonURL: 'https://github.com/fantasticit/think'
+178
View File
@@ -0,0 +1,178 @@
# 使用 docker-compose 进行项目部署
> 目标:使用 http://dev.think.codingit.cn 访问客户端;使用 http://dev.api.codingit.cn 访问服务端。
## 1. 新建 config/prod.yaml
```yaml
# 开发环境配置
client:
port: 5001
assetPrefix: '/'
apiUrl: 'http://dev.api.codingit.cn/api'
collaborationUrl: 'ws://dev.api.codingit.cn/think/wss'
# 以下为页面 meta 配置
seoAppName: '云策文档'
seoDescription: '云策文档是一款开源知识管理工具。通过独立的知识库空间,结构化地组织在线协作文档,实现知识的积累与沉淀,促进知识的复用与流通。'
seoKeywords: '云策文档,协作,文档,fantasticit,https://github.com/fantasticit/think'
# 预先连接的来源,空格分割(比如图片存储服务器)
dnsPrefetch: '//wipi.oss-cn-shanghai.aliyuncs.com'
# 站点地址(如:http://think.codingit.cn/),一定要设置,否则会出现 cookie、跨域等问题
siteUrl: 'http://dev.think.codingit.cn'
siteDomain: ''
server:
prefix: '/api'
port: 5002
collaborationPort: 5003
maxDocumentVersion: 20 # 最大版本记录数
logRetainDays: 3 # 日志保留天数,比如只保留近三天日志
enableRateLimit: true # 是否限流
rateLimitWindowMs: 60000 # 限流时间
rateLimitMax: 1000 # 单位限流时间内单个 ip 最大访问数量
email: # 邮箱服务,参考 http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html?servCode=6010376 获取 SMTP 配置
host: ''
port: 465
user: ''
password: ''
admin:
name: 'admin' # 注意修改
password: 'admin' # 注意修改
email: 'admin@think.com' # 注意修改为真实邮箱地址
# 数据库配置
db:
mysql:
host: 'mysql-for-think'
username: 'think'
password: 'think'
database: 'think'
port: 3306
charset: 'utf8mb4'
timezone: '+08:00'
synchronize: true
redis:
host: 'redis-for-think'
port: '6379'
password: 'root'
# oss 文件存储服务
oss:
local:
enable: true
# 线上更改为服务端地址(如:https://api.codingit.cn
server: 'http://dev.api.codingit.cn'
# 以下为各厂商 sdk 配置,不要修改字段,填入值即可
tencent:
enable: false
config:
SecretId: ''
SecretKey: ''
Bucket: ''
Region: ''
aliyun:
enable: false
config:
accessKeyId: ''
accessKeySecret: ''
bucket: ''
https: true
region: ''
# jwt 配置
jwt:
secretkey: 'zA_Think+KNOWLEDGE+WIKI+DOCUMENTS@2022'
expiresIn: '6h'
```
## 2. 新建 nginx.conf
```shell
upstream think_client {
server 127.0.0.1:5001;
keepalive 64;
}
upstream think_server {
server 127.0.0.1:5002;
keepalive 64;
}
upstream think_wss {
server 127.0.0.1:5003;
keepalive 64;
}
server {
listen 80;
server_name dev.api.codingit.cn;
client_max_body_size 100m;
location /api {
proxy_pass http://think_server;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /think/wss {
proxy_pass http://think_wss;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /static/ {
proxy_pass http://think_server;
}
}
server {
listen 80;
server_name dev.think.codingit.cn;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://think_client;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
3. 构建项目
```shell
cd think
docker-compose up -d
```
4. 可选:配置 hosts
```shell
127.0.0.1 dev.api.codingit.cn
127.0.0.1 dev.think.codingit.cn
```
5. 访问
浏览器访问:http://dev.think.codingit.cn。
+126
View File
@@ -0,0 +1,126 @@
# think
## 项目结构
本项目依赖 pnpm 使用 monorepo 形式进行代码组织,分包如下:
- `@think/config`: 客户端、服务端、OSS、MySQL、Redis 等配置管理
- `@think/domains`:领域模型数据定义
- `@think/constants`:常量配置
- `@think/server`:服务端
- `@think/client`:客户端
## 项目依赖
为了将项目运行起来,至少需要以下依赖。
- nodejs >=16.5.0:推荐使用 nvm 安装
- pnpm:安装 nodejs 后,运行 `npm i -g pnpm` 即可安装
- pm2:安装 nodejs 后,运行 `npm i -g pm2` 即可安装
- MySQL 5.7
- Redis
## 配置文件
项目所有的配置文件都在 `config` 目录下,其中 `dev.yaml` 中各字段均有解释,生产环境打包依赖 `prod.yaml`(需要自行修改为所需配置)。如果运行不起来,请对比 `dev.yaml` 检查配置。
**如果部署遇到问题,首先请确认相应配置是否正确!**
## 项目运行
无论是开发环境,还是生产环境,项目运行成功后会在 3 个端口启动相应服务(默认 5001、5002、5003),具体端口号由 `config` 文件夹下的配置文件决定。
- 前台页面地址:`http://localhost:5001`
- 服务接口地址:`http://localhost:5002`
- 协作接口地址:`http://localhost:5003`
### 本地开发
1. 安装数据库
首先安装 `MySQL``Redis`,推荐使用 docker 进行安装。
```bash
docker image pull mysql:5.7
# m1 的 mac 可以用:docker image pull --platform linux/x86_64 mysql:5.7
docker run -d --restart=always --name mysql-for-think-dev -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=think -e MYSQL_PASSWORD=think -e MYSQL_DATABASE=think mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker pull redis:latest
docker run --name redis-for-think-dev -p 6379:6379 -d redis --appendonly yes --requirepass "root"
```
2. 安装依赖并运行
```bash
git clone https://github.com/fantasticit/think.git
cd think
pnpm install
pnpm run build:dep
pnpm run dev
```
### 生产部署
首先确认在 `config` 文件夹下新建 `prod.yaml` 配置文件,然后运行以下命令。
**编译打包过程比较吃内存(大约 2G),小内存服务器建议本地构建后上传,可以在配置文件完成后,运行 build-output.sh,将打包后的 output 压缩发送到服务器后运行**
```bash
git clone https://github.com/fantasticit/think.git
cd think
pnpm install # 安装依赖
pnpm run build # 项目打包
# 以下如果没有安装 pm2,直接 pnpm run start,推荐使用 pm2
pnpm run pm2
pm2 startup
pm2 save
```
#### swc 导致打包失败
要么根据报错安装相关系统环境依赖,要么在`think/packages/client`目录下加入 **.babelrc** 文件。
文件内容:
```
{
"presets": ["next/babel"]
}
```
### docker-compose
也可以使用 docker-compose 进行项目部署。首先,根据需要修改 `docker-compose.yml` 中的数据库、Redis 相关用户名、密码等配置,然后,从 `config/docker-prod-sample.yaml` 复制出 `config/prod.yaml` 并修改其中对应的配置。
```bash
# 首次安装
git clone https://github.com/fantasticit/think.git
cd think
docker-compose up -d
# 二次更新升级
cd think
git pull
docker-compose build
docker-compose up -d
# 如果二次更新有问题
docker-compose kill
docker-compose rm
docker image rm think # 删掉构建的镜像
docker-compose up -d
```
更多细节可以查看 [how-to-use-docker.md](./how-to-use-docker.md)。
### nginx 配置参考
无论以何种方式进行项目部署,项目运行成功后会在 3 个端口启动服务(默认 5001、5002、5003,具体由配置文件决定)。`nginx` 配置参考 <[think/nginx.conf.sample](https://github.com/fantasticit/think/blob/main/nginx.conf.sample)>。
特别强调,在 `config` 文件夹的配置中 `client.siteUrl` 一定要配置正确,否则客户端可能无法正常运行。
```yaml
# 站点地址(如:http://think.codingit.cn/),一定要设置,否则会出现 cookie、跨域等问题
siteUrl: 'http://localhost:5001'
```
+69
View File
@@ -0,0 +1,69 @@
upstream think_client {
server 127.0.0.1:5001;
keepalive 64;
}
upstream think_server {
server 127.0.0.1:5002;
keepalive 64;
}
upstream think_wss {
server 127.0.0.1:5003;
keepalive 64;
}
server {
listen 80;
server_name dev.api.codingit.cn;
client_max_body_size 100m;
location /api {
proxy_pass http://think_server;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /think/wss {
proxy_pass http://think_wss;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
location /static/ {
proxy_pass http://think_server;
}
}
server {
listen 80;
server_name dev.think.codingit.cn;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://think_client;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"name": "think",
"private": true,
"author": "fantasticit",
"scripts": {
"clean": "npx rimraf ./node_modules ./packages/**/node_modules ./packages/**/.next",
"dev": "concurrently 'pnpm:dev:*'",
"dev:server": "pnpm run --dir packages/server dev",
"dev:client": "pnpm run --dir packages/client dev",
"build": "pnpm build:dep && pnpm build:server && pnpm build:client",
"build:dep": "pnpm build:constants && pnpm build:domains && pnpm build:config",
"build:constants": "pnpm run --dir packages/constants build",
"build:domains": "pnpm run --dir packages/domains build",
"build:config": "pnpm run --dir packages/config build",
"build:server": "pnpm run --dir packages/server build",
"build:client": "pnpm run --dir packages/client build",
"start": "concurrently 'pnpm:start:*'",
"start:server": "pnpm run --dir packages/server start",
"start:client": "pnpm run --dir packages/client start",
"pm2": "pnpm run pm2:server && pnpm run pm2:client",
"pm2:server": "pnpm run --dir packages/server pm2",
"pm2:client": "pnpm run --dir packages/client pm2",
"lint": "concurrently 'pnpm:lint:*'",
"lint:client": "eslint --fix './packages/client/**/*.{ts,tsx,js,jsx}'",
"lint:server": "eslint --fix './packages/server/**/*.{ts,js}'",
"format": "concurrently 'pnpm:format:*'",
"format:ts": "prettier --write --parser typescript 'packages/**/*.{ts,tsx,js,jsx}'",
"format:css": "stylelint --fix --formatter verbose --allow-empty-input 'packages/**/*.{css,scss,sass}'",
"prepare": "husky install",
"precommit": "lint-staged"
},
"dependencies": {
"concurrently": "^7.0.0",
"cross-env": "^7.0.3",
"fs-extra": "^10.0.0",
"rimraf": "^3.0.2"
},
"engines": {
"node": ">=16.5.0"
},
"devDependencies": {
"@types/node": "^17.0.35",
"husky": "^7.0.4",
"lint-staged": "^12.4.1",
"prettier": "^2.3.2",
"stylelint": "^14.6.1",
"stylelint-config-css-modules": "^4.1.0",
"stylelint-config-prettier": "^9.0.3",
"stylelint-config-standard": "^25.0.0",
"stylelint-config-standard-scss": "^3.0.0",
"stylelint-order": "^5.0.0",
"stylelint-prettier": "^2.0.0",
"typescript": "^4.5.5"
},
"lint-staged": {
"*.{ts,tsx,js,jsx}": "prettier --write",
"./packages/client/**/*.{ts,tsx,js,jsx}": [
"eslint --fix"
],
"./packages/server/src/*.{ts,js}": [
"eslint --fix"
],
"*.{css,scss,sass}": "stylelint --fix --formatter verbose --allow-empty-input"
}
}
+75
View File
@@ -0,0 +1,75 @@
module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'react-hooks', 'simple-import-sort', 'prettier'],
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
overrides: [
{
files: ['*.ts', '*.tsx', '.js', '.jsx'],
parserOptions: {
project: ['./tsconfig.json'],
tsconfigRootDir: __dirname,
sourceType: 'module',
},
},
],
settings: {
'react': {
version: 'detect',
},
'import/resolver': {
node: {
paths: ['src'],
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
env: {
es6: true,
browser: true,
node: true,
},
rules: {
'func-names': 0,
'no-shadow': 0,
'@typescript-eslint/no-shadow': 0,
'@typescript-eslint/no-unused-vars': [0, { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-use-before-define': 0,
'@typescript-eslint/ban-ts-ignore': 0,
'@typescript-eslint/no-empty-function': 0,
'@typescript-eslint/ban-ts-comment': 0,
'@typescript-eslint/no-var-requires': 0,
'@typescript-eslint/no-explicit-any': 0,
'@typescript-eslint/no-this-alias': 0,
'@typescript-eslint/explicit-module-boundary-types': 0,
'@typescript-eslint/ban-types': 0,
'react-hooks/rules-of-hooks': 2,
'react-hooks/exhaustive-deps': 2,
'testing-library/no-unnecessary-act': 0,
'prettier/prettier': ['error', {}, { usePrettierrc: true }],
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'simple-import-sort/imports': [
'error',
{
groups: [
['react'],
['@douyinfe(.*)$'],
['(@)?think(.*)$'],
['(@)?tiptap(.*)$'],
['^@?\\w'],
['@/(.*)'],
['^[./]'],
['(.*).module.scss'],
],
},
],
'simple-import-sort/exports': 'error',
},
ignorePatterns: ['dist/', 'node_modules', 'scripts', 'examples'],
};
+42
View File
@@ -0,0 +1,42 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel
# typescript
*.tsbuildinfo
# service-worker.js
/public/manifest.json
/public/service-worker.js
/public/workbox-*.js
+3
View File
@@ -0,0 +1,3 @@
# @think/client
> 客户端。
+85
View File
@@ -0,0 +1,85 @@
/**
* 将流程图编辑器所需的资源拷贝到 .next 目录中,配合 nginx 运行
*/
const fs = require('fs-extra');
const { getConfig } = require('@think/config');
const config = getConfig();
const buildManifestJson = () => {
return JSON.stringify({
name: config.client.seoAppName,
short_name: config.client.seoAppName,
display: 'standalone',
start_url: '/',
theme_color: '#ffffff',
background_color: '#ffffff',
icons: [
{
src: '/icon72.png',
sizes: '72x72',
type: 'image/png',
},
{
src: '/icon96.png',
sizes: '96x96',
type: 'image/png',
},
{
src: '/icon120.png',
sizes: '120x120',
type: 'image/png',
},
{
src: '/icon128.png',
sizes: '128x128',
type: 'image/png',
},
{
src: '/icon144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: '/icon152.png',
sizes: '152x152',
type: 'image/png',
},
{
src: '/icon180.png',
sizes: '180x180',
type: 'image/png',
},
{
src: '/icon192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: '/icon384.png',
sizes: '384x384',
type: 'image/png',
},
{
src: '/icon512.png',
sizes: '512x512',
type: 'image/png',
},
{
src: '/maskable.png',
sizes: '192x192',
type: 'image/png',
purpose: 'maskable',
},
],
});
};
fs.copySync('./public', './.next', {
filter: (src) => {
// 生产环境使用 diagram.min.js
return !/diagram.js$/.test(src);
},
});
fs.outputFileSync('./.next/manifest.json', buildManifestJson());
fs.outputFileSync('./public/manifest.json', buildManifestJson());
+12
View File
@@ -0,0 +1,12 @@
const { getConfig } = require('@think/config');
const config = getConfig();
const cli = require('next/dist/cli/next-dev');
const port = (config.client && config.client.port) || 5001;
try {
cli.nextDev(['-p', port]);
console.log(`[think] 客户端已启动,端口:${port}`);
} catch (err) {
console.log(`[think] 客户端启动失败!${err.message || err}`);
}
+6
View File
@@ -0,0 +1,6 @@
interface Window {
// drawio 绘图
GraphViewer: any;
// 百度脑图
kityminder: any;
}
+5
View File
@@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.
+43
View File
@@ -0,0 +1,43 @@
const semi = require('@douyinfe/semi-next').default({});
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
const { getConfig } = require('@think/config');
const config = getConfig();
const pwaRuntimeCaching = require('./pwa-cache');
const withPWA = require('next-pwa')({
disable: process.env.NODE_ENV !== 'production',
dest: 'public',
sw: 'service-worker.js',
runtimeCaching: pwaRuntimeCaching,
});
/** @type {import('next').NextConfig} */
const nextConfig = semi({
experimental: {
scrollRestoration: true,
legacyBrowsers: false,
browsersListForSwc: true,
},
assetPrefix: config.assetPrefix,
env: {
SERVER_API_URL: config.client.apiUrl,
COLLABORATION_API_URL: config.client.collaborationUrl,
ENABLE_OSS_S3: config.oss.s3?.enable,
DNS_PREFETCH: (config.client.dnsPrefetch || '').split(' '),
SITE_URL: config.client.siteUrl,
},
webpack: (config, { dev, isServer }) => {
config.resolve.plugins.push(new TsconfigPathsPlugin());
return config;
},
eslint: {
ignoreDuringBuilds: true,
},
// FIXME: douyinfe 的第三方包存在 ts 类型错误!
typescript: {
ignoreBuildErrors: true,
},
});
module.exports = withPWA(nextConfig);
+133
View File
@@ -0,0 +1,133 @@
{
"name": "@think/client",
"private": true,
"scripts": {
"build": "rimraf .next && npx next telemetry disable && next build && node copy-diagram-resources.js",
"dev": "node dev-server.js",
"start": "cross-env NODE_ENV=production node prod-server.js",
"pm2": "pm2 start npm --name @think/client -- start"
},
"dependencies": {
"@douyinfe/semi-icons": "^2.18.0",
"@douyinfe/semi-next": "^2.18.0",
"@douyinfe/semi-ui": "^2.18.0",
"@excalidraw/excalidraw": "^0.12.0",
"@hocuspocus/provider": "^1.0.0-alpha.29",
"@react-pdf-viewer/core": "3.9.0",
"@react-pdf-viewer/default-layout": "3.9.0",
"@react-pdf-viewer/locales": "^1.0.0",
"@think/config": "workspace:^1.0.0",
"@think/constants": "workspace:^1.0.0",
"@think/domains": "workspace:^1.0.0",
"@tiptap/core": "^2.0.0-beta.171",
"@tiptap/extension-blockquote": "^2.0.0-beta.26",
"@tiptap/extension-bold": "^2.0.0-beta.25",
"@tiptap/extension-bullet-list": "^2.0.0-beta.26",
"@tiptap/extension-code": "^2.0.0-beta.26",
"@tiptap/extension-code-block": "^2.0.0-beta.37",
"@tiptap/extension-code-block-lowlight": "^2.0.0-beta.68",
"@tiptap/extension-color": "^2.0.0-beta.9",
"@tiptap/extension-document": "^2.0.0-beta.15",
"@tiptap/extension-dropcursor": "^2.0.0-beta.25",
"@tiptap/extension-gapcursor": "^2.0.0-beta.34",
"@tiptap/extension-hard-break": "^2.0.0-beta.30",
"@tiptap/extension-heading": "^2.0.0-beta.26",
"@tiptap/extension-highlight": "^2.0.0-beta.33",
"@tiptap/extension-history": "^2.0.0-beta.21",
"@tiptap/extension-image": "^2.0.0-beta.25",
"@tiptap/extension-italic": "^2.0.0-beta.25",
"@tiptap/extension-link": "^2.0.0-beta.36",
"@tiptap/extension-list-item": "^2.0.0-beta.20",
"@tiptap/extension-mention": "^2.0.0-beta.95",
"@tiptap/extension-ordered-list": "^2.0.0-beta.27",
"@tiptap/extension-paragraph": "^2.0.0-beta.23",
"@tiptap/extension-placeholder": "^2.0.0-beta.47",
"@tiptap/extension-strike": "^2.0.0-beta.27",
"@tiptap/extension-subscript": "^2.0.0-beta.10",
"@tiptap/extension-superscript": "^2.0.0-beta.10",
"@tiptap/extension-table": "^2.0.0-beta.48",
"@tiptap/extension-table-cell": "^2.0.0-beta.20",
"@tiptap/extension-table-header": "^2.0.0-beta.22",
"@tiptap/extension-table-row": "^2.0.0-beta.19",
"@tiptap/extension-task-item": "^2.0.0-beta.31",
"@tiptap/extension-task-list": "^2.0.0-beta.26",
"@tiptap/extension-text": "^2.0.0-beta.15",
"@tiptap/extension-text-align": "^2.0.0-beta.29",
"@tiptap/extension-text-style": "^2.0.0-beta.23",
"@tiptap/extension-underline": "^2.0.0-beta.23",
"@tiptap/react": "^2.0.0-beta.107",
"@tiptap/suggestion": "^2.0.0-beta.90",
"axios": "^0.25.0",
"buffer-image-size": "^0.6.4",
"classnames": "^2.3.1",
"clone": "^2.1.2",
"cross-env": "^7.0.3",
"deep-equal": "^2.0.5",
"dompurify": "^2.3.5",
"file-saver": "^2.0.5",
"htmldiff-js": "^1.0.5",
"interactjs": "^1.10.11",
"katex": "^0.15.2",
"kity": "^2.0.4",
"lib0": "^0.2.47",
"lodash.pick": "^4.4.0",
"lowlight": "^2.5.0",
"markdown-it": "^12.3.2",
"markdown-it-anchor": "^8.4.1",
"markdown-it-container": "^3.0.0",
"markdown-it-emoji": "^2.0.0",
"markdown-it-sub": "^1.0.0",
"markdown-it-sup": "^1.0.0",
"next": "12.1.0",
"next-pwa": "^5.6.0",
"pdfjs-dist": "3.1.81",
"prosemirror-codemark": "^0.4.2",
"prosemirror-commands": "^1.3.0",
"prosemirror-markdown": "^1.7.0",
"prosemirror-model": "^1.16.1",
"prosemirror-schema-list": "^1.1.6",
"prosemirror-state": "^1.3.4",
"prosemirror-tables": "^1.1.1",
"prosemirror-utils": "^0.9.6",
"prosemirror-view": "^1.23.6",
"react": "17.0.2",
"react-countdown": "^2.3.2",
"react-dom": "17.0.2",
"react-full-screen": "^1.1.1",
"react-helmet": "^6.1.0",
"react-lazy-load-image-component": "^1.5.4",
"react-query": "^3.39.0",
"react-split-pane": "^0.1.92",
"react-visibility-sensor": "^5.1.1",
"requestidlecallback-polyfill": "^1.0.2",
"resize-observer-polyfill": "^1.5.1",
"scroll-into-view-if-needed": "^2.2.29",
"spark-md5": "^3.0.2",
"timeago.js": "^4.0.2",
"tippy.js": "^6.3.7",
"toggle-selection": "^1.0.6",
"viewerjs": "^1.10.4",
"yjs": "^13.5.24"
},
"devDependencies": {
"@types/deep-equal": "^1.0.4",
"@types/lodash.pick": "^4.4.9",
"@types/node": "17.0.13",
"@types/react": "17.0.38",
"@types/react-dom": "17.0.11",
"@types/react-lazy-load-image-component": "^1.6.3",
"@typescript-eslint/eslint-plugin": "^5.21.0",
"@typescript-eslint/parser": "^5.21.0",
"copy-webpack-plugin": "11.0.0",
"eslint": "^8.14.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.29.4",
"eslint-plugin-react-hooks": "^4.5.0",
"eslint-plugin-simple-import-sort": "^7.0.0",
"fs-extra": "^10.0.0",
"tsconfig-paths-webpack-plugin": "^3.5.2",
"typescript": "^4.8.4"
}
}
+12
View File
@@ -0,0 +1,12 @@
const { getConfig } = require('@think/config');
const config = getConfig();
const cli = require('next/dist/cli/next-start');
const port = (config.client && config.client.port) || 5001;
try {
cli.nextStart(['-p', port]);
console.log(`[think] 客户端已启动,端口:${port}`);
} catch (err) {
console.log(`[think] 客户端启动失败!${err.message || err}`);
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,203 @@
<mxStylesheet>
<add as="defaultVertex">
<add as="shape" value="label"/>
<add as="perimeter" value="rectanglePerimeter"/>
<add as="fontSize" value="12"/>
<add as="fontFamily" value="Helvetica"/>
<add as="align" value="center"/>
<add as="verticalAlign" value="middle"/>
<add as="fillColor" value="default"/>
<add as="strokeColor" value="default"/>
<add as="fontColor" value="default"/>
</add>
<add as="defaultEdge">
<add as="shape" value="connector"/>
<add as="labelBackgroundColor" value="default"/>
<add as="endArrow" value="classic"/>
<add as="fontSize" value="11"/>
<add as="fontFamily" value="Helvetica"/>
<add as="align" value="center"/>
<add as="verticalAlign" value="middle"/>
<add as="rounded" value="1"/>
<add as="strokeColor" value="default"/>
<add as="fontColor" value="default"/>
</add>
<add as="text">
<add as="fillColor" value="none"/>
<add as="gradientColor" value="none"/>
<add as="strokeColor" value="none"/>
<add as="align" value="left"/>
<add as="verticalAlign" value="top"/>
</add>
<add as="edgeLabel" extend="text">
<add as="labelBackgroundColor" value="default"/>
<add as="fontSize" value="11"/>
</add>
<add as="label">
<add as="fontStyle" value="1"/>
<add as="align" value="left"/>
<add as="verticalAlign" value="middle"/>
<add as="spacing" value="2"/>
<add as="spacingLeft" value="52"/>
<add as="imageWidth" value="42"/>
<add as="imageHeight" value="42"/>
<add as="rounded" value="1"/>
</add>
<add as="icon" extend="label">
<add as="align" value="center"/>
<add as="imageAlign" value="center"/>
<add as="verticalLabelPosition" value="bottom"/>
<add as="verticalAlign" value="top"/>
<add as="spacingTop" value="4"/>
<add as="labelBackgroundColor" value="default"/>
<add as="spacing" value="0"/>
<add as="spacingLeft" value="0"/>
<add as="spacingTop" value="6"/>
<add as="fontStyle" value="0"/>
<add as="imageWidth" value="48"/>
<add as="imageHeight" value="48"/>
</add>
<add as="swimlane">
<add as="shape" value="swimlane"/>
<add as="fontSize" value="12"/>
<add as="fontStyle" value="1"/>
<add as="startSize" value="23"/>
</add>
<add as="group">
<add as="verticalAlign" value="top"/>
<add as="fillColor" value="none"/>
<add as="strokeColor" value="none"/>
<add as="gradientColor" value="none"/>
<add as="pointerEvents" value="0"/>
</add>
<add as="ellipse">
<add as="shape" value="ellipse"/>
<add as="perimeter" value="ellipsePerimeter"/>
</add>
<add as="rhombus">
<add as="shape" value="rhombus"/>
<add as="perimeter" value="rhombusPerimeter"/>
</add>
<add as="triangle">
<add as="shape" value="triangle"/>
<add as="perimeter" value="trianglePerimeter"/>
</add>
<add as="line">
<add as="shape" value="line"/>
<add as="strokeWidth" value="4"/>
<add as="labelBackgroundColor" value="default"/>
<add as="verticalAlign" value="top"/>
<add as="spacingTop" value="8"/>
</add>
<add as="image">
<add as="shape" value="image"/>
<add as="labelBackgroundColor" value="default"/>
<add as="verticalAlign" value="top"/>
<add as="verticalLabelPosition" value="bottom"/>
</add>
<add as="roundImage" extend="image">
<add as="perimeter" value="ellipsePerimeter"/>
</add>
<add as="rhombusImage" extend="image">
<add as="perimeter" value="rhombusPerimeter"/>
</add>
<add as="arrow">
<add as="shape" value="arrow"/>
<add as="edgeStyle" value="none"/>
<add as="fillColor" value="default"/>
</add>
<add as="fancy">
<add as="shadow" value="1"/>
<add as="glass" value="1"/>
</add>
<add as="gray" extend="fancy">
<add as="gradientColor" value="#B3B3B3"/>
<add as="fillColor" value="#F5F5F5"/>
<add as="strokeColor" value="#666666"/>
</add>
<add as="blue" extend="fancy">
<add as="gradientColor" value="#7EA6E0"/>
<add as="fillColor" value="#DAE8FC"/>
<add as="strokeColor" value="#6C8EBF"/>
</add>
<add as="green" extend="fancy">
<add as="gradientColor" value="#97D077"/>
<add as="fillColor" value="#D5E8D4"/>
<add as="strokeColor" value="#82B366"/>
</add>
<add as="turquoise" extend="fancy">
<add as="gradientColor" value="#67AB9F"/>
<add as="fillColor" value="#D5E8D4"/>
<add as="strokeColor" value="#6A9153"/>
</add>
<add as="yellow" extend="fancy">
<add as="gradientColor" value="#FFD966"/>
<add as="fillColor" value="#FFF2CC"/>
<add as="strokeColor" value="#D6B656"/>
</add>
<add as="orange" extend="fancy">
<add as="gradientColor" value="#FFA500"/>
<add as="fillColor" value="#FFCD28"/>
<add as="strokeColor" value="#D79B00"/>
</add>
<add as="red" extend="fancy">
<add as="gradientColor" value="#EA6B66"/>
<add as="fillColor" value="#F8CECC"/>
<add as="strokeColor" value="#B85450"/>
</add>
<add as="pink" extend="fancy">
<add as="gradientColor" value="#B5739D"/>
<add as="fillColor" value="#E6D0DE"/>
<add as="strokeColor" value="#996185"/>
</add>
<add as="purple" extend="fancy">
<add as="gradientColor" value="#8C6C9C"/>
<add as="fillColor" value="#E1D5E7"/>
<add as="strokeColor" value="#9673A6"/>
</add>
<add as="plain-gray">
<add as="gradientColor" value="#B3B3B3"/>
<add as="fillColor" value="#F5F5F5"/>
<add as="strokeColor" value="#666666"/>
</add>
<add as="plain-blue">
<add as="gradientColor" value="#7EA6E0"/>
<add as="fillColor" value="#DAE8FC"/>
<add as="strokeColor" value="#6C8EBF"/>
</add>
<add as="plain-green">
<add as="gradientColor" value="#97D077"/>
<add as="fillColor" value="#D5E8D4"/>
<add as="strokeColor" value="#82B366"/>
</add>
<add as="plain-turquoise">
<add as="gradientColor" value="#67AB9F"/>
<add as="fillColor" value="#D5E8D4"/>
<add as="strokeColor" value="#6A9153"/>
</add>
<add as="plain-yellow">
<add as="gradientColor" value="#FFD966"/>
<add as="fillColor" value="#FFF2CC"/>
<add as="strokeColor" value="#D6B656"/>
</add>
<add as="plain-orange">
<add as="gradientColor" value="#FFA500"/>
<add as="fillColor" value="#FFCD28"/>
<add as="strokeColor" value="#D79B00"/>
</add>
<add as="plain-red">
<add as="gradientColor" value="#EA6B66"/>
<add as="fillColor" value="#F8CECC"/>
<add as="strokeColor" value="#B85450"/>
</add>
<add as="plain-pink">
<add as="gradientColor" value="#B5739D"/>
<add as="fillColor" value="#E6D0DE"/>
<add as="strokeColor" value="#996185"/>
</add>
<add as="plain-purple">
<add as="gradientColor" value="#8C6C9C"/>
<add as="fillColor" value="#E1D5E7"/>
<add as="strokeColor" value="#9673A6"/>
</add>
</mxStylesheet>
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 B

@@ -0,0 +1,5 @@
askZoom=Enter zoom (%)
properties=Properties
outline=Outline
tasks=Tasks
help=Help
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,849 @@
<shapes name="mxGraph.arrows">
<shape name="Arrow Down" h="97.5" w="70" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
</connections>
<background>
<path>
<move x="20" y="0"/>
<line x="20" y="59"/>
<line x="0" y="59"/>
<line x="35" y="97.5"/>
<line x="70" y="59"/>
<line x="50" y="59"/>
<line x="50" y="0"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Arrow Left" h="70" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="97.5" y="20"/>
<line x="38.5" y="20"/>
<line x="38.5" y="0"/>
<line x="0" y="35"/>
<line x="38.5" y="70"/>
<line x="38.5" y="50"/>
<line x="97.5" y="50"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Arrow Right" h="70" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="0" y="20"/>
<line x="59" y="20"/>
<line x="59" y="0"/>
<line x="97.5" y="35"/>
<line x="59" y="70"/>
<line x="59" y="50"/>
<line x="0" y="50"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Arrow Up" h="97.5" w="70" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
</connections>
<background>
<path>
<move x="20" y="97.5"/>
<line x="20" y="38.5"/>
<line x="0" y="38.5"/>
<line x="35" y="0"/>
<line x="70" y="38.5"/>
<line x="50" y="38.5"/>
<line x="50" y="97.5"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Bent Left Arrow" h="97" w="97.01" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.85" y="1" perimeter="0" name="S"/>
<constraint x="0" y="0.29" perimeter="0" name="W"/>
</connections>
<background>
<path>
<move x="68" y="97"/>
<line x="68" y="48"/>
<arc rx="5" ry="5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="63" y="43"/>
<line x="38" y="43"/>
<line x="38" y="56"/>
<line x="0" y="28"/>
<line x="38" y="0"/>
<line x="38" y="13"/>
<line x="63" y="13"/>
<arc rx="35" ry="35" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="97" y="48"/>
<line x="97" y="97"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Bent Right Arrow" h="97" w="97.01" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.15" y="1" perimeter="0" name="S"/>
<constraint x="1" y="0.29" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="29.01" y="97"/>
<line x="29.01" y="48"/>
<arc rx="5" ry="5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="34.01" y="43"/>
<line x="59.01" y="43"/>
<line x="59.01" y="56"/>
<line x="97.01" y="28"/>
<line x="59.01" y="0"/>
<line x="59.01" y="13"/>
<line x="34.01" y="13"/>
<arc rx="35" ry="35" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="0.01" y="48"/>
<line x="0.01" y="97"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Bent Up Arrow" h="83.5" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.71" y="0" perimeter="0" name="N"/>
<constraint x="0" y="0.82" perimeter="0" name="W"/>
</connections>
<background>
<path>
<move x="0" y="53.5"/>
<line x="54" y="53.5"/>
<line x="54" y="23.5"/>
<line x="42" y="23.5"/>
<line x="69" y="0"/>
<line x="97" y="23.5"/>
<line x="84" y="23.5"/>
<line x="84" y="83.5"/>
<line x="0" y="83.5"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Callout Double Arrow" h="97.5" w="50" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
</connections>
<background>
<path>
<move x="15" y="24"/>
<line x="15" y="19"/>
<line x="6" y="19"/>
<line x="25" y="0"/>
<line x="44" y="19"/>
<line x="35" y="19"/>
<line x="35" y="24"/>
<line x="50" y="24"/>
<line x="50" y="74"/>
<line x="35" y="74"/>
<line x="35" y="79"/>
<line x="44" y="79"/>
<line x="25" y="97.5"/>
<line x="6" y="79"/>
<line x="15" y="79"/>
<line x="15" y="74"/>
<line x="0" y="74"/>
<line x="0" y="24"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Callout Quad Arrow" h="97" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="38.5" y="23.5"/>
<line x="38.5" y="18.5"/>
<line x="29.5" y="18.5"/>
<line x="48.5" y="0"/>
<line x="67.5" y="18.5"/>
<line x="58.5" y="18.5"/>
<line x="58.5" y="23.5"/>
<line x="73.5" y="23.5"/>
<line x="73.5" y="38.5"/>
<line x="78.5" y="38.5"/>
<line x="78.5" y="29.5"/>
<line x="97" y="48.5"/>
<line x="78.5" y="67.5"/>
<line x="78.5" y="58.5"/>
<line x="73.5" y="58.5"/>
<line x="73.5" y="73.5"/>
<line x="58.5" y="73.5"/>
<line x="58.5" y="78.5"/>
<line x="67.5" y="78.5"/>
<line x="48.5" y="97"/>
<line x="29.5" y="78.5"/>
<line x="38.5" y="78.5"/>
<line x="38.5" y="73.5"/>
<line x="23.5" y="73.5"/>
<line x="23.5" y="58.5"/>
<line x="18.5" y="58.5"/>
<line x="18.5" y="67.5"/>
<line x="0" y="48.5"/>
<line x="18.5" y="29.5"/>
<line x="18.5" y="38.5"/>
<line x="23.5" y="38.5"/>
<line x="23.5" y="23.5"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Callout Up Arrow" h="98" w="60" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
</connections>
<background>
<path>
<move x="20" y="39"/>
<line x="20" y="19"/>
<line x="11" y="19"/>
<line x="30" y="0"/>
<line x="49" y="19"/>
<line x="40" y="19"/>
<line x="40" y="39"/>
<line x="60" y="39"/>
<line x="60" y="98"/>
<line x="0" y="98"/>
<line x="0" y="39"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Chevron Arrow" h="60" w="96" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.31" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="30" y="30"/>
<line x="0" y="0"/>
<line x="66" y="0"/>
<line x="96" y="30"/>
<line x="66" y="60"/>
<line x="0" y="60"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Circular Arrow" h="69.5" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.12" y="0.64" perimeter="0" name="SW"/>
<constraint x="0.794" y="1" perimeter="0" name="SE"/>
</connections>
<background>
<path>
<move x="0" y="44.5"/>
<arc rx="44.5" ry="44.5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="89" y="44.5"/>
<line x="97" y="44.5"/>
<line x="77" y="69.5"/>
<line x="57" y="44.5"/>
<line x="65" y="44.5"/>
<arc rx="20.5" ry="20.5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="24" y="44.5"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Jump-in Arrow 1" h="99.41" w="96" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.024" perimeter="0" name="NW"/>
<constraint x="0.657" y="1" perimeter="0" name="S"/>
</connections>
<background>
<linejoin join="round"/>
<path>
<move x="30" y="60.41"/>
<line x="48" y="60.41"/>
<arc rx="60" ry="60" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="0" y="2.41"/>
<arc rx="75" ry="75" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="78" y="60.41"/>
<line x="96" y="60.41"/>
<line x="63" y="99.41"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Jump-in Arrow 2" h="99.41" w="96" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="1" y="0.024" perimeter="0" name="NE"/>
<constraint x="0.343" y="1" perimeter="0" name="S"/>
</connections>
<background>
<linejoin join="round"/>
<path>
<move x="66" y="60.41"/>
<line x="48" y="60.41"/>
<arc rx="60" ry="60" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="96" y="2.41"/>
<arc rx="75" ry="75" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="18" y="60.41"/>
<line x="0" y="60.41"/>
<line x="33" y="99.41"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Left and Up Arrow" h="96.5" w="96.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.71" perimeter="0" name="W"/>
<constraint x="0.71" y="0" perimeter="0" name="N"/>
</connections>
<background>
<path>
<move x="23.5" y="53.5"/>
<line x="53.5" y="53.5"/>
<line x="53.5" y="23.5"/>
<line x="41.5" y="23.5"/>
<line x="68.5" y="0"/>
<line x="96.5" y="23.5"/>
<line x="83.5" y="23.5"/>
<line x="83.5" y="83.5"/>
<line x="23.5" y="83.5"/>
<line x="23.5" y="96.5"/>
<line x="0" y="68.5"/>
<line x="23.5" y="41.5"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Left Sharp Edged Head Arrow" h="60" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="97.5" y="20"/>
<line x="18.5" y="20"/>
<line x="30.5" y="0"/>
<line x="18.5" y="0"/>
<line x="0" y="30"/>
<line x="18.5" y="60"/>
<line x="30.5" y="60"/>
<line x="18.5" y="40"/>
<line x="97.5" y="40"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Notched Signal-in Arrow" h="30" w="96.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.13" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="0" y="0"/>
<line x="83" y="0"/>
<line x="96.5" y="15"/>
<line x="83" y="30"/>
<line x="0" y="30"/>
<line x="13" y="15"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Quad Arrow" h="97.5" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="39" y="39"/>
<line x="39" y="19"/>
<line x="30" y="19"/>
<line x="49" y="0"/>
<line x="68" y="19"/>
<line x="59" y="19"/>
<line x="59" y="39"/>
<line x="79" y="39"/>
<line x="79" y="30"/>
<line x="97.5" y="49"/>
<line x="79" y="68"/>
<line x="79" y="59"/>
<line x="59" y="59"/>
<line x="59" y="79"/>
<line x="68" y="79"/>
<line x="49" y="97.5"/>
<line x="30" y="79"/>
<line x="39" y="79"/>
<line x="39" y="59"/>
<line x="19" y="59"/>
<line x="19" y="68"/>
<line x="0" y="49"/>
<line x="19" y="30"/>
<line x="19" y="39"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Right Notched Arrow" h="70" w="96.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.13" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="0" y="20"/>
<line x="58" y="20"/>
<line x="58" y="0"/>
<line x="96.5" y="35"/>
<line x="58" y="70"/>
<line x="58" y="50"/>
<line x="0" y="50"/>
<line x="13" y="35"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Sharp Edged Arrow" h="60" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="97.5" y="20"/>
<line x="18.5" y="20"/>
<line x="27.5" y="5"/>
<line x="18.5" y="0"/>
<line x="0" y="30"/>
<line x="18.5" y="60"/>
<line x="27.5" y="55"/>
<line x="18.5" y="40"/>
<line x="97.5" y="40"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Signal-in Arrow" h="30" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="0" y="0"/>
<line x="84" y="0"/>
<line x="97.5" y="15"/>
<line x="84" y="30"/>
<line x="0" y="30"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Slender Left Arrow" h="60" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="97.5" y="20"/>
<line x="18.5" y="20"/>
<line x="18.5" y="0"/>
<line x="0" y="30"/>
<line x="18.5" y="60"/>
<line x="18.5" y="40"/>
<line x="97.5" y="40"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Slender Two Way Arrow" h="60" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="78.5" y="20"/>
<line x="18.5" y="20"/>
<line x="18.5" y="0"/>
<line x="0" y="30"/>
<line x="18.5" y="60"/>
<line x="18.5" y="40"/>
<line x="78.5" y="40"/>
<line x="78.5" y="60"/>
<line x="97.5" y="30"/>
<line x="78.5" y="0"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Slender Wide Tailed Arrow" h="60" w="96.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="0.8" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="58.5" y="20"/>
<line x="18.5" y="20"/>
<line x="18.5" y="0"/>
<line x="0" y="30"/>
<line x="18.5" y="60"/>
<line x="18.5" y="40"/>
<line x="58.5" y="40"/>
<line x="73.5" y="60"/>
<line x="96.5" y="60"/>
<line x="76.5" y="30"/>
<line x="96.5" y="0"/>
<line x="73.5" y="0"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Striped Arrow" h="70" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="24" y="20"/>
<line x="59" y="20"/>
<line x="59" y="0"/>
<line x="97.5" y="35"/>
<line x="59" y="70"/>
<line x="59" y="50"/>
<line x="24" y="50"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
<rect x="8" y="20" w="12" h="30"/>
<fillstroke/>
<rect x="0" y="20" w="4" h="30"/>
<fillstroke/>
</foreground>
</shape>
<shape name="Stylised Notched Arrow" h="60" w="96.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.13" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<miterlimit limit="8"/>
<path>
<move x="0" y="5"/>
<line x="68" y="20"/>
<line x="58" y="0"/>
<line x="96.5" y="30"/>
<line x="58" y="60"/>
<line x="68" y="45"/>
<line x="0" y="55"/>
<line x="13" y="30"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Triad Arrow" h="68" w="97.5" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.72" perimeter="0" name="W"/>
<constraint x="1" y="0.72" perimeter="0" name="E"/>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
</connections>
<background>
<path>
<move x="39" y="39"/>
<line x="39" y="19"/>
<line x="30" y="19"/>
<line x="49" y="0"/>
<line x="68" y="19"/>
<line x="59" y="19"/>
<line x="59" y="39"/>
<line x="79" y="39"/>
<line x="79" y="30"/>
<line x="97.5" y="49"/>
<line x="79" y="68"/>
<line x="79" y="59"/>
<line x="39" y="59"/>
<line x="19" y="59"/>
<line x="19" y="68"/>
<line x="0" y="49"/>
<line x="19" y="30"/>
<line x="19" y="39"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Two Way Arrow Horizontal" h="60" w="96" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.5" perimeter="0" name="W"/>
<constraint x="1" y="0.5" perimeter="0" name="E"/>
</connections>
<background>
<path>
<move x="63" y="15"/>
<line x="63" y="0"/>
<line x="96" y="30"/>
<line x="63" y="60"/>
<line x="63" y="45"/>
<line x="33" y="45"/>
<line x="33" y="60"/>
<line x="0" y="30"/>
<line x="33" y="0"/>
<line x="33" y="15"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="Two Way Arrow Vertical" h="96" w="60" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.5" y="0" perimeter="0" name="N"/>
<constraint x="0.5" y="1" perimeter="0" name="S"/>
</connections>
<background>
<path>
<move x="15" y="63"/>
<line x="0" y="63"/>
<line x="30" y="96"/>
<line x="60" y="63"/>
<line x="45" y="63"/>
<line x="45" y="33"/>
<line x="60" y="33"/>
<line x="30" y="0"/>
<line x="0" y="33"/>
<line x="15" y="33"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="U Turn Arrow" h="98" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.12" y="1" perimeter="0" name="SW"/>
<constraint x="0.792" y="0.71" perimeter="0" name="SE"/>
</connections>
<background>
<path>
<move x="0" y="44.5"/>
<arc rx="44.5" ry="44.5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="89" y="44.5"/>
<line x="97" y="44.5"/>
<line x="77" y="69.5"/>
<line x="57" y="44.5"/>
<line x="65" y="44.5"/>
<arc rx="20.5" ry="20.5" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="24" y="44.83"/>
<line x="24" y="98"/>
<line x="0" y="98"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="U Turn Down Arrow" h="62" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.91" y="1" perimeter="0" name="SE"/>
<constraint x="0.237" y="1" perimeter="0" name="SW"/>
</connections>
<background>
<path>
<move x="97" y="62"/>
<line x="97" y="32"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="33" y="32"/>
<line x="46" y="32"/>
<line x="23" y="62"/>
<line x="0" y="32"/>
<line x="13" y="32"/>
<arc rx="32" ry="32" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="45" y="0"/>
<line x="65" y="0"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="53" y="3"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="78" y="32"/>
<line x="78" y="62"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="U Turn Left Arrow" h="97.07" w="62.23" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0" y="0.76" perimeter="0" name="SW"/>
<constraint x="0" y="0.1" perimeter="0" name="NW"/>
</connections>
<background>
<path>
<move x="0" y="0.19"/>
<line x="30" y="0.07"/>
<arc rx="30" ry="30" x-axis-rotation="-90.22" large-arc-flag="0" sweep-flag="1" x="30.25" y="64.07"/>
<line x="30.2" y="51.07"/>
<line x="0.29" y="74.19"/>
<line x="30.37" y="97.07"/>
<line x="30.32" y="84.07"/>
<arc rx="32" ry="32" x-axis-rotation="-90.22" large-arc-flag="0" sweep-flag="0" x="62.2" y="51.95"/>
<line x="62.13" y="31.95"/>
<arc rx="30" ry="30" x-axis-rotation="-90.22" large-arc-flag="0" sweep-flag="1" x="59.17" y="43.96"/>
<arc rx="30" ry="30" x-axis-rotation="-90.22" large-arc-flag="0" sweep-flag="0" x="30.08" y="19.07"/>
<line x="0.08" y="19.19"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="U Turn Right Arrow" h="97.07" w="62.23" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="1" y="0.76" perimeter="0" name="SW"/>
<constraint x="1" y="0.1" perimeter="0" name="NW"/>
</connections>
<background>
<path>
<move x="62.23" y="0.19"/>
<line x="32.23" y="0.07"/>
<arc rx="30" ry="30" x-axis-rotation="-89.78" large-arc-flag="0" sweep-flag="0" x="31.99" y="64.07"/>
<line x="32.03" y="51.07"/>
<line x="61.95" y="74.19"/>
<line x="31.86" y="97.07"/>
<line x="31.91" y="84.07"/>
<arc rx="32" ry="32" x-axis-rotation="-89.78" large-arc-flag="0" sweep-flag="1" x="0.03" y="51.95"/>
<line x="0.11" y="31.95"/>
<arc rx="30" ry="30" x-axis-rotation="-89.78" large-arc-flag="0" sweep-flag="0" x="3.06" y="43.96"/>
<arc rx="30" ry="30" x-axis-rotation="-89.78" large-arc-flag="0" sweep-flag="1" x="32.16" y="19.07"/>
<line x="62.16" y="19.19"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
<shape name="U Turn Up Arrow" h="62" w="97" aspect="variable" strokewidth="inherit">
<connections>
<constraint x="0.91" y="0" perimeter="0" name="NE"/>
<constraint x="0.237" y="0" perimeter="0" name="NW"/>
</connections>
<background>
<path>
<move x="97" y="0"/>
<line x="97" y="30"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="33" y="30"/>
<line x="46" y="30"/>
<line x="23" y="0"/>
<line x="0" y="30"/>
<line x="13" y="30"/>
<arc rx="32" ry="32" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="45" y="62"/>
<line x="65" y="62"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="1" x="53" y="59"/>
<arc rx="30" ry="30" x-axis-rotation="0" large-arc-flag="0" sweep-flag="0" x="78" y="30"/>
<line x="78" y="0"/>
<close/>
</path>
</background>
<foreground>
<fillstroke/>
</foreground>
</shape>
</shapes>
@@ -0,0 +1,713 @@
<shapes name="mxgraph.atlassian">
<shape aspect="variable" h="100" name="access" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="43.47" y="40.74"/>
<line x="43.47" y="33.41"/>
<curve x1="43.47" x2="46.13" x3="50.31" y1="29.57" y2="27.41" y3="27.41"/>
<curve x1="54.43" x2="56.48" x3="56.48" y1="27.41" y2="30.3" y3="33.49"/>
<line x="56.48" y="40.74"/>
<close/>
<move x="64.28" y="40.74"/>
<line x="64.28" y="31.49"/>
<curve x1="64.28" x2="58.14" x3="50.56" y1="24.17" y2="18.82" y3="18.82"/>
<curve x1="42.72" x2="35.29" x3="35.29" y1="18.82" y2="23.21" y3="31.58"/>
<line x="35.29" y="40.74"/>
<line x="26.7" y="40.74"/>
<line x="26.7" y="78.36"/>
<line x="72.42" y="78.36"/>
<line x="72.42" y="40.74"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="away" strokewidth="inherit" w="100">
<connections/>
<foreground>
<ellipse h="100" w="100" x="0" y="0"/>
<fillstroke/>
<fillcolor color="#ffffff"/>
<path>
<move x="25" y="58"/>
<line x="25" y="42"/>
<line x="75" y="42"/>
<line x="75" y="58"/>
<close/>
</path>
<fill/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="bug" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="50.39" y="73.31"/>
<curve x1="64.49" x2="73.56" x3="73.56" y1="73.31" y2="62.97" y3="50.24"/>
<curve x1="73.56" x2="64.92" x3="50.39" y1="36.11" y2="25.57" y3="25.57"/>
<curve x1="35.5" x2="27" x3="27" y1="25.57" y2="36.35" y3="50.1"/>
<curve x1="27" x2="38.33" x3="50.39" y1="63.58" y2="73.31" y3="73.31"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="change" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
<move x="38.55" y="83.84"/>
<line x="38.55" y="71.85"/>
<line x="81.62" y="71.85"/>
<line x="81.62" y="62.59"/>
<line x="38.55" y="62.59"/>
<line x="38.55" y="51.51"/>
<line x="18.08" y="67.68"/>
<close/>
<move x="60.84" y="46.03"/>
<line x="81.31" y="29.87"/>
<line x="60.84" y="13.71"/>
<line x="60.84" y="24.79"/>
<line x="17.78" y="24.79"/>
<line x="17.78" y="34.04"/>
<line x="60.84" y="34.04"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="75" name="check" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="0" y="50"/>
<line x="25" y="75"/>
<line x="100" y="0"/>
</path>
<stroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="checkbox" strokewidth="inherit" w="100">
<connections/>
<foreground>
<ellipse h="100" w="100" x="0" y="0"/>
<fillstroke/>
<fillcolor color="#ffffff"/>
<path>
<move x="46.57" y="73.87"/>
<line x="20.47" y="50.27"/>
<line x="28.27" y="41.67"/>
<line x="45.57" y="57.57"/>
<line x="72.42" y="26.47"/>
<line x="81.17" y="33.97"/>
<close/>
</path>
<fill/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="checkbox 2" strokewidth="inherit" w="100">
<connections/>
<foreground>
<save/>
<roundrect arcsize="10" h="100" w="100" x="0" y="0"/>
<stroke/>
<restore/>
<rect/>
<stroke/>
<path>
<move x="0" y="10"/>
<arc large-arc-flag="0" rx="10" ry="10" sweep-flag="1" x="10" x-axis-rotation="0" y="0"/>
<line x="90" y="0"/>
<arc large-arc-flag="0" rx="10" ry="10" sweep-flag="1" x="100" x-axis-rotation="0" y="10"/>
<line x="100" y="90"/>
<arc large-arc-flag="0" rx="10" ry="10" sweep-flag="1" x="90" x-axis-rotation="0" y="100"/>
<line x="10" y="100"/>
<arc large-arc-flag="0" rx="10" ry="10" sweep-flag="1" x="0" x-axis-rotation="0" y="90"/>
<close/>
</path>
<fill/>
<fillcolor color="#ffffff"/>
<path>
<move x="10.4" y="63.4"/>
<line x="36.4" y="87"/>
<line x="90.2" y="25"/>
<line x="81.5" y="17.3"/>
<line x="35.4" y="70.8"/>
<line x="18.1" y="54.9"/>
<close/>
</path>
<fill/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="close" strokewidth="inherit" w="100">
<connections/>
<foreground>
<ellipse h="100" w="100" x="0" y="0"/>
<fillstroke/>
<fillcolor color="#ffffff"/>
<path>
<move x="21.4" y="71.5"/>
<line x="43" y="50"/>
<line x="21.4" y="28.5"/>
<line x="28.5" y="21.4"/>
<line x="50" y="43"/>
<line x="71.5" y="21.4"/>
<line x="78.6" y="28.5"/>
<line x="57" y="50"/>
<line x="78.5" y="71.5"/>
<line x="71.5" y="78.5"/>
<line x="50" y="57"/>
<line x="28.5" y="78.5"/>
<close/>
</path>
<fill/>
</foreground>
</shape>
<shape aspect="variable" h="100.19" name="critical" strokewidth="inherit" w="57.85">
<connections/>
<foreground>
<path>
<move x="23.06" y="86.24"/>
<curve x1="23.06" x2="26.21" x3="28.8" y1="82.46" y2="80.6" y3="80.6"/>
<curve x1="32.3" x2="34.67" x3="34.67" y1="80.6" y2="83.35" y3="86.55"/>
<line x="34.67" y="94.24"/>
<curve x1="34.67" x2="32.3" x3="28.8" y1="97.43" y2="100.19" y3="100.19"/>
<curve x1="26.21" x2="23.06" x3="23.06" y1="100.19" y2="98.33" y3="94.54"/>
<close/>
<move x="23.21" y="20.13"/>
<line x="10.73" y="32.76"/>
<curve x1="7.9" x2="4.44" x3="2.45" y1="35.16" y2="34.42" y3="32.5"/>
<curve x1="0.64" x2="0" x3="2.77" y1="30.65" y2="26.73" y3="24.16"/>
<line x="24.57" y="2.31"/>
<curve x1="26.8" x2="30.86" x3="33.12" y1="0.09" y2="0" y3="2.36"/>
<line x="55.04" y="24.28"/>
<curve x1="57.04" x2="57.85" x3="54.98" y1="26.26" y2="29.98" y3="32.78"/>
<curve x1="52.09" x2="48.79" x3="46.53" y1="35.13" y2="34.66" y3="32.23"/>
<line x="34.82" y="20.47"/>
<line x="34.82" y="65.67"/>
<curve x1="34.82" x2="32.44" x3="28.95" y1="68.86" y2="71.62" y3="71.62"/>
<curve x1="26.36" x2="23.21" x3="23.21" y1="71.62" y2="69.76" y3="65.97"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="101.24" name="double" strokewidth="inherit" w="90.84">
<connections/>
<foreground>
<path>
<move x="4.69" y="16.58"/>
<curve x1="0" x2="2.77" x3="5.4" y1="11.24" y2="5.59" y3="3.33"/>
<curve x1="8.39" x2="14.36" x3="17.32" y1="0.52" y2="0.16" y3="3.24"/>
<line x="46.05" y="31.94"/>
<line x="73.89" y="3.85"/>
<curve x1="77.67" x2="83.24" x3="86.92" y1="0" y2="0.2" y3="3.46"/>
<curve x1="90.84" x2="90.4" x3="87.97" y1="7.53" y2="12.61" y3="15.47"/>
<line x="54.25" y="49.5"/>
<curve x1="50.42" x2="44.33" x3="38.89" y1="53.88" y2="56.11" y3="50.69"/>
<close/>
<move x="4.07" y="62.67"/>
<curve x1="0.49" x2="1.77" x3="5.24" y1="58.92" y2="52.64" y3="49.75"/>
<curve x1="8.37" x2="13.95" x3="16.99" y1="47.27" y2="46.64" y3="49.6"/>
<line x="45.88" y="78.52"/>
<line x="74.17" y="50.16"/>
<curve x1="77.42" x2="83.3" x3="87.27" y1="47.06" y2="46.47" y3="50.66"/>
<curve x1="89.88" x2="90.36" x3="87.81" y1="53.69" y2="59.31" y3="62.04"/>
<line x="52.68" y="97.56"/>
<curve x1="48.93" x2="42.58" x3="39.34" y1="101.18" y2="101.24" y3="97.74"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="101.24" name="double up" strokewidth="inherit" w="90.84">
<connections/>
<foreground>
<path>
<move x="4.69" y="84.67"/>
<curve x1="0" x2="2.77" x3="5.4" y1="90" y2="95.65" y3="97.92"/>
<curve x1="8.39" x2="14.36" x3="17.32" y1="100.72" y2="101.08" y3="98"/>
<line x="46.05" y="69.3"/>
<line x="73.89" y="97.39"/>
<curve x1="77.67" x2="83.24" x3="86.92" y1="101.24" y2="101.04" y3="97.78"/>
<curve x1="90.84" x2="90.4" x3="87.97" y1="93.71" y2="88.63" y3="85.77"/>
<line x="54.25" y="51.74"/>
<curve x1="50.42" x2="44.33" x3="38.89" y1="47.36" y2="45.13" y3="50.55"/>
<close/>
<move x="4.07" y="38.57"/>
<curve x1="0.49" x2="1.77" x3="5.24" y1="42.32" y2="48.6" y3="51.5"/>
<curve x1="8.37" x2="13.95" x3="16.99" y1="53.97" y2="54.61" y3="51.64"/>
<line x="45.88" y="22.72"/>
<line x="74.17" y="51.08"/>
<curve x1="77.42" x2="83.3" x3="87.27" y1="54.18" y2="54.77" y3="50.58"/>
<curve x1="89.88" x2="90.36" x3="87.81" y1="47.55" y2="41.93" y3="39.2"/>
<line x="52.68" y="3.68"/>
<curve x1="48.93" x2="42.58" x3="39.34" y1="0.06" y2="0" y3="3.5"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="do not disturb" strokewidth="inherit" w="100">
<connections/>
<foreground>
<ellipse h="100" w="100" x="0" y="0"/>
<fillstroke/>
<fillcolor color="#ffffff"/>
<path>
<move x="38" y="26.7"/>
<line x="73.2" y="62"/>
<line x="62" y="73.2"/>
<line x="26.7" y="38"/>
<close/>
</path>
<fill/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="epic" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="71.72" y="49.21"/>
<curve x1="74.39" x2="72.22" x3="68.71" y1="44.31" y2="41.07" y3="41.11"/>
<line x="49.08" y="42.05"/>
<line x="51.98" y="23.66"/>
<curve x1="52.33" x2="46.01" x3="43.88" y1="18.74" y2="18.75" y3="21.9"/>
<line x="28.3" y="50.56"/>
<curve x1="25.72" x2="27.17" x3="31.83" y1="55.57" y2="58.04" y3="58.04"/>
<line x="52.5" y="56.07"/>
<line x="47.73" y="74.25"/>
<curve x1="46.45" x2="54.56" x3="56.55" y1="78.84" y2="80.67" y3="77.36"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="fault" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="53.71" y="56.64"/>
<curve x1="61.91" x2="69" x3="74.41" y1="57.57" y2="56.51" y3="51.9"/>
<curve x1="79.57" x2="80.61" x3="79.45" y1="46.78" y2="40.51" y3="34.43"/>
<line x="68.35" y="42.13"/>
<curve x1="65.42" x2="61.24" x3="58.89" y1="43.92" y2="42.38" y3="38.81"/>
<curve x1="56.72" x2="56.41" x3="58.96" y1="35.59" y2="30.97" y3="29.34"/>
<line x="70.85" y="21.62"/>
<curve x1="63.44" x2="54.39" x3="47.79" y1="18.88" y2="19.06" y3="24.78"/>
<curve x1="41.86" x2="41.9" x3="43.6" y1="30.19" y2="38.9" y3="43.75"/>
<line x="22.89" y="65.58"/>
<curve x1="19.75" x2="20.31" x3="24.44" y1="69.21" y2="74.3" y3="77.41"/>
<curve x1="27.89" x2="32.38" x3="35.03" y1="80.16" y2="80.14" y3="77.55"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="improvement" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="44.08" y="39.91"/>
<line x="44.08" y="74.62"/>
<curve x1="44.08" x2="47.37" x3="50.09" y1="78.58" y2="80.53" y3="80.53"/>
<curve x1="53.74" x2="56.23" x3="56.23" y1="80.53" y2="77.65" y3="74.3"/>
<line x="56.23" y="40.26"/>
<line x="68.49" y="52.57"/>
<curve x1="70.86" x2="74.31" x3="77.34" y1="55.12" y2="55.61" y3="53.15"/>
<curve x1="80.34" x2="79.5" x3="77.4" y1="50.22" y2="46.32" y3="44.25"/>
<line x="54.45" y="21.3"/>
<curve x1="52.09" x2="47.84" x3="45.5" y1="18.83" y2="18.92" y3="21.24"/>
<line x="22.68" y="44.12"/>
<curve x1="19.77" x2="20.44" x3="22.34" y1="46.81" y2="50.91" y3="52.86"/>
<curve x1="24.42" x2="28.05" x3="31.01" y1="54.87" y2="55.63" y3="53.13"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="it help" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="22.9" y="62.8"/>
<line x="22.9" y="24.8"/>
<line x="76.9" y="24.8"/>
<line x="76.9" y="62.8"/>
<line x="22.9" y="62.8"/>
<close/>
<move x="21" y="67.6"/>
<line x="40.9" y="67.7"/>
<line x="41.5" y="71.2"/>
<curve x1="41.9" x2="40.8" x3="39.1" y1="73" y2="74.7" y3="75.2"/>
<curve x1="36.9" x2="34.6" x3="32.3" y1="76" y2="76.4" y3="76.4"/>
<line x="27.9" y="76.4"/>
<line x="27.9" y="80.4"/>
<line x="69.5" y="80.4"/>
<line x="69.5" y="76.4"/>
<line x="65.8" y="76.4"/>
<curve x1="63.8" x2="61.7" x3="59.8" y1="76.5" y2="76.2" y3="75.5"/>
<curve x1="58.1" x2="57" x3="57.3" y1="75.1" y2="73.4" y3="71.6"/>
<curve x1="57.3" x2="57.3" x3="57.3" y1="71.6" y2="71.5" y3="71.5"/>
<line x="58.2" y="67.7"/>
<line x="78.2" y="67.7"/>
<curve x1="79.9" x2="81.4" x3="81.8" y1="67.6" y2="66.3" y3="64.6"/>
<line x="81.9" y="23"/>
<curve x1="81.7" x2="80.1" x3="78.2" y1="21.1" y2="19.6" y3="19.7"/>
<line x="21.2" y="19.7"/>
<curve x1="19.6" x2="18.3" x3="18.2" y1="19.9" y2="21.3" y3="23"/>
<line x="18.2" y="63.9"/>
<curve x1="18" x2="19.2" x3="21" y1="65.7" y2="67.4" y3="67.6"/>
<curve x1="21" x2="21" x3="21" y1="67.6" y2="67.6" y3="67.6"/>
<close/>
<move x="90.2" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.6" y3="9.9"/>
<line x="100" y="92.1"/>
<curve x1="100" x2="96.9" x3="92.4" y1="96.7" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98" y3="92.7"/>
<line x="0" y="8.3"/>
<curve x1="0" x2="3.4" x3="8.2" y1="3.6" y2="0" y3="0"/>
<line x="90.2" y="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape><shape aspect="variable" h="100.87" name="location" strokewidth="inherit" w="79.94">
<connections/>
<foreground>
<path>
<move x="39.97" y="100.87"/>
<line x="9.97" y="58.87"/>
<arc large-arc-flag="1" rx="36" ry="36" sweep-flag="1" x="69.97" x-axis-rotation="0" y="58.87"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="new feature" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="20.6" y="43.05"/>
<line x="20.6" y="57.5"/>
<line x="41.07" y="57.5"/>
<line x="41.07" y="77.55"/>
<line x="58.89" y="77.55"/>
<line x="58.89" y="57.5"/>
<line x="79.4" y="57.5"/>
<line x="79.4" y="43.05"/>
<line x="58.89" y="43.05"/>
<line x="58.89" y="22.45"/>
<line x="41.07" y="22.45"/>
<line x="41.07" y="43.05"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="99.56" name="no" strokewidth="inherit" w="99.52">
<connections/>
<foreground>
<path>
<move x="49.96" y="99.56"/>
<curve x1="20.35" x2="0" x3="0" y1="99.56" y2="75.22" y3="50.71"/>
<curve x1="0" x2="23.39" x3="49.84" y1="20.76" y2="0" y3="0"/>
<curve x1="75.57" x2="99.52" x3="99.52" y1="0" y2="20.15" y3="50.17"/>
<curve x1="99.52" x2="75.94" x3="49.96" y1="78.12" y2="99.56" y3="99.56"/>
<close/>
<move x="29.47" y="81.04"/>
<curve x1="34.92" x2="42.29" x3="51.31" y1="85" y2="87.11" y3="87.11"/>
<curve x1="67.71" x2="87.23" x3="87.23" y1="87.11" y2="72.64" y3="49.03"/>
<curve x1="87.23" x2="84.14" x3="80.94" y1="41.56" y2="34.31" y3="29.51"/>
<close/>
<move x="20.22" y="72.65"/>
<line x="72.64" y="20.2"/>
<curve x1="66.69" x2="60.02" x3="48.96" y1="15.92" y2="12.26" y3="12.31"/>
<curve x1="31.22" x2="12.36" x3="12.36" y1="12.31" y2="27.66" y3="49.55"/>
<curve x1="12.36" x2="15.9" x3="20.22" y1="59.46" y2="67.01" y3="72.65"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="purchase" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="47.21" y="79.08"/>
<line x="53.47" y="79.21"/>
<line x="53.47" y="72.83"/>
<curve x1="59.66" x2="62.66" x3="63.93" y1="71.67" y2="67.58" y3="64.78"/>
<curve x1="65.47" x2="65.69" x3="62.49" y1="62.47" y2="55.08" y3="50.62"/>
<curve x1="59.39" x2="55.47" x3="50.85" y1="46.91" y2="45.06" y3="44.21"/>
<curve x1="45.05" x2="42.6" x3="43.05" y1="42.93" y2="40.88" y3="38.16"/>
<curve x1="43.95" x2="46.09" x3="50.54" y1="35.09" y2="33.32" y3="32.99"/>
<curve x1="55.87" x2="59.73" x3="62.45" y1="33.03" y2="34.88" y3="35.96"/>
<line x="63.98" y="29.62"/>
<curve x1="61.25" x2="56.46" x3="53.47" y1="27.59" y2="26.06" y3="25.45"/>
<line x="53.47" y="20.32"/>
<line x="47.21" y="20.32"/>
<line x="47.21" y="25.85"/>
<curve x1="43.02" x2="39.09" x3="36.02" y1="26.5" y2="28.37" y3="32.91"/>
<curve x1="33.94" x2="34" x3="36.12" y1="35.39" y2="42.05" y3="44.77"/>
<curve x1="37.93" x2="43.41" x3="48.46" y1="48.05" y2="51.23" y3="52.24"/>
<curve x1="54.11" x2="55.92" x3="55.86" y1="53.53" y2="55.72" y3="58.73"/>
<curve x1="55.73" x2="53.65" x3="49.01" y1="61.45" y2="64.06" y3="64.69"/>
<curve x1="44.8" x2="41.96" x3="39.2" y1="65.16" y2="62.72" y3="60.68"/>
<line x="35.28" y="67.28"/>
<curve x1="37.88" x2="42.16" x3="47.21" y1="70.67" y2="72.07" y3="73.01"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100.26" name="single" strokewidth="inherit" w="80.99">
<connections/>
<foreground>
<path>
<move x="32.5" y="28.19"/>
<line x="15.02" y="45.87"/>
<curve x1="11.06" x2="6.22" x3="3.43" y1="49.22" y2="48.19" y3="45.5"/>
<curve x1="0.89" x2="0" x3="3.88" y1="42.9" y2="37.42" y3="33.83"/>
<line x="34.4" y="3.23"/>
<curve x1="37.53" x2="43.21" x3="46.37" y1="0.13" y2="0" y3="3.3"/>
<line x="77.05" y="33.99"/>
<curve x1="79.86" x2="80.99" x3="76.97" y1="36.76" y2="41.97" y3="45.89"/>
<curve x1="72.92" x2="68.31" x3="65.14" y1="49.18" y2="48.53" y3="45.12"/>
<line x="48.75" y="28.66"/>
<line x="48.75" y="91.94"/>
<curve x1="48.75" x2="45.42" x3="40.53" y1="96.4" y2="100.26" y3="100.26"/>
<curve x1="36.9" x2="32.5" x3="32.5" y1="100.26" y2="97.66" y3="92.36"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="story" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="27.51" y="82.04"/>
<line x="50" y="57.32"/>
<line x="72.49" y="83.02"/>
<line x="72.49" y="16.15"/>
<line x="27.51" y="16.15"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="subtask" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="24.8" y="52.9"/>
<line x="24.8" y="24.5"/>
<line x="53.2" y="24.5"/>
<line x="53.2" y="39.6"/>
<line x="44.6" y="39.6"/>
<curve x1="40.1" x2="37.8" x3="37.8" y1="39.6" y2="42.3" y3="46.6"/>
<curve x1="37.8" x2="37.8" x3="37.8" y1="47.8" y2="51.7" y3="52.9"/>
<line x="24.8" y="52.9"/>
<close/>
<move x="75" y="83.1"/>
<curve x1="79.7" x2="82.6" x3="82.6" y1="83.1" y2="79.7" y3="74.4"/>
<line x="82.6" y="47.9"/>
<curve x1="82.6" x2="79.4" x3="74.3" y1="42.4" y2="39.6" y3="39.6"/>
<line x="60.9" y="39.6"/>
<line x="60.9" y="23.2"/>
<curve x1="60.9" x2="57.8" x3="54" y1="18.5" y2="16.2" y3="16.1"/>
<line x="24.1" y="16.1"/>
<curve x1="18.1" x2="16.1" x3="16.1" y1="16.1" y2="18.1" y3="24.2"/>
<line x="16.1" y="55.1"/>
<curve x1="16.1" x2="18.3" x3="22.9" y1="59.9" y2="62.5" y3="62.5"/>
<line x="37.7" y="62.5"/>
<line x="37.7" y="75.4"/>
<curve x1="37.7" x2="40.4" x3="45.7" y1="80.6" y2="83.1" y3="83.1"/>
<line x="75" y="83.1"/>
<close/>
<move x="90.2" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.6" y3="9.9"/>
<line x="100" y="92.1"/>
<curve x1="100" x2="96.9" x3="92.4" y1="96.7" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98" y3="92.7"/>
<line x="0" y="8.3"/>
<curve x1="0" x2="3.4" x3="8.2" y1="3.6" y2="0" y3="0"/>
<line x="90.2" y="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="task" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="37.29" y="72.62"/>
<curve x1="40.46" x2="44.76" x3="48.09" y1="75.16" y2="76.04" y3="72.69"/>
<line x="77.1" y="38.76"/>
<curve x1="79.79" x2="81.84" x3="77.47" y1="35.86" y2="29.92" y3="25.91"/>
<curve x1="72.52" x2="67.66" x3="64.4" y1="22.15" y2="24.16" y3="27.75"/>
<line x="42.44" y="55.51"/>
<line x="31.05" y="46.25"/>
<curve x1="27.51" x2="23.08" x3="19.74" y1="43.34" y2="42.44" y3="46.18"/>
<curve x1="16.72" x2="17.18" x3="20.55" y1="49.76" y2="55.61" y3="58.67"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="tech task" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="43.73" y="49.11"/>
<curve x1="43.67" x2="45.81" x3="49.63" y1="45.62" y2="43.41" y3="43.34"/>
<curve x1="52.61" x2="55.1" x3="55.1" y1="43.45" y2="45.36" y3="49.11"/>
<curve x1="55.1" x2="52.54" x3="49.63" y1="52.45" y2="54.78" y3="54.78"/>
<curve x1="46.06" x2="43.73" x3="43.73" y1="54.78" y2="52.64" y3="49.11"/>
<close/>
<move x="27.7" y="49.48"/>
<curve x1="27.7" x2="36.52" x3="50" y1="62.79" y2="70.89" y3="70.89"/>
<curve x1="61.01" x2="70.69" x3="70.69" y1="70.89" y2="62.08" y3="49.48"/>
<curve x1="70.69" x2="61.26" x3="50" y1="35.31" y2="28.07" y3="27.68"/>
<curve x1="35.57" x2="27.47" x3="27.7" y1="27.94" y2="36.3" y3="49.48"/>
<close/>
<move x="20.85" y="49.54"/>
<curve x1="20.54" x2="31.22" x3="50.26" y1="32.16" y2="21.14" y3="20.79"/>
<curve x1="65.11" x2="77.55" x3="77.55" y1="21.3" y2="30.85" y3="49.54"/>
<curve x1="77.55" x2="64.78" x3="50.26" y1="66.16" y2="77.78" y3="77.78"/>
<curve x1="32.48" x2="20.85" x3="20.85" y1="77.78" y2="67.1" y3="49.54"/>
<close/>
<move x="90.19" y="0"/>
<curve x1="96.2" x2="100" x3="100" y1="0" y2="3.64" y3="9.9"/>
<line x="100" y="92.13"/>
<curve x1="100" x2="96.95" x3="92.41" y1="96.74" y2="100" y3="100"/>
<line x="7.2" y="100"/>
<curve x1="3.1" x2="0" x3="0" y1="100" y2="98.04" y3="92.69"/>
<line x="0" y="8.34"/>
<curve x1="0" x2="3.4" x3="8.18" y1="3.56" y2="0" y3="0"/>
<close/>
<move x="85.94" y="5.29"/>
<line x="12.6" y="5.29"/>
<curve x1="8.33" x2="5.29" x3="5.29" y1="5.29" y2="8.47" y3="12.74"/>
<line x="5.29" y="88.18"/>
<curve x1="5.29" x2="8.06" x3="11.73" y1="92.96" y2="94.71" y3="94.71"/>
<line x="87.92" y="94.71"/>
<curve x1="91.98" x2="94.71" x3="94.71" y1="94.71" y2="91.8" y3="87.67"/>
<line x="94.71" y="14.15"/>
<curve x1="94.71" x2="91.31" x3="85.94" y1="8.54" y2="5.29" y3="5.29"/>
<close/>
</path>
<fillstroke/>
</foreground>
</shape>
<shape aspect="variable" h="100" name="x" strokewidth="inherit" w="100">
<connections/>
<foreground>
<path>
<move x="0" y="0"/>
<line x="100" y="100"/>
</path>
<stroke/>
<path>
<move x="100" y="0"/>
<line x="0" y="100"/>
</path>
<stroke/>
</foreground>
</shape>
</shapes>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Some files were not shown because too many files have changed in this diff Show More