From 3266f3948a3e493d119881b263c181a57fc3dc7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 26 Aug 2018 17:55:06 +0900
Subject: [PATCH 001/539] Update README.md [AUTOGEN]

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5c1b243396..32a9baede5 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,7 @@ Misskey is using Crowdin for l10n.
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/1?token-time=2145916800&token-hash=DVrSdOqQq2dufgNgWZ3XMnEtl_ZAktr8Lhf2tbHKtoA%3D" alt="Axella"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
 <td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
@@ -66,6 +67,7 @@ Misskey is using Crowdin for l10n.
 <td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
 <td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
 <td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
+<td><a href="https://www.patreon.com/AxellaMC">Axella</a></td>
 <td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
 <td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
 <td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
@@ -89,7 +91,7 @@ Misskey is using Crowdin for l10n.
 <td><a href="https://www.patreon.com/fujishan">fujishan</a></td>
 </tr></table>
 
-**Last updated:** Wed, 22 Aug 2018 05:25:06 UTC
+**Last updated:** Sun, 26 Aug 2018 08:55:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 98f6b2324968a53cae88cd3ded515bf6efeda9d5 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 29 Aug 2018 12:27:33 +0000
Subject: [PATCH 002/539] fix(package): update summaly to version 2.2.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index eea3f363c3..11391ea2a0 100644
--- a/package.json
+++ b/package.json
@@ -193,7 +193,7 @@
 		"style-loader": "0.23.0",
 		"stylus": "0.54.5",
 		"stylus-loader": "3.0.2",
-		"summaly": "2.1.4",
+		"summaly": "2.2.0",
 		"systeminformation": "3.44.2",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",

From 073c96af478f4c518ad19d2b7650c8a611321d62 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 29 Aug 2018 14:02:49 +0000
Subject: [PATCH 003/539] fix(package): update vue-js-modal to version 1.3.24

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index eea3f363c3..b48b336a49 100644
--- a/package.json
+++ b/package.json
@@ -210,7 +210,7 @@
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
 		"vue-cropperjs": "2.2.1",
-		"vue-js-modal": "1.3.23",
+		"vue-js-modal": "1.3.24",
 		"vue-json-tree-view": "2.1.4",
 		"vue-loader": "15.4.1",
 		"vue-router": "3.0.1",

From 5b943722fbd9a143b0b6b654e07e192e1218d4da Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 30 Aug 2018 00:16:12 +0000
Subject: [PATCH 004/539] fix(package): update @types/uuid to version 3.4.4

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 3123de1042..774c978f05 100644
--- a/package.json
+++ b/package.json
@@ -76,7 +76,7 @@
 		"@types/speakeasy": "2.0.2",
 		"@types/systeminformation": "3.23.0",
 		"@types/tmp": "0.0.33",
-		"@types/uuid": "3.4.3",
+		"@types/uuid": "3.4.4",
 		"@types/webpack": "4.4.11",
 		"@types/webpack-stream": "3.2.10",
 		"@types/websocket": "0.0.39",

From 6a87e9f690c87579c37e3145bac080d6b6cbad35 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 30 Aug 2018 00:18:42 +0000
Subject: [PATCH 005/539] fix(package): update @types/websocket to version
 0.0.40

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 3123de1042..4496b950eb 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
 		"@types/uuid": "3.4.3",
 		"@types/webpack": "4.4.11",
 		"@types/webpack-stream": "3.2.10",
-		"@types/websocket": "0.0.39",
+		"@types/websocket": "0.0.40",
 		"@types/ws": "6.0.0",
 		"animejs": "2.2.0",
 		"autosize": "4.0.2",

From dddf7834ccf2b915338da92f42544b5f20b12247 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Thu, 30 Aug 2018 20:52:35 +0900
Subject: [PATCH 006/539] Add host/digest to HTTP signature

---
 src/remote/activitypub/request.ts | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts
index 6238d3acb1..d739d08e15 100644
--- a/src/remote/activitypub/request.ts
+++ b/src/remote/activitypub/request.ts
@@ -2,6 +2,7 @@ import { request } from 'https';
 const { sign } = require('http-signature');
 import { URL } from 'url';
 import * as debug from 'debug';
+const crypto = require('crypto');
 
 import config from '../../config';
 import { ILocalUser } from '../../models/user';
@@ -13,6 +14,12 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 
 	const { protocol, hostname, port, pathname, search } = new URL(url);
 
+	const data = JSON.stringify(object);
+
+	const sha256 = crypto.createHash('sha256');
+	sha256.update(data);
+	const hash = sha256.digest('base64');
+
 	const req = request({
 		protocol,
 		hostname,
@@ -20,7 +27,8 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 		method: 'POST',
 		path: pathname + search,
 		headers: {
-			'Content-Type': 'application/activity+json'
+			'Content-Type': 'application/activity+json',
+			'Digest': `SHA-256=${hash}`
 		}
 	}, res => {
 		log(`${url} --> ${res.statusCode}`);
@@ -35,7 +43,8 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 	sign(req, {
 		authorizationHeaderName: 'Signature',
 		key: user.keypair,
-		keyId: `${config.url}/users/${user._id}/publickey`
+		keyId: `${config.url}/users/${user._id}/publickey`,
+		headers: ['date', 'host', 'digest']
 	});
 
 	// Signature: Signature ... => Signature: ...
@@ -43,5 +52,5 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 	sig = sig.replace(/^Signature /, '');
 	req.setHeader('Signature', sig);
 
-	req.end(JSON.stringify(object));
+	req.end(data);
 });

From 48223c1c76f48ed59482c3e2a95564f18ff186ed Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Thu, 30 Aug 2018 20:53:41 +0900
Subject: [PATCH 007/539] Validate host in activity

---
 src/queue/processors/http/process-inbox.ts | 55 ++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts
index c9c2fa72cb..a30efe1a3a 100644
--- a/src/queue/processors/http/process-inbox.ts
+++ b/src/queue/processors/http/process-inbox.ts
@@ -6,6 +6,8 @@ import parseAcct from '../../../misc/acct/parse';
 import User, { IRemoteUser } from '../../../models/user';
 import perform from '../../../remote/activitypub/perform';
 import { resolvePerson } from '../../../remote/activitypub/models/person';
+import { toUnicode } from 'punycode';
+import { URL } from 'url';
 
 const log = debug('misskey:queue:inbox');
 
@@ -32,6 +34,15 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 			return;
 		}
 
+		// アクティビティ内のホストの検証
+		try {
+			ValidateActivity(activity, host);
+		} catch (e) {
+			console.warn(e);
+			done();
+			return;
+		}
+
 		user = await User.findOne({ usernameLower: username, host: host.toLowerCase() }) as IRemoteUser;
 
 		// アクティビティを送信してきたユーザーがまだMisskeyサーバーに登録されていなかったら登録する
@@ -39,6 +50,16 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 			user = await resolvePerson(activity.actor) as IRemoteUser;
 		}
 	} else {
+		// アクティビティ内のホストの検証
+		const host = toUnicode(new URL(signature.keyId).hostname.toLowerCase());
+		try {
+			ValidateActivity(activity, host);
+		} catch (e) {
+			console.warn(e);
+			done();
+			return;
+		}
+
 		user = await User.findOne({
 			host: { $ne: null },
 			'publicKey.id': signature.keyId
@@ -69,3 +90,37 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 		done(e);
 	}
 };
+
+/**
+ * Validate host in activity
+ * @param activity Activity
+ * @param host Expect host
+ */
+function ValidateActivity(activity: any, host: string) {
+	// id (if exists)
+	if (typeof activity.id === 'string') {
+		const uriHost = toUnicode(new URL(activity.id).hostname.toLowerCase());
+		if (host !== uriHost) throw new Error('activity.id has different host');
+	}
+
+	// actor (if exists)
+	if (typeof activity.actor === 'string') {
+		const uriHost = toUnicode(new URL(activity.actor).hostname.toLowerCase());
+		if (host !== uriHost) throw new Error('activity.actor has different host');
+	}
+
+	// For Create activity
+	if (activity.type === 'Create' && activity.object) {
+		// object.id (if exists)
+		if (typeof activity.object.id === 'string') {
+			const uriHost = toUnicode(new URL(activity.object.id).hostname.toLowerCase());
+			if (host !== uriHost) throw new Error('activity.object.id has different host');
+		}
+
+		// object.attributedTo (if exists)
+		if (typeof activity.object.attributedTo === 'string') {
+			const uriHost = toUnicode(new URL(activity.object.attributedTo).hostname.toLowerCase());
+			if (host !== uriHost) throw new Error('activity.object.attributedTo has different host');
+		}
+	}
+}

From f0abc4642969587039909d5f50adb7d4592f48ba Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 30 Aug 2018 22:10:29 +0900
Subject: [PATCH 008/539] =?UTF-8?q?=E9=96=8B=E7=99=BA=E3=83=A2=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=81=A7=E8=AD=A6=E5=91=8A=E3=82=92=E8=A1=A8=E7=A4=BA?=
 =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=E3=81=AA=E3=81=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  2 ++
 src/client/app/config.ts                      |  2 ++
 .../desktop/views/components/ui.header.vue    | 19 ++++++++++++++++++-
 .../app/mobile/views/components/ui.header.vue | 18 +++++++++++++++---
 src/client/app/mobile/views/components/ui.vue |  7 +++++++
 webpack.config.ts                             |  3 ++-
 6 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 84b7ddb26f..6ebd167803 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -94,6 +94,8 @@ common:
   verified-user: "公式アカウント"
   disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
 
+  do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
+
   reversi:
     drawn: "引き分け"
     my-turn: "あなたのターンです"
diff --git a/src/client/app/config.ts b/src/client/app/config.ts
index 74b9ea21c8..a326c521db 100644
--- a/src/client/app/config.ts
+++ b/src/client/app/config.ts
@@ -4,6 +4,7 @@ declare const _THEME_COLOR_: string;
 declare const _COPYRIGHT_: string;
 declare const _VERSION_: string;
 declare const _CODENAME_: string;
+declare const _ENV_: string;
 
 const address = new URL(location.href);
 
@@ -18,3 +19,4 @@ export const themeColor = _THEME_COLOR_;
 export const copyright = _COPYRIGHT_;
 export const version = _VERSION_;
 export const codename = _CODENAME_;
+export const env = _ENV_;
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index 6de4eaf744..ac8a6c7765 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -1,5 +1,6 @@
 <template>
 <div class="header">
+	<p class="warn" v-if="env != 'production'">%i18n:common.do-not-use-in-production%</p>
 	<mk-special-message/>
 	<div class="main" ref="main">
 		<div class="backdrop"></div>
@@ -28,6 +29,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as anime from 'animejs';
+import { env } from '../../../config';
 
 import XNav from './ui.header.nav.vue';
 import XSearch from './ui.header.search.vue';
@@ -43,7 +45,13 @@ export default Vue.extend({
 		XAccount,
 		XNotifications,
 		XPost,
-		XClock,
+		XClock
+	},
+
+	data() {
+		return {
+			env: env
+		};
 	},
 
 	mounted() {
@@ -119,6 +127,15 @@ root(isDark)
 	width 100%
 	box-shadow 0 1px 1px rgba(#000, 0.075)
 
+	> .warn
+		display block
+		margin 0
+		padding 4px
+		text-align center
+		font-size 12px
+		background #f00
+		color #fff
+
 	> .main
 		height 48px
 
diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index a616586c56..c9b3ab51ae 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -1,5 +1,6 @@
 <template>
-<div class="header">
+<div class="header" ref="root">
+	<p class="warn" v-if="env != 'production'">%i18n:common.do-not-use-in-production%</p>
 	<mk-special-message/>
 	<div class="main" ref="main">
 		<div class="backdrop"></div>
@@ -20,6 +21,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as anime from 'animejs';
+import { env } from '../../../config';
 
 export default Vue.extend({
 	props: ['func'],
@@ -27,7 +29,8 @@ export default Vue.extend({
 		return {
 			hasGameInvitation: false,
 			connection: null,
-			connectionId: null
+			connectionId: null,
+			env: env
 		};
 	},
 	computed: {
@@ -39,7 +42,7 @@ export default Vue.extend({
 		}
 	},
 	mounted() {
-		this.$store.commit('setUiHeaderHeight', 48);
+		this.$store.commit('setUiHeaderHeight', this.$refs.root.offsetHeight);
 
 		if (this.$store.getters.isSignedIn) {
 			this.connection = (this as any).os.stream.getConnection();
@@ -133,6 +136,15 @@ root(isDark)
 		height 3px
 		background $theme-color
 
+	> .warn
+		display block
+		margin 0
+		padding 4px
+		text-align center
+		font-size 12px
+		background #f00
+		color #fff
+
 	> .main
 		color rgba(#fff, 0.9)
 
diff --git a/src/client/app/mobile/views/components/ui.vue b/src/client/app/mobile/views/components/ui.vue
index 7e2d39f259..d2af15d235 100644
--- a/src/client/app/mobile/views/components/ui.vue
+++ b/src/client/app/mobile/views/components/ui.vue
@@ -31,7 +31,14 @@ export default Vue.extend({
 			connectionId: null
 		};
 	},
+	watch: {
+		'$store.state.uiHeaderHeight'() {
+			this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
+		}
+	},
 	mounted() {
+		this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
+
 		if (this.$store.getters.isSignedIn) {
 			this.connection = (this as any).os.stream.getConnection();
 			this.connectionId = (this as any).os.stream.use();
diff --git a/webpack.config.ts b/webpack.config.ts
index 1e295c245d..e520c59a92 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -73,7 +73,8 @@ const consts = {
 	_VERSION_: version,
 	_CODENAME_: codename,
 	_LANG_: '%lang%',
-	_LANGS_: Object.keys(locales).map(l => [l, locales[l].meta.lang])
+	_LANGS_: Object.keys(locales).map(l => [l, locales[l].meta.lang]),
+	_ENV_: process.env.NODE_ENV
 };
 
 const _consts: { [ key: string ]: any } = {};

From 6a5a9de79585f957f324872746862d47b7294cbf Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 30 Aug 2018 22:15:41 +0900
Subject: [PATCH 009/539] 8.16.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 37620e7a3b..76ed2ac949 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.15.0",
-	"clientVersion": "1.0.9031",
+	"version": "8.16.0",
+	"clientVersion": "1.0.9191",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 9cd334576ca81320c8fa9dc532ecc00b2bc2f26e Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 30 Aug 2018 16:41:33 +0000
Subject: [PATCH 010/539] fix(package): update @types/node to version 10.9.4

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 76ed2ac949..a461d8076a 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.4",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.9.3",
+		"@types/node": "10.9.4",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.2.0",

From 6434dac04d899ee1344c895d015da2a03adf71b6 Mon Sep 17 00:00:00 2001
From: Nasha Hiramiya <git@hiramiya.me>
Date: Thu, 30 Aug 2018 21:04:20 +0100
Subject: [PATCH 011/539] Add return for invalid filetypes, fixes wrong
 behaviour

---
 src/client/app/desktop/api/update-avatar.ts | 2 +-
 src/client/app/desktop/api/update-banner.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/api/update-avatar.ts b/src/client/app/desktop/api/update-avatar.ts
index e9d92d1eb1..f08e8a2b4e 100644
--- a/src/client/app/desktop/api/update-avatar.ts
+++ b/src/client/app/desktop/api/update-avatar.ts
@@ -16,7 +16,7 @@ export default (os: OS) => {
 					text: '%i18n:common.got-it%'
 				}]
 			});
-			reject();
+			return reject('invalid-filetype');
 		}
 
 		const w = os.new(CropWindow, {
diff --git a/src/client/app/desktop/api/update-banner.ts b/src/client/app/desktop/api/update-banner.ts
index e8fa35149b..42c9d69349 100644
--- a/src/client/app/desktop/api/update-banner.ts
+++ b/src/client/app/desktop/api/update-banner.ts
@@ -16,7 +16,7 @@ export default (os: OS) => {
 					text: '%i18n:common.got-it%'
 				}]
 			});
-			reject();
+			return reject('invalid-filetype');
 		}
 
 		const w = os.new(CropWindow, {

From 18b4f74cdb3f4a0c69855f1ab5b2f286984f1b13 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Fri, 31 Aug 2018 16:46:24 +0900
Subject: [PATCH 012/539] Improve validation error message

---
 src/queue/processors/http/process-inbox.ts | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts
index a30efe1a3a..7e564dd32a 100644
--- a/src/queue/processors/http/process-inbox.ts
+++ b/src/queue/processors/http/process-inbox.ts
@@ -38,7 +38,7 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 		try {
 			ValidateActivity(activity, host);
 		} catch (e) {
-			console.warn(e);
+			console.warn(e.message);
 			done();
 			return;
 		}
@@ -55,7 +55,7 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 		try {
 			ValidateActivity(activity, host);
 		} catch (e) {
-			console.warn(e);
+			console.warn(e.message);
 			done();
 			return;
 		}
@@ -100,7 +100,10 @@ function ValidateActivity(activity: any, host: string) {
 	// id (if exists)
 	if (typeof activity.id === 'string') {
 		const uriHost = toUnicode(new URL(activity.id).hostname.toLowerCase());
-		if (host !== uriHost) throw new Error('activity.id has different host');
+		if (host !== uriHost) {
+			const diag = activity.signature ? '. Has LD-Signature. Forwarded?' : '';
+			throw new Error(`activity.id(${activity.id}) has different host(${host})${diag}`);
+		}
 	}
 
 	// actor (if exists)

From 63b8af453178a8586c08f999948890d1719f670d Mon Sep 17 00:00:00 2001
From: Nasha Hiramiya <git@hiramiya.me>
Date: Fri, 31 Aug 2018 20:42:20 +0100
Subject: [PATCH 013/539] Fix darkmode on followers-you-may-know

---
 .../app/desktop/views/pages/user/user.followers-you-know.vue | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index e4a771910a..f1abaf7fc2 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -36,8 +36,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
+root(isDark)
 .followers-you-know
-	background #fff
+	background isDark ? #282C37 : #fff
 	border solid 1px rgba(#000, 0.075)
 	border-radius 6px
 
@@ -48,7 +49,7 @@ export default Vue.extend({
 		line-height 42px
 		font-size 0.9em
 		font-weight bold
-		color #888
+		color isDark ? #e3e5e8 : #888
 		box-shadow 0 1px rgba(#000, 0.07)
 
 		> i

From fd07f00d140d8a703f8f3438d42eb014aabe91fc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 07:33:04 +0900
Subject: [PATCH 014/539] #2551

---
 webpack.config.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/webpack.config.ts b/webpack.config.ts
index e520c59a92..ad67530f51 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -5,6 +5,7 @@
 import * as fs from 'fs';
 import * as webpack from 'webpack';
 import chalk from 'chalk';
+import rndstr from 'rndstr';
 const { VueLoaderPlugin } = require('vue-loader');
 const jsonImporter = require('node-sass-json-importer');
 const minifyHtml = require('html-minifier').minify;
@@ -19,7 +20,7 @@ const constants = require('./src/const.json');
 
 const locales = require('./locales');
 const meta = require('./package.json');
-const version = meta.clientVersion;
+const version = meta.clientVersion + '-' + rndstr({ length: 8, chars: '0-9a-z' });
 const codename = meta.codename;
 
 declare var global: {

From bffb9a5c451260b9b6b67df4972e28b895319825 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 08:09:21 +0900
Subject: [PATCH 015/539] #2447 #1958

---
 .../desktop/views/pages/deck/deck.column.vue  | 35 +++++++++++++------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index d59d430da6..239b1b0447 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -3,18 +3,20 @@
 		@dragover.prevent.stop="onDragover"
 		@dragenter.prevent="onDragenter"
 		@dragleave="onDragleave"
-		@drop.prevent.stop="onDrop"
->
+		@drop.prevent.stop="onDrop">
 	<header :class="{ indicate: count > 0 }"
 			draggable="true"
-			@click="toggleActive"
+			@click="goTop"
 			@dragstart="onDragstart"
 			@dragend="onDragend"
-			@contextmenu.prevent.stop="onContextmenu"
-		>
+			@contextmenu.prevent.stop="onContextmenu">
+		<button class="toggleActive" @click="toggleActive" v-if="isStacked">
+			<template v-if="active">%fa:angle-up%</template>
+			<template v-else>%fa:angle-down%</template>
+		</button>
 		<slot name="header"></slot>
 		<span class="count" v-if="count > 0">({{ count }})</span>
-		<button ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
+		<button class="menu" ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
 	</header>
 	<div ref="body" v-show="active">
 		<slot></slot>
@@ -211,6 +213,13 @@ export default Vue.extend({
 			});
 		},
 
+		goTop() {
+			this.$refs.body.scrollTo({
+				top: 0,
+				behavior: 'smooth'
+			});
+		},
+
 		onDragstart(e) {
 			e.dataTransfer.effectAllowed = 'move';
 			e.dataTransfer.setData('mk-deck-column', this.column.id);
@@ -302,6 +311,7 @@ root(isDark)
 					color #bbb
 
 	> header
+		display flex
 		z-index 1
 		line-height $header-height
 		padding 0 16px
@@ -328,10 +338,8 @@ root(isDark)
 			margin-left 4px
 			opacity 0.5
 
-		> button
-			position absolute
-			top 0
-			right 0
+		> .toggleActive
+		> .menu
 			width $header-height
 			line-height $header-height
 			font-size 16px
@@ -343,6 +351,13 @@ root(isDark)
 			&:active
 				color isDark ? #b2c1d5 : #999
 
+		> .toggleActive
+			margin-left -16px
+
+		> .menu
+			margin-left auto
+			margin-right -16px
+
 	> div
 		height "calc(100% - %s)" % $header-height
 		overflow auto

From 4c6fb60dd25d7e2865fc7c4d97728593ffc3c902 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 08:13:18 +0900
Subject: [PATCH 016/539] #2541

---
 src/server/api/endpoints/sw/register.ts | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/server/api/endpoints/sw/register.ts b/src/server/api/endpoints/sw/register.ts
index 3414600048..503fc94654 100644
--- a/src/server/api/endpoints/sw/register.ts
+++ b/src/server/api/endpoints/sw/register.ts
@@ -1,6 +1,7 @@
 import $ from 'cafy';
 import Subscription from '../../../../models/sw-subscription';
 import { ILocalUser } from '../../../../models/user';
+import config from '../../../../config';
 
 export const meta = {
 	requireCredential: true
@@ -31,8 +32,11 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		deletedAt: { $exists: false }
 	});
 
-	if (exist !== null) {
-		return res();
+	if (exist != null) {
+		return res({
+			state: 'already-subscribed',
+			key: config.sw.public_key
+		});
 	}
 
 	await Subscription.insert({
@@ -42,5 +46,8 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		publickey: publickey
 	});
 
-	res();
+	res({
+		state: 'subscribed',
+		key: config.sw.public_key
+	});
 });

From 6819eb3b4da43665de8e159d774b3f2325ddfe0b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 09:16:25 +0900
Subject: [PATCH 017/539] Improve usability

---
 package.json                                  |  1 +
 src/client/app/app.vue                        |  5 +++-
 src/client/app/init.ts                        |  5 ++++
 src/client/app/mobile/api/post.ts             | 24 ---------------
 src/client/app/mobile/script.ts               |  3 +-
 src/client/app/mobile/style.styl              | 10 +++++++
 .../views/components/drive-file-chooser.vue   |  2 +-
 .../mobile/views/components/note-detail.vue   | 30 +++++++++++++++----
 .../app/mobile/views/components/note.vue      | 23 ++++++++++----
 .../app/mobile/views/components/post-form.vue |  4 ---
 src/client/app/mobile/views/pages/home.vue    | 10 ++++++-
 11 files changed, 72 insertions(+), 45 deletions(-)
 delete mode 100644 src/client/app/mobile/api/post.ts

diff --git a/package.json b/package.json
index a461d8076a..31e60260ba 100644
--- a/package.json
+++ b/package.json
@@ -216,6 +216,7 @@
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
 		"vue-template-compiler": "2.5.17",
+		"vue-thin-modal": "1.1.1",
 		"vuedraggable": "2.16.0",
 		"vuex": "3.0.1",
 		"vuex-persistedstate": "2.5.4",
diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 7a46e7dea0..011eb14661 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -1,3 +1,6 @@
 <template>
-<router-view id="app"></router-view>
+<div>
+	<router-view id="app"></router-view>
+	<modal-portal/>
+</div>
 </template>
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index cf97957400..dd31f07475 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -11,6 +11,8 @@ import VAnimateCss from 'v-animate-css';
 import Element from 'element-ui';
 import ElementLocaleEn from 'element-ui/lib/locale/lang/en';
 import ElementLocaleJa from 'element-ui/lib/locale/lang/ja';
+import VueThinModal from 'vue-thin-modal';
+import 'vue-thin-modal/dist/vue-thin-modal.css';
 
 import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
@@ -30,6 +32,9 @@ Vue.use(VModal);
 Vue.use(TreeView);
 Vue.use(VAnimateCss);
 Vue.use(Element, { locale: elementLocale });
+Vue.use(VueThinModal, {
+	autoMountPortal: false
+});
 
 // Register global directives
 require('./common/views/directives');
diff --git a/src/client/app/mobile/api/post.ts b/src/client/app/mobile/api/post.ts
deleted file mode 100644
index 15b2f6b691..0000000000
--- a/src/client/app/mobile/api/post.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import PostForm from '../views/components/post-form.vue';
-
-export default (os) => (opts) => {
-	const o = opts || {};
-
-	const app = document.getElementById('app');
-	app.style.display = 'none';
-
-	function recover() {
-		app.style.display = 'block';
-	}
-
-	const vm = new PostForm({
-		parent: os.app,
-		propsData: {
-			reply: o.reply,
-			renote: o.renote
-		}
-	}).$mount();
-	vm.$once('cancel', recover);
-	vm.$once('posted', recover);
-	document.body.appendChild(vm.$el);
-	(vm as any).focus();
-};
diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts
index 5b9d45462a..edc2b35529 100644
--- a/src/client/app/mobile/script.ts
+++ b/src/client/app/mobile/script.ts
@@ -14,7 +14,6 @@ import chooseDriveFolder from './api/choose-drive-folder';
 import chooseDriveFile from './api/choose-drive-file';
 import dialog from './api/dialog';
 import input from './api/input';
-import post from './api/post';
 import notify from './api/notify';
 
 import MkIndex from './views/pages/index.vue';
@@ -91,7 +90,7 @@ init((launch) => {
 		chooseDriveFile,
 		dialog: dialog(os),
 		input,
-		post: post(os),
+		post: () => alert('deprecated'),
 		notify
 	}));
 }, true);
diff --git a/src/client/app/mobile/style.styl b/src/client/app/mobile/style.styl
index df8f4a8fae..f78146f8b8 100644
--- a/src/client/app/mobile/style.styl
+++ b/src/client/app/mobile/style.styl
@@ -17,3 +17,13 @@ body
 	display flex
 	flex-direction column
 	min-height 100%
+
+.modal-backdrop
+	z-index 10000 !important
+
+.modal-content-wrapper
+	z-index 10001 !important
+
+.modal-content
+	padding 0 !important
+	background-color transparent !important
diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue
index d95d5fa223..56e41e31d8 100644
--- a/src/client/app/mobile/views/components/drive-file-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-file-chooser.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 .mk-drive-file-chooser
 	position fixed
-	z-index 2048
+	z-index 20000
 	top 0
 	left 0
 	width 100%
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index f9996f9da6..02ef3845d3 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -75,6 +75,13 @@
 	<div class="replies" v-if="!compact">
 		<x-sub v-for="note in replies" :key="note.id" :note="note"/>
 	</div>
+
+	<modal name="replyForm">
+		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
+	</modal>
+	<modal name="renoteForm">
+		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
+	</modal>
 </div>
 </template>
 
@@ -116,9 +123,11 @@ export default Vue.extend({
 				this.note.mediaIds.length == 0 &&
 				this.note.poll == null);
 		},
+
 		p(): any {
 			return this.isRenote ? this.note.renote : this.note;
 		},
+
 		reactionsCount(): number {
 			return this.p.reactionCounts
 				? Object.keys(this.p.reactionCounts)
@@ -126,6 +135,7 @@ export default Vue.extend({
 					.reduce((a, b) => a + b)
 				: 0;
 		},
+
 		urls(): string[] {
 			if (this.p.text) {
 				const ast = parse(this.p.text);
@@ -180,16 +190,23 @@ export default Vue.extend({
 				this.conversation = conversation.reverse();
 			});
 		},
+
 		reply() {
-			(this as any).apis.post({
-				reply: this.p
-			});
+			this.$modal.push('replyForm');
 		},
+
+		replyFormClosed() {
+			this.$modal.pop();
+		},
+
 		renote() {
-			(this as any).apis.post({
-				renote: this.p
-			});
+			this.$modal.push('renoteForm');
 		},
+
+		renoteFormClosed() {
+			this.$modal.pop();
+		},
+
 		react() {
 			(this as any).os.new(MkReactionPicker, {
 				source: this.$refs.reactButton,
@@ -198,6 +215,7 @@ export default Vue.extend({
 				big: true
 			});
 		},
+
 		menu() {
 			(this as any).os.new(MkNoteMenu, {
 				source: this.$refs.menuButton,
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index d0cea135f9..f658686b05 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -60,6 +60,13 @@
 			</footer>
 		</div>
 	</article>
+
+	<modal name="replyForm">
+		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
+	</modal>
+	<modal name="renoteForm">
+		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
+	</modal>
 </div>
 </template>
 
@@ -195,15 +202,19 @@ export default Vue.extend({
 		},
 
 		reply() {
-			(this as any).apis.post({
-				reply: this.p
-			});
+			this.$modal.push('replyForm');
+		},
+
+		replyFormClosed() {
+			this.$modal.pop();
 		},
 
 		renote() {
-			(this as any).apis.post({
-				renote: this.p
-			});
+			this.$modal.push('renoteForm');
+		},
+
+		renoteFormClosed() {
+			this.$modal.pop();
 		},
 
 		react() {
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index a74df67c0a..537bf407dc 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -293,9 +293,6 @@ export default Vue.extend({
 				viaMobile: viaMobile
 			}).then(data => {
 				this.$emit('posted');
-				this.$nextTick(() => {
-					this.$destroy();
-				});
 			}).catch(err => {
 				this.posting = false;
 			});
@@ -309,7 +306,6 @@ export default Vue.extend({
 
 		cancel() {
 			this.$emit('cancel');
-			this.$destroy();
 		},
 
 		kao() {
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 706c9cd28b..a03fa03c5f 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -42,6 +42,10 @@
 			<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 		</div>
 	</main>
+
+	<modal name="postForm">
+		<mk-post-form @posted="postFormClosed" @cancel="postFormClosed"/>
+	</modal>
 </mk-ui>
 </template>
 
@@ -107,7 +111,11 @@ export default Vue.extend({
 
 	methods: {
 		fn() {
-			(this as any).apis.post();
+			this.$modal.push('postForm');
+		},
+
+		postFormClosed() {
+			this.$modal.pop();
 		},
 
 		saveSrc() {

From 9e318d5ebc1abd01059d68eacdf42605efdeb334 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 09:29:59 +0900
Subject: [PATCH 018/539] Fix bug

---
 .../views/components/messaging-room.vue       | 24 +++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index 30143b4f1d..1de41855df 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -3,7 +3,7 @@
 	@dragover.prevent.stop="onDragover"
 	@drop.prevent.stop="onDrop"
 >
-	<div class="stream">
+	<div class="body">
 		<p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p>
 		<p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p>
 		<p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p>
@@ -77,6 +77,12 @@ export default Vue.extend({
 		this.connection.on('message', this.onMessage);
 		this.connection.on('read', this.onRead);
 
+		if (this.isNaked) {
+			window.addEventListener('scroll', this.onScroll, { passive: true });
+		} else {
+			this.$el.addEventListener('scroll', this.onScroll, { passive: true });
+		}
+
 		document.addEventListener('visibilitychange', this.onVisibilitychange);
 
 		this.fetchMessages().then(() => {
@@ -90,6 +96,12 @@ export default Vue.extend({
 		this.connection.off('read', this.onRead);
 		this.connection.close();
 
+		if (this.isNaked) {
+			window.removeEventListener('scroll', this.onScroll);
+		} else {
+			this.$el.removeEventListener('scroll', this.onScroll);
+		}
+
 		document.removeEventListener('visibilitychange', this.onVisibilitychange);
 	},
 
@@ -226,6 +238,14 @@ export default Vue.extend({
 			}, 4000);
 		},
 
+		onScroll() {
+			const el = this.isNaked ? window.document.documentElement : this.$el;
+			const current = el.scrollTop + el.clientHeight;
+			if (current > el.scrollHeight - 1) {
+				this.showIndicator = false;
+			}
+		},
+
 		onVisibilitychange() {
 			if (document.hidden) return;
 			this.messages.forEach(message => {
@@ -251,7 +271,7 @@ root(isDark)
 	height 100%
 	background isDark ? #191b22 : #fff
 
-	> .stream
+	> .body
 		width 100%
 		max-width 600px
 		margin 0 auto

From 2a235151ed411b657ead0142d14da9a14e2f7105 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 09:42:25 +0900
Subject: [PATCH 019/539] #2236 #2237

---
 locales/ja-JP.yml                             |  2 ++
 .../app/common/views/components/note-menu.vue | 24 ++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 6ebd167803..c5a3fc81ff 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -285,6 +285,8 @@ common/views/components/nav.vue:
   feedback: "フィードバック"
 
 common/views/components/note-menu.vue:
+  detail: "詳細"
+  copy-link: "リンクをコピー"
   favorite: "お気に入り"
   pin: "ピン留め"
   delete: "削除"
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index 27a49a6536..0b0609ac4e 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -6,17 +6,27 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { url } from '../../../config';
+import copyToClipboard from '../../../common/scripts/copy-to-clipboard';
 
 export default Vue.extend({
 	props: ['note', 'source', 'compact'],
 	computed: {
 		items() {
-			const items = [];
-			items.push({
+			const items = [{
+				icon: '%fa:info-circle%',
+				text: '%i18n:@detail%',
+				action: this.detail
+			}, {
+				icon: '%fa:link%',
+				text: '%i18n:@copy-link%',
+				action: this.copyLink
+			}, null, {
 				icon: '%fa:star%',
 				text: '%i18n:@favorite%',
 				action: this.favorite
-			});
+			}];
+
 			if (this.note.userId == this.$store.state.i.id) {
 				items.push({
 					icon: '%fa:thumbtack%',
@@ -42,6 +52,14 @@ export default Vue.extend({
 		}
 	},
 	methods: {
+		detail() {
+			this.$router.push(`/notes/${ this.note.id }`);
+		},
+
+		copyLink() {
+			copyToClipboard(`${url}/notes/${ this.note.id }`);
+		},
+
 		pin() {
 			(this as any).api('i/pin', {
 				noteId: this.note.id

From 359da9a5a145946ed97f9fed5d1080e52043489d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 09:44:15 +0900
Subject: [PATCH 020/539] 8.17.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 31e60260ba..1b42598b31 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.16.0",
-	"clientVersion": "1.0.9191",
+	"version": "8.17.0",
+	"clientVersion": "1.0.9212",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 4d6b9f62e5a66171ffcb791904f3e20358d84e78 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 12:05:25 +0900
Subject: [PATCH 021/539] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB?=
 =?UTF-8?q?=E3=81=AE=E3=83=89=E3=83=A9=E3=82=A4=E3=83=96=E3=82=92=E3=83=80?=
 =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=83=A2=E3=83=BC=E3=83=89=E5=AF=BE=E5=BF=9C?=
 =?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../views/components/drive.file-detail.vue    | 49 +++++++++----------
 .../mobile/views/components/drive.file.vue    | 23 ++++-----
 .../mobile/views/components/drive.folder.vue  | 12 +++--
 .../app/mobile/views/components/drive.vue     | 35 ++++++++-----
 src/client/app/mobile/views/pages/drive.vue   |  2 +-
 .../app/mobile/views/pages/selectdrive.vue    |  2 +-
 6 files changed, 68 insertions(+), 55 deletions(-)

diff --git a/src/client/app/mobile/views/components/drive.file-detail.vue b/src/client/app/mobile/views/components/drive.file-detail.vue
index deb9941be8..43867211e9 100644
--- a/src/client/app/mobile/views/components/drive.file-detail.vue
+++ b/src/client/app/mobile/views/components/drive.file-detail.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="file-detail">
+<div class="pyvicwrksnfyhpfgkjwqknuururpaztw">
 	<div class="preview">
 		<img v-if="kind == 'image'" ref="img"
 			:src="file.url"
@@ -25,7 +25,7 @@
 	</div>
 	<div class="info">
 		<div>
-			<span class="type"><mk-file-type-icon :type="file.type"/>{{ file.type }}</span>
+			<span class="type"><mk-file-type-icon :type="file.type"/> {{ file.type }}</span>
 			<span class="separator"></span>
 			<span class="data-size">{{ file.datasize | bytes }}</span>
 			<span class="separator"></span>
@@ -134,11 +134,10 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-.file-detail
-
+root(isDark)
 	> .preview
 		padding 8px
-		background #f0f0f0
+		background isDark ? #191b22 : #f0f0f0
 
 		> img
 			display block
@@ -150,7 +149,7 @@ export default Vue.extend({
 		> footer
 			padding 8px 8px 0 8px
 			font-size 0.8em
-			color #888
+			color isDark ? #606984 : #888
 			text-align center
 
 			> .separator
@@ -179,25 +178,17 @@ export default Vue.extend({
 	> .info
 		padding 14px
 		font-size 0.8em
-		border-top solid 1px #dfdfdf
+		border-top solid 1px isDark ? #1c2023 : #dfdfdf
 
 		> div
 			max-width 500px
 			margin 0 auto
+			color isDark ? #9397a2 : #9d9d9d
 
 			> .separator
 				padding 0 4px
-				color #cdcdcd
-
-			> .type
-			> .data-size
-				color #9d9d9d
-
-				> mk-file-type-icon
-					margin-right 4px
 
 			> .created-at
-				color #bdbdbd
 
 				> [data-fa]
 					margin-right 2px
@@ -207,7 +198,7 @@ export default Vue.extend({
 
 	> .menu
 		padding 14px
-		border-top solid 1px #dfdfdf
+		border-top solid 1px isDark ? #1c2023 : #dfdfdf
 
 		> div
 			max-width 500px
@@ -218,14 +209,14 @@ export default Vue.extend({
 				width 100%
 				padding 10px 16px
 				margin 0 0 12px 0
-				color #333
+				color isDark ? #dfe3e8 : #333
 				font-size 0.9em
 				text-align center
 				text-decoration none
-				text-shadow 0 1px 0 rgba(255, 255, 255, 0.9)
-				background-image linear-gradient(#fafafa, #eaeaea)
-				border 1px solid #ddd
-				border-bottom-color #cecece
+				text-shadow 0 1px 0 isDark ? rgba(0, 0, 0, 0.9) : rgba(255, 255, 255, 0.9)
+				background-image isDark ? linear-gradient(#292f3c, #1b2025) : linear-gradient(#fafafa, #eaeaea)
+				border 1px solid isDark ? #121417 : #ddd
+				border-bottom-color isDark ? #060606 : #cecece
 				border-radius 3px
 
 				&:last-child
@@ -242,7 +233,7 @@ export default Vue.extend({
 
 	> .hash
 		padding 14px
-		border-top solid 1px #dfdfdf
+		border-top solid 1px isDark ? #1c2023 : #dfdfdf
 
 		> div
 			max-width 500px
@@ -252,7 +243,7 @@ export default Vue.extend({
 				display block
 				margin 0
 				padding 0
-				color #555
+				color isDark ? #a8b7d0 : #555
 				font-size 0.9em
 
 				> [data-fa]
@@ -273,7 +264,7 @@ export default Vue.extend({
 
 	> .exif
 		padding 14px
-		border-top solid 1px #dfdfdf
+		border-top solid 1px isDark ? #1c2023 : #dfdfdf
 
 		> div
 			max-width 500px
@@ -283,7 +274,7 @@ export default Vue.extend({
 				display block
 				margin 0
 				padding 0
-				color #555
+				color isDark ? #a8b7d0 : #555
 				font-size 0.9em
 
 				> [data-fa]
@@ -301,4 +292,10 @@ export default Vue.extend({
 				border-radius 2px
 				background #f5f5f5
 
+.pyvicwrksnfyhpfgkjwqknuururpaztw[data-darkmode]
+	root(true)
+
+.pyvicwrksnfyhpfgkjwqknuururpaztw:not([data-darkmode])
+	root(false)
+
 </style>
diff --git a/src/client/app/mobile/views/components/drive.file.vue b/src/client/app/mobile/views/components/drive.file.vue
index 6dec4b9f4f..4375cfdd7b 100644
--- a/src/client/app/mobile/views/components/drive.file.vue
+++ b/src/client/app/mobile/views/components/drive.file.vue
@@ -1,5 +1,5 @@
 <template>
-<a class="file" @click.prevent="onClick" :href="`/i/drive/file/${ file.id }`" :data-is-selected="isSelected">
+<a class="vupkuhvjnjyqaqhsiogfbywvjxynrgsm" @click.prevent="onClick" :href="`/i/drive/file/${ file.id }`" :data-is-selected="isSelected">
 	<div class="container">
 		<div class="thumbnail" :style="thumbnail"></div>
 		<div class="body">
@@ -7,20 +7,12 @@
 				<span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span>
 				<span class="ext" v-if="file.name.lastIndexOf('.') != -1">{{ file.name.substr(file.name.lastIndexOf('.')) }}</span>
 			</p>
-			<!--
-			if file.tags.length > 0
-				ul.tags
-					each tag in file.tags
-						li.tag(style={background: tag.color, color: contrast(tag.color)})= tag.name
-			-->
 			<footer>
 				<span class="type"><mk-file-type-icon :type="file.type"/>{{ file.type }}</span>
 				<span class="separator"></span>
 				<span class="data-size">{{ file.datasize | bytes }}</span>
 				<span class="separator"></span>
-				<span class="created-at">
-					%fa:R clock%<mk-time :time="file.createdAt"/>
-				</span>
+				<span class="created-at">%fa:R clock%<mk-time :time="file.createdAt"/></span>
 				<template v-if="file.isSensitive">
 					<span class="separator"></span>
 					<span class="nsfw">%fa:eye-slash% %i18n:@nsfw%</span>
@@ -73,7 +65,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 @import '~const.styl'
 
-.file
+root(isDark)
 	display block
 	text-decoration none !important
 
@@ -111,7 +103,7 @@ export default Vue.extend({
 				padding 0
 				font-size 0.9em
 				font-weight bold
-				color #555
+				color isDark ? #fff : #555
 				text-overflow ellipsis
 				overflow-wrap break-word
 
@@ -138,7 +130,6 @@ export default Vue.extend({
 
 				> .separator
 					padding 0 4px
-					color #CDCDCD
 
 				> .type
 					color #9D9D9D
@@ -164,4 +155,10 @@ export default Vue.extend({
 		&, *
 			color #fff !important
 
+.vupkuhvjnjyqaqhsiogfbywvjxynrgsm[data-darkmode]
+	root(true)
+
+.vupkuhvjnjyqaqhsiogfbywvjxynrgsm:not([data-darkmode])
+	root(false)
+
 </style>
diff --git a/src/client/app/mobile/views/components/drive.folder.vue b/src/client/app/mobile/views/components/drive.folder.vue
index 22ff38fecb..f76ecba6ad 100644
--- a/src/client/app/mobile/views/components/drive.folder.vue
+++ b/src/client/app/mobile/views/components/drive.folder.vue
@@ -1,5 +1,5 @@
 <template>
-<a class="root folder" @click.prevent="onClick" :href="`/i/drive/folder/${ folder.id }`">
+<a class="jvwxssxsytqlqvrpiymarjlzlsxskqsr" @click.prevent="onClick" :href="`/i/drive/folder/${ folder.id }`">
 	<div class="container">
 		<p class="name">%fa:folder%{{ folder.name }}</p>%fa:angle-right%
 	</div>
@@ -24,9 +24,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-.root.folder
+root(isDark)
 	display block
-	color #777
+	color isDark ? #fff : #777
 	text-decoration none !important
 
 	*
@@ -55,4 +55,10 @@ export default Vue.extend({
 			> *
 				height 100%
 
+.jvwxssxsytqlqvrpiymarjlzlsxskqsr[data-darkmode]
+	root(true)
+
+.jvwxssxsytqlqvrpiymarjlzlsxskqsr:not([data-darkmode])
+	root(false)
+
 </style>
diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue
index c313d225e4..36a6ea2f40 100644
--- a/src/client/app/mobile/views/components/drive.vue
+++ b/src/client/app/mobile/views/components/drive.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mk-drive">
+<div class="kmmwchoexgckptowjmjgfsygeltxfeqs">
 	<nav ref="nav">
 		<a @click.prevent="goRoot()" href="/i/drive">%fa:cloud%%i18n:@drive%</a>
 		<template v-for="folder in hierarchyFolders">
@@ -26,11 +26,11 @@
 			</p>
 		</div>
 		<div class="folders" v-if="folders.length > 0">
-			<x-folder v-for="folder in folders" :key="folder.id" :folder="folder"/>
+			<x-folder class="folder" v-for="folder in folders" :key="folder.id" :folder="folder"/>
 			<p v-if="moreFolders">%i18n:@load-more%</p>
 		</div>
 		<div class="files" v-if="files.length > 0">
-			<x-file v-for="file in files" :key="file.id" :file="file"/>
+			<x-file class="file" v-for="file in files" :key="file.id" :file="file"/>
 			<button class="more" v-if="moreFiles" @click="fetchMoreFiles">
 				{{ fetchingMoreFiles ? '%i18n:common.loading%' : '%i18n:@load-more%' }}
 			</button>
@@ -94,6 +94,13 @@ export default Vue.extend({
 			return this.selectFile;
 		}
 	},
+	watch: {
+		top() {
+			if (this.isNaked) {
+				(this.$refs.nav as any).style.top = `${this.top}px`;
+			}
+		}
+	},
 	mounted() {
 		this.connection = (this as any).os.streams.driveStream.getConnection();
 		this.connectionId = (this as any).os.streams.driveStream.use();
@@ -466,8 +473,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-.mk-drive
-	background #fff
+root(isDark)
+	background isDark ? #282c37 : #fff
 
 	> nav
 		display block
@@ -480,10 +487,10 @@ export default Vue.extend({
 		overflow auto
 		white-space nowrap
 		font-size 0.9em
-		color rgba(#000, 0.67)
+		color rgba(isDark ? #fff : #000, 0.67)
 		-webkit-backdrop-filter blur(12px)
 		backdrop-filter blur(12px)
-		background-color rgba(#fff, 0.75)
+		background-color rgba(isDark ? #313543 : #fff, 0.75)
 		border-bottom solid 1px rgba(#000, 0.13)
 
 		> p
@@ -509,7 +516,7 @@ export default Vue.extend({
 			opacity 0.5
 
 		> .info
-			border-bottom solid 1px #eee
+			border-bottom solid 1px isDark ? #1c2023 : #eee
 
 			&:empty
 				display none
@@ -520,15 +527,15 @@ export default Vue.extend({
 				margin 0 auto
 				padding 4px 16px
 				font-size 10px
-				color #777
+				color isDark ? #606984 : #777
 
 		> .folders
 			> .folder
-				border-bottom solid 1px #eee
+				border-bottom solid 1px isDark ? #1c2023 : #eee
 
 		> .files
 			> .file
-				border-bottom solid 1px #eee
+				border-bottom solid 1px isDark ? #1c2023 : #eee
 
 			> .more
 				display block
@@ -584,4 +591,10 @@ export default Vue.extend({
 	> .file
 		display none
 
+.kmmwchoexgckptowjmjgfsygeltxfeqs[data-darkmode]
+	root(true)
+
+.kmmwchoexgckptowjmjgfsygeltxfeqs:not([data-darkmode])
+	root(false)
+
 </style>
diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue
index c7cbe0f72e..657f43c7c3 100644
--- a/src/client/app/mobile/views/pages/drive.vue
+++ b/src/client/app/mobile/views/pages/drive.vue
@@ -11,7 +11,7 @@
 		:init-folder="initFolder"
 		:init-file="initFile"
 		:is-naked="true"
-		:top="48"
+		:top="$store.state.uiHeaderHeight"
 		@begin-fetch="Progress.start()"
 		@fetched-mid="Progress.set(0.5)"
 		@fetched="Progress.done()"
diff --git a/src/client/app/mobile/views/pages/selectdrive.vue b/src/client/app/mobile/views/pages/selectdrive.vue
index 1a162b346c..c098b8c65e 100644
--- a/src/client/app/mobile/views/pages/selectdrive.vue
+++ b/src/client/app/mobile/views/pages/selectdrive.vue
@@ -5,7 +5,7 @@
 		<button class="upload" @click="upload">%fa:upload%</button>
 		<button v-if="multiple" class="ok" @click="ok">%fa:check%</button>
 	</header>
-	<mk-drive ref="browser" select-file :multiple="multiple" is-naked :top="42"/>
+	<mk-drive ref="browser" select-file :multiple="multiple" is-naked :top="$store.state.uiHeaderHeight"/>
 </div>
 </template>
 

From 7e35048829782eb9fb0abc799f5f96cc864c040f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 12:06:15 +0900
Subject: [PATCH 022/539] 8.18.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 1b42598b31..0b3335bb98 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.17.0",
-	"clientVersion": "1.0.9212",
+	"version": "8.18.0",
+	"clientVersion": "1.0.9214",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 29b2bdf613efb6e1db10c830012e84270a480fa8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 12:58:04 +0900
Subject: [PATCH 023/539] Fix bug

---
 .../desktop/views/pages/user/user.followers-you-know.vue | 9 +++++++--
 src/client/app/desktop/views/pages/user/user.friends.vue | 7 +++----
 src/client/app/desktop/views/pages/user/user.photos.vue  | 7 +++----
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index f1abaf7fc2..0e7e3f1d77 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="followers-you-know">
+<div class="vahgrswmbzfdlmomxnqftuueyvwaafth">
 	<p class="title">%fa:users%%i18n:@title%</p>
 	<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
 	<div v-if="!fetching && users.length > 0">
@@ -37,7 +37,6 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-.followers-you-know
 	background isDark ? #282C37 : #fff
 	border solid 1px rgba(#000, 0.075)
 	border-radius 6px
@@ -78,4 +77,10 @@ root(isDark)
 		> i
 			margin-right 4px
 
+.vahgrswmbzfdlmomxnqftuueyvwaafth[data-darkmode]
+	root(true)
+
+.vahgrswmbzfdlmomxnqftuueyvwaafth:not([data-darkmode])
+	root(false)
+
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index 516eea0288..a238565588 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="friends">
+<div class="hozptpaliadatkehcmcayizwzwwctpbc">
 	<p class="title">%fa:users%%i18n:@title%</p>
 	<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
 	<template v-if="!fetching && users.length != 0">
@@ -41,7 +41,6 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-.friends
 	background isDark ? #282C37 : #fff
 	border solid 1px rgba(#000, 0.075)
 	border-radius 6px
@@ -113,10 +112,10 @@ root(isDark)
 			top 16px
 			right 16px
 
-.friends[data-darkmode]
+.hozptpaliadatkehcmcayizwzwwctpbc[data-darkmode]
 	root(true)
 
-.friends:not([data-darkmode])
+.hozptpaliadatkehcmcayizwzwwctpbc:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index 8397e56484..64c537f1ed 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="photos">
+<div class="dzsuvbsrrrwobdxifudxuefculdfiaxd">
 	<p class="title">%fa:camera%%i18n:@title%</p>
 	<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
 	<div class="stream" v-if="!fetching && images.length > 0">
@@ -40,7 +40,6 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-.photos
 	background isDark ? #282C37 : #fff
 	border solid 1px rgba(#000, 0.075)
 	border-radius 6px
@@ -88,10 +87,10 @@ root(isDark)
 		> i
 			margin-right 4px
 
-.photos[data-darkmode]
+.dzsuvbsrrrwobdxifudxuefculdfiaxd[data-darkmode]
 	root(true)
 
-.photos:not([data-darkmode])
+.dzsuvbsrrrwobdxifudxuefculdfiaxd:not([data-darkmode])
 	root(false)
 
 </style>

From 488bbc96510990afeb9afe3ce5e68e001d514e3e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 13:08:43 +0900
Subject: [PATCH 024/539] =?UTF-8?q?Deck=E3=81=A7=E3=82=82URL=E3=83=97?=
 =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../common/views/components/url-preview.vue   | 31 ++++++++++++++++++-
 .../desktop/views/pages/deck/deck.note.vue    |  1 +
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index 242d9ba5c6..d5dda0c80a 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -8,7 +8,7 @@
 	</blockquote>
 </div>
 <div v-else class="mk-url-preview">
-	<a :href="url" target="_blank" :title="url" v-if="!fetching">
+	<a :class="{ mini }" :href="url" target="_blank" :title="url" v-if="!fetching">
 		<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
 		<article>
 			<header>
@@ -118,6 +118,12 @@ export default Vue.extend({
 			type: Boolean,
 			required: false,
 			default: false
+		},
+
+		mini: {
+			type: Boolean,
+			required: false,
+			default: false
 		}
 	},
 
@@ -293,6 +299,29 @@ root(isDark)
 						width 12px
 						height 12px
 
+		&.mini
+			font-size 10px
+
+			> .thumbnail
+				position relative
+				width 100%
+				height 60px
+
+			> article
+				left 0
+				width 100%
+				padding 8px
+
+				> header
+					margin-bottom 4px
+
+				> footer
+					margin-top 4px
+
+					> img
+						width 12px
+						height 12px
+
 .mk-url-preview[data-darkmode]
 	root(true)
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index e6d062eac9..2615c0d090 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -36,6 +36,7 @@
 					<div class="renote" v-if="p.renote">
 						<mk-note-preview :note="p.renote" :mini="true"/>
 					</div>
+					<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="false" :mini="true"/>
 				</div>
 				<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
 			</div>

From 8ee771ca77887ec3956e5a2da3c5f527a3b5d870 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 13:12:52 +0900
Subject: [PATCH 025/539] 8.19.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 0b3335bb98..401f7d2862 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.18.0",
-	"clientVersion": "1.0.9214",
+	"version": "8.19.0",
+	"clientVersion": "1.0.9217",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From a228c522f1cc2159d2162f6b40378a66ca2328c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sat, 1 Sep 2018 14:54:40 +0900
Subject: [PATCH 026/539] Update autogen.sh

---
 .autogen/autogen.sh | 49 +++++++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/.autogen/autogen.sh b/.autogen/autogen.sh
index 1ea71ff00c..f01f633278 100755
--- a/.autogen/autogen.sh
+++ b/.autogen/autogen.sh
@@ -1,18 +1,19 @@
 #!/usr/bin/env bash
-# BEARER_TOKEN=
-# CAMPAIGN_ID=
-# GITHUB_TOKEN=
-# HEAD='acid-chicken:patch-autogen'
-# REPO='syuilo/misskey'
-test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$GITHUB_TOKEN" | jq -r '.[].head.label' | grep $HEAD)" && exit 1
+# __MISSKEY_BEARER_TOKEN=
+# __MISSKEY_CAMPAIGN_ID=
+# __MISSKEY_GITHUB_TOKEN=
+# __MISSKEY_HEAD=acid-chicken:patch-autogen
+# __MISSKEY_REPO=syuilo/misskey
+# __MISSKEY_BRANCH=develop
+test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN" | jq -r '.[].head.label' | grep $__MISSKEY_HEAD)" && exit 1
 cd "$(dirname $0)/.." && \
 touch null.cache && \
 rm *.cache && \
-git checkout master && \
-git pull origin master && \
-git pull upstream master && \
+git checkout $__MISSKEY_BRANCH && \
+git pull origin $__MISSKEY_BRANCH && \
+git pull upstream $__MISSKEY_BRANCH && \
 git stash && \
-git rebase -f upstream/master && \
+git rebase -f upstream/$__MISSKEY_BRANCH && \
 git branch patch-autogen && \
 git checkout patch-autogen && \
 git reset --hard HEAD || \
@@ -20,12 +21,12 @@ exit 1
 touch patreon.md.cache && \
 rm patreon.md.cache && \
 echo '<!-- PATREON_START -->' > patreon.md.cache && \
-URL="https://www.patreon.com/api/oauth2/v2/campaigns/$CAMPAIGN_ID/members?include=currently_entitled_tiers,user&fields%5Btier%5D=title&fields%5Buser%5D=full_name,thumb_url,url,hide_pledges"
+url="https://www.patreon.com/api/oauth2/v2/campaigns/$__MISSKEY_CAMPAIGN_ID/members?include=currently_entitled_tiers,user&fields%5Btier%5D=title&fields%5Buser%5D=full_name,thumb_url,url,hide_pledges"
 while :
  do
   touch patreon.raw.cache && \
   rm patreon.raw.cache && \
-  curl -LSs -w '\n' -H "Authorization: Bearer $BEARER_TOKEN" -- $URL > patreon.raw.cache && \
+  curl -LSs -w '\n' -H "Authorization: Bearer $__MISSKEY_BEARER_TOKEN" -- $url > patreon.raw.cache && \
   touch patreon.cache && \
   rm patreon.cache && \
   cat patreon.raw.cache | \
@@ -42,31 +43,31 @@ while :
   xargs -I% echo '<td><a href="%</a></td>' >> patreon.md.cache && \
   echo '</tr></table>' >> patreon.md.cache || \
   exit 1
-  NEW_URL="$(cat patreon.raw.cache | jq -r '.links.next')"
-  test "$NEW_URL" = 'null' && \
+  new_url="$(cat patreon.raw.cache | jq -r '.links.next')"
+  test "$new_url" = 'null' && \
   break || \
-  URL="$NEW_URL"
+  URL="$url"
 done
-IGNORE= && \
+ignore= && \
 echo -e "\n**Last updated:** $(date -uR | sed 's/\+0000/UTC/')\n<!-- PATREON_END -->" >> patreon.md.cache && \
 touch README.md && \
 touch .autogen/README.md && \
 rm .autogen/README.md && \
 mv README.md .autogen/README.md && \
-cat .autogen/README.md | while IFS= read LINE;
+cat .autogen/README.md | while IFS= read line;
  do
-  if [[ -z "$IGNORE" ]]
+  if [[ -z "$ignore" ]]
    then
-    if [[ "$LINE" = '<!-- PATREON_START -->' ]]
+    if [[ "$line" = '<!-- PATREON_START -->' ]]
      then
-      IGNORE='PATREON_INSIDE'
+      ignore='PATREON_INSIDE'
      else
-      echo "$LINE" >> README.md
+      echo "$line" >> README.md
     fi
    else
     if [[ "$LINE" = '<!-- PATREON_END -->' ]]
      then
-      IGNORE=
+      ignore=
       cat patreon.md.cache >> README.md
     fi
   fi
@@ -80,7 +81,7 @@ test 4 -lt $(cat diff.cache | wc -l) && \
 git add README.md && \
 git commit -m 'Update README.md [AUTOGEN]' && \
 git push -f origin patch-autogen && \
-curl -LSs -w '\n' -X POST -d '{"title":"[AUTOMATED] Update README.md","body":"*This pull request was created by a tool.*","head":"'$HEAD'","base":"master"}' -- "https://api.github.com/repos/$REPO/pulls?access_token=$GITHUB_TOKEN"
+curl -LSs -w '\n' -X POST -d '{"title":"[AUTOMATED] Update README.md","body":"*This pull request was created by a tool.*","head":"'$__MISSKEY_HEAD'","base":"'$__MISSKEY_BRANCH'"}' -- "https://api.github.com/repos/$__MISSKEY_REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN"
 git stash
-git checkout master
+git checkout $__MISSKEY_BRANCH
 git branch -D patch-autogen

From 63e2dbbb0d1b9be3aba6afc8ec7ddb5f84c193cf Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 15:22:28 +0900
Subject: [PATCH 027/539] Fix bug

---
 .../app/mobile/views/components/note-detail.vue     | 13 ++++++++-----
 src/client/app/mobile/views/components/note.vue     | 13 ++++++++-----
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 02ef3845d3..8a0305cedd 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -76,10 +76,10 @@
 		<x-sub v-for="note in replies" :key="note.id" :note="note"/>
 	</div>
 
-	<modal name="replyForm">
+	<modal :name="replyFormId">
 		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
 	</modal>
-	<modal name="renoteForm">
+	<modal :name="renoteFormId">
 		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
 	</modal>
 </div>
@@ -87,6 +87,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import * as uuid from 'uuid';
 import parse from '../../../../../mfm/parse';
 
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
@@ -112,7 +113,9 @@ export default Vue.extend({
 		return {
 			conversation: [],
 			conversationFetching: false,
-			replies: []
+			replies: [],
+			replyFormId: uuid(),
+			renoteFormId: uuid()
 		};
 	},
 
@@ -192,7 +195,7 @@ export default Vue.extend({
 		},
 
 		reply() {
-			this.$modal.push('replyForm');
+			this.$modal.push(this.replyFormId);
 		},
 
 		replyFormClosed() {
@@ -200,7 +203,7 @@ export default Vue.extend({
 		},
 
 		renote() {
-			this.$modal.push('renoteForm');
+			this.$modal.push(this.renoteFormId);
 		},
 
 		renoteFormClosed() {
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index f658686b05..4bf4eb34e3 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -61,10 +61,10 @@
 		</div>
 	</article>
 
-	<modal name="replyForm">
+	<modal :name="replyFormId">
 		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
 	</modal>
-	<modal name="renoteForm">
+	<modal :name="renoteFormId">
 		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
 	</modal>
 </div>
@@ -72,6 +72,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import * as uuid from 'uuid';
 import parse from '../../../../../mfm/parse';
 
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
@@ -89,7 +90,9 @@ export default Vue.extend({
 		return {
 			showContent: false,
 			connection: null,
-			connectionId: null
+			connectionId: null,
+			replyFormId: uuid(),
+			renoteFormId: uuid()
 		};
 	},
 
@@ -202,7 +205,7 @@ export default Vue.extend({
 		},
 
 		reply() {
-			this.$modal.push('replyForm');
+			this.$modal.push(this.replyFormId);
 		},
 
 		replyFormClosed() {
@@ -210,7 +213,7 @@ export default Vue.extend({
 		},
 
 		renote() {
-			this.$modal.push('renoteForm');
+			this.$modal.push(this.renoteFormId);
 		},
 
 		renoteFormClosed() {

From f1d65a66b465a18d200f922fac03384bee7d6f69 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 15:38:03 +0900
Subject: [PATCH 028/539] Fix bug

---
 package.json                                   |  1 -
 src/client/app/app.styl                        | 10 ++++++++++
 src/client/app/desktop/views/pages/welcome.vue | 17 ++++++++++++-----
 src/client/app/init.ts                         |  2 --
 src/client/app/mobile/style.styl               | 10 ----------
 5 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/package.json b/package.json
index 401f7d2862..110145366d 100644
--- a/package.json
+++ b/package.json
@@ -210,7 +210,6 @@
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
 		"vue-cropperjs": "2.2.1",
-		"vue-js-modal": "1.3.24",
 		"vue-json-tree-view": "2.1.4",
 		"vue-loader": "15.4.1",
 		"vue-router": "3.0.1",
diff --git a/src/client/app/app.styl b/src/client/app/app.styl
index 431b9daa65..aaa0d34c71 100644
--- a/src/client/app/app.styl
+++ b/src/client/app/app.styl
@@ -126,3 +126,13 @@ pre
 
 [data-fa]
 	display inline-block
+
+.modal-backdrop
+	z-index 10000 !important
+
+.modal-content-wrapper
+	z-index 10001 !important
+
+.modal-content
+	padding 0 !important
+	background-color transparent !important
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index ac2f921a21..37c776130e 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -37,9 +37,12 @@
 	<div class="tl">
 		<mk-welcome-timeline :max="20"/>
 	</div>
-	<modal name="signup" width="500px" height="auto" scrollable>
-		<header :class="$style.signupFormHeader">%i18n:@signup%</header>
-		<mk-signup :class="$style.signupForm"/>
+
+	<modal name="signup">
+		<div :class="$style.modal">
+			<header :class="$style.signupFormHeader">%i18n:@signup%</header>
+			<mk-signup :class="$style.signupForm"/>
+		</div>
 	</modal>
 </div>
 </template>
@@ -88,10 +91,10 @@ export default Vue.extend({
 			this.$refs.pointer.style.left = x.left + 'px';
 		},
 		signup() {
-			this.$modal.show('signup');
+			this.$modal.push('signup');
 		},
 		signin() {
-			this.$modal.show('signin');
+			this.$modal.push('signin');
 		},
 		dark() {
 			this.$store.commit('device/set', {
@@ -265,6 +268,10 @@ root(isDark)
 </style>
 
 <style lang="stylus" module>
+.modal
+	width 500px
+	background #fff !important
+
 .signupForm
 	padding 24px 48px 48px 48px
 
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index dd31f07475..0b22509870 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -5,7 +5,6 @@
 import Vue from 'vue';
 import Vuex from 'vuex';
 import VueRouter from 'vue-router';
-import VModal from 'vue-js-modal';
 import * as TreeView from 'vue-json-tree-view';
 import VAnimateCss from 'v-animate-css';
 import Element from 'element-ui';
@@ -28,7 +27,6 @@ switch (lang) {
 
 Vue.use(Vuex);
 Vue.use(VueRouter);
-Vue.use(VModal);
 Vue.use(TreeView);
 Vue.use(VAnimateCss);
 Vue.use(Element, { locale: elementLocale });
diff --git a/src/client/app/mobile/style.styl b/src/client/app/mobile/style.styl
index f78146f8b8..df8f4a8fae 100644
--- a/src/client/app/mobile/style.styl
+++ b/src/client/app/mobile/style.styl
@@ -17,13 +17,3 @@ body
 	display flex
 	flex-direction column
 	min-height 100%
-
-.modal-backdrop
-	z-index 10000 !important
-
-.modal-content-wrapper
-	z-index 10001 !important
-
-.modal-content
-	padding 0 !important
-	background-color transparent !important

From 21da6bd0470e8055dacc0ed11f909f8ae138a79f Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 16:05:10 +0900
Subject: [PATCH 029/539] Refactor languages loader

---
 locales/index.js | 27 ++++++++-------------------
 1 file changed, 8 insertions(+), 19 deletions(-)

diff --git a/locales/index.js b/locales/index.js
index b1bc782166..7072d5a694 100644
--- a/locales/index.js
+++ b/locales/index.js
@@ -5,24 +5,13 @@
 const fs = require('fs');
 const yaml = require('js-yaml');
 
-const loadLang = lang => yaml.safeLoad(
-	fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
+const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES'];
+const nativeLang = 'ja-JP';
 
-const native = loadLang('ja-JP');
+const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
+const nativeLocale = loadLocale(nativeLang);
+const fallbackToNativeLocale = locale => Object.assign({}, nativeLocale, locale);
+const makeLocale = lang => lang == nativeLang ? nativeLocale : fallbackToNativeLocale(loadLocale(lang));
+const locales = langs.map(lang => ({ [lang]: makeLocale(lang) }));
 
-const langs = {
-	'de-DE': loadLang('de-DE'),
-	'en-US': loadLang('en-US'),
-	'fr-FR': loadLang('fr-FR'),
-	'ja-JP': native,
-	'ja-KS': loadLang('ja-KS'),
-	'pl-PL': loadLang('pl-PL'),
-	'es-ES': loadLang('es-ES')
-};
-
-Object.values(langs).forEach(locale => {
-	// Extend native language (Japanese)
-	locale = Object.assign({}, native, locale);
-});
-
-module.exports = langs;
+module.exports = locales.reduce((a, b) => ({ ...a, ...b }));

From 2c135fa2f6980ab9550c8c50d0615b28fff558ca Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 16:12:50 +0900
Subject: [PATCH 030/539] Not fallback to native locale

---
 locales/index.js | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/locales/index.js b/locales/index.js
index 7072d5a694..1f28d3ff03 100644
--- a/locales/index.js
+++ b/locales/index.js
@@ -6,12 +6,8 @@ const fs = require('fs');
 const yaml = require('js-yaml');
 
 const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES'];
-const nativeLang = 'ja-JP';
 
 const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
-const nativeLocale = loadLocale(nativeLang);
-const fallbackToNativeLocale = locale => Object.assign({}, nativeLocale, locale);
-const makeLocale = lang => lang == nativeLang ? nativeLocale : fallbackToNativeLocale(loadLocale(lang));
-const locales = langs.map(lang => ({ [lang]: makeLocale(lang) }));
+const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));
 
 module.exports = locales.reduce((a, b) => ({ ...a, ...b }));

From 7559b8da6c1b3c1bebd0355891d788f11bafa4ea Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 16:23:23 +0900
Subject: [PATCH 031/539] :v:

---
 src/client/app/mobile/views/components/post-form.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 537bf407dc..b076cae26d 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -170,6 +170,8 @@ export default Vue.extend({
 			});
 		}
 
+		this.focus();
+
 		this.$nextTick(() => {
 			this.focus();
 		});

From c008154d18440c678270a6b090a05d2a34d64b8c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 16:26:31 +0900
Subject: [PATCH 032/539] 8.19.1

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 110145366d..afdd47b3ce 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.19.0",
-	"clientVersion": "1.0.9217",
+	"version": "8.19.1",
+	"clientVersion": "1.0.9225",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From e846e3d5712d73934aee9d1a4dfb7dd5cda41ce4 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 16:48:22 +0900
Subject: [PATCH 033/539] Update .npmrc

---
 .npmrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.npmrc b/.npmrc
index b680f3f72d..6b5f38e890 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,2 +1,2 @@
-save-exact=true
+save-exact = true
 package-lock = false

From bf087bfccfd9c71d31bd546fb433c0f0dedd6fa4 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 17:27:33 +0900
Subject: [PATCH 034/539] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 32a9baede5..b7a2d9b681 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Why don't you take a short break from the hustle and bustle of the city, and div
 * Reactions
 * User lists
 * Customizable column view (called MisskeyDeck)
-  * and widgets!
+* Customizable widgets
 * Private messages
 * ActivityPub support
 

From 7204e2a84c1e9de7824f5e73548679d0fa991090 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 18:02:04 +0900
Subject: [PATCH 035/539] Update contribution guide

---
 CONTRIBUTING.md   | 40 ++++++++++++++++++++--------------------
 README.md         | 17 +++--------------
 locales/README.md |  6 ++----
 3 files changed, 25 insertions(+), 38 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0add0bdcb1..50aef3a4b6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,27 +1,27 @@
 # Contribution guide
-:v: Misskeyへの貢献ありがとうございます。 :v:
+:v: Thanks for your contributions :v:
 
-## Issueの報告
-新機能の提案や不具合の報告は https://github.com/syuilo/misskey/issues で管理しています。
-Issueを作成する前に、既に同じIssueが作成されていないかご確認ください。
-もし既にIssueが作成されている場合は、既存のIssueにコメントをしたりリアクションをするようお願いします。
+## Issues
+Feature suggestions and bug reports are filed in https://github.com/syuilo/misskey/issues .
+Before creating a new issue, please search existing issues to avoid duplication.
+If you find the existing issue, please add your reaction or comment to the issue.
 
-## Issueの解決
-[pr-welcomeのラベルがついているIssue](https://github.com/syuilo/misskey/labels/pr-welcome)
-の解決を目的としたPull Requestを作成してくださると非常にありがたいです。
+## Internationalization (i18n)
+Please see [Translation guide](./docs/translate.en.md).
 
-## 翻訳の改善
-ソースコード中の `%i18n:id%` という形の文字列は、言語ファイルの対応するテキストに置換されます。
-言語ファイルは /locales ディレクトリに存在します。
+## Localization (l10n)
+Please use Crowdin for localization.
 
-## ドキュメントの編集
-現在Misskeyはドキュメントが大きく不足しています。
-ドキュメントは /docs ディレクトリに存在します。
+[![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)](https://crowdin.com/project/misskey)
 
-## テストの追加
-現在Misskeyはテストが大きく不足しています。
-テストコードは /test ディレクトリに存在します。
+## Documentation
+* Documents for contributors are located in `/docs`.
+* Documents for instance admins are located in `/docs`.
+* Documents for end users are located in `src/docs`.
 
-## 自動テスト及び自動リリース
-Travis CIで行っています。
-設定ファイルは /.travis に存在します。
+## Test
+* Test codes are located in `/test`.
+
+## Continuous integration
+Misskey uses Travis for automated test.
+Configuration files are located in `/.travis`.
diff --git a/README.md b/README.md
index b7a2d9b681..465d171114 100644
--- a/README.md
+++ b/README.md
@@ -32,22 +32,11 @@ and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz
 
 :package: Create your own instance
 ----------------------------------------------------------------
-If you want to run your own instance of Misskey,
-please see [Setup and installation guide](./docs/setup.en.md).
+Please see [Setup and installation guide](./docs/setup.en.md).
 
-:wrench: Contribute
+:wrench: Contribution
 ----------------------------------------------------------------
-**[PR](https://github.com/syuilo/misskey/pulls)s welcome!**
-
-### i18n
-
-Please see [Translation guide](./docs/translate.en.md).
-
-### l10n
-
-Misskey is using Crowdin for l10n.
-
-[![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)](https://crowdin.com/project/misskey)
+Please see [Contribution guide](./CONTRIBUTING.md).
 
 :heart: Backers & Sponsors
 ----------------------------------------------------------------
diff --git a/locales/README.md b/locales/README.md
index 09888299cd..56bfae64d6 100644
--- a/locales/README.md
+++ b/locales/README.md
@@ -1,5 +1,3 @@
-# **Please DO NOT edit these files** except `ja-JP.yml`.
+# **DO NOT edit locale files** except `ja-JP.yml`.
 
-If you want to...
-* i18n ... please see [Translation guide](../docs/translate.en.md).
-* l10n ... please visit https://crowdin.com/project/misskey
+Please see [Contribution guide](../CONTRIBUTING.md) for more information.

From ad9b9964fad91b56ffbde9f0ddf897376dc52012 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 18:15:25 +0900
Subject: [PATCH 036/539] Update contribution guide

---
 CONTRIBUTING.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 50aef3a4b6..2fa78d1934 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -10,9 +10,9 @@ If you find the existing issue, please add your reaction or comment to the issue
 Please see [Translation guide](./docs/translate.en.md).
 
 ## Localization (l10n)
-Please use Crowdin for localization.
+Please use [Crowdin](https://crowdin.com/project/misskey) for localization.
 
-[![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)](https://crowdin.com/project/misskey)
+![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg)
 
 ## Documentation
 * Documents for contributors are located in `/docs`.

From 409b37b2719fd3c69aa172ddce647d91e1a3120c Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 18:42:46 +0900
Subject: [PATCH 037/539] Update setup docs

---
 docs/setup.en.md | 1 +
 docs/setup.ja.md | 1 +
 2 files changed, 2 insertions(+)

diff --git a/docs/setup.en.md b/docs/setup.en.md
index 6a54817a78..d426271870 100644
--- a/docs/setup.en.md
+++ b/docs/setup.en.md
@@ -131,6 +131,7 @@ You can check if the service is running with `systemctl status misskey`.
 2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
 3. `npm install`
 4. `npm run build`
+5. Check [ChangeLog](../CHANGELOG.md) for migration information
 
 ----------------------------------------------------------------
 
diff --git a/docs/setup.ja.md b/docs/setup.ja.md
index 7c701b019f..2758e6f231 100644
--- a/docs/setup.ja.md
+++ b/docs/setup.ja.md
@@ -120,6 +120,7 @@ WantedBy=multi-user.target
 2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
 3. `npm install`
 4. `npm run build`
+5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
 
 ----------------------------------------------------------------
 

From 7860d97a10eb6509974d5f0442ada2247f881963 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 18:47:02 +0900
Subject: [PATCH 038/539] Add type annotation

---
 src/models/stats.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/models/stats.ts b/src/models/stats.ts
index 326bfacc80..82c07aa678 100644
--- a/src/models/stats.ts
+++ b/src/models/stats.ts
@@ -2,7 +2,7 @@ import * as mongo from 'mongodb';
 import db from '../db/mongodb';
 
 const Stats = db.get<IStats>('stats');
-Stats.dropIndex({ date: -1 }); // 後方互換性のため
+Stats.dropIndex({ date: -1 } as any); // 後方互換性のため
 Stats.createIndex({ span: -1, date: -1 }, { unique: true });
 export default Stats;
 

From 52aa64fcb6bef627da82c7d1515a5798a0d53684 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 19:12:07 +0900
Subject: [PATCH 039/539] Fix drop index

---
 src/models/stats.ts | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/models/stats.ts b/src/models/stats.ts
index 82c07aa678..d496f2c480 100644
--- a/src/models/stats.ts
+++ b/src/models/stats.ts
@@ -2,7 +2,12 @@ import * as mongo from 'mongodb';
 import db from '../db/mongodb';
 
 const Stats = db.get<IStats>('stats');
-Stats.dropIndex({ date: -1 } as any); // 後方互換性のため
+
+// 後方互換性のため
+Stats.dropIndex({ date: -1 } as any).catch((e: mongo.MongoError) => {
+	if (e.code !== 27) throw e;
+});
+
 Stats.createIndex({ span: -1, date: -1 }, { unique: true });
 export default Stats;
 

From 795fc5e7bca45aca90815cdaa9404cdb1fd73eb6 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sat, 1 Sep 2018 16:39:46 +0900
Subject: [PATCH 040/539] Set Person.updatedAt at first

---
 src/remote/activitypub/models/person.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index 3bd4e16763..212a1c5ee6 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -139,6 +139,7 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
 			avatarId: null,
 			bannerId: null,
 			createdAt: Date.parse(person.published) || null,
+			updatedAt: new Date(),
 			description: htmlToMFM(person.summary),
 			followersCount,
 			followingCount,

From eee98358acce99f181e5b03fe99297f772ddfdb1 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sat, 1 Sep 2018 16:46:41 +0900
Subject: [PATCH 041/539] Add missing updatePerson properties

---
 src/remote/activitypub/models/person.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index 212a1c5ee6..0246798616 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -291,7 +291,9 @@ export async function updatePerson(uri: string, resolver?: Resolver): Promise<vo
 			name: person.name,
 			url: person.url,
 			endpoints: person.endpoints,
-			isCat: (person as any).isCat === true ? true : false
+			isBot: object.type == 'Service',
+			isCat: (person as any).isCat === true ? true : false,
+			isLocked: person.manuallyApprovesFollowers
 		}
 	});
 }

From 15eaebe52228afa1acbe96137b10a885e39943b1 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sat, 1 Sep 2018 16:55:11 +0900
Subject: [PATCH 042/539] =?UTF-8?q?updatePerson=E3=81=A7=E5=86=8D=E5=89=B2?=
 =?UTF-8?q?=E3=82=8A=E5=BD=93=E3=81=A6=E3=82=92=E8=80=83=E6=85=AE=E3=81=99?=
 =?UTF-8?q?=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/remote/activitypub/models/person.ts | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index 0246798616..9c770141a3 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -293,7 +293,12 @@ export async function updatePerson(uri: string, resolver?: Resolver): Promise<vo
 			endpoints: person.endpoints,
 			isBot: object.type == 'Service',
 			isCat: (person as any).isCat === true ? true : false,
-			isLocked: person.manuallyApprovesFollowers
+			isLocked: person.manuallyApprovesFollowers,
+			createdAt: Date.parse(person.published) || null,
+			publicKey: {
+				id: person.publicKey.id,
+				publicKeyPem: person.publicKey.publicKeyPem
+			},
 		}
 	});
 }

From 3efffbcf22f9292bfe4644df4b7627687a6748f5 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sat, 1 Sep 2018 17:53:38 +0900
Subject: [PATCH 043/539] Receive Update activity

---
 src/queue/processors/http/process-inbox.ts | 28 +++++++++++++++-------
 src/remote/activitypub/models/person.ts    |  8 ++++---
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts
index 7e564dd32a..8e6b3769de 100644
--- a/src/queue/processors/http/process-inbox.ts
+++ b/src/queue/processors/http/process-inbox.ts
@@ -5,7 +5,7 @@ const httpSignature = require('http-signature');
 import parseAcct from '../../../misc/acct/parse';
 import User, { IRemoteUser } from '../../../models/user';
 import perform from '../../../remote/activitypub/perform';
-import { resolvePerson } from '../../../remote/activitypub/models/person';
+import { resolvePerson, updatePerson } from '../../../remote/activitypub/models/person';
 import { toUnicode } from 'punycode';
 import { URL } from 'url';
 
@@ -44,11 +44,6 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 		}
 
 		user = await User.findOne({ usernameLower: username, host: host.toLowerCase() }) as IRemoteUser;
-
-		// アクティビティを送信してきたユーザーがまだMisskeyサーバーに登録されていなかったら登録する
-		if (user === null) {
-			user = await resolvePerson(activity.actor) as IRemoteUser;
-		}
 	} else {
 		// アクティビティ内のホストの検証
 		const host = toUnicode(new URL(signature.keyId).hostname.toLowerCase());
@@ -64,11 +59,26 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 			host: { $ne: null },
 			'publicKey.id': signature.keyId
 		}) as IRemoteUser;
+	}
 
-		// アクティビティを送信してきたユーザーがまだMisskeyサーバーに登録されていなかったら登録する
-		if (user === null) {
-			user = await resolvePerson(activity.actor) as IRemoteUser;
+	// Update activityの場合は、ここで署名検証/更新処理まで実施して終了
+	if (activity.type === 'Update') {
+		if (activity.object && activity.object.type === 'Person') {
+			if (user == null) {
+				console.warn('Update activity received, but user not registed.');
+			} else if (!httpSignature.verifySignature(signature, user.publicKey.publicKeyPem)) {
+				console.warn('Update activity received, but signature verification failed.');
+			} else {
+				updatePerson(activity.actor, null, activity.object);
+			}
 		}
+		done();
+		return;
+	}
+
+	// アクティビティを送信してきたユーザーがまだMisskeyサーバーに登録されていなかったら登録する
+	if (user === null) {
+		user = await resolvePerson(activity.actor) as IRemoteUser;
 	}
 
 	if (user === null) {
diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index 9c770141a3..dff38f5460 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -216,10 +216,12 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
 
 /**
  * Personの情報を更新します。
- *
  * Misskeyに対象のPersonが登録されていなければ無視します。
+ * @param uri URI of Person
+ * @param resolver Resolver
+ * @param hint Hint of Person object (この値が正当なPersonの場合、Remote resolveをせずに更新に利用します)
  */
-export async function updatePerson(uri: string, resolver?: Resolver): Promise<void> {
+export async function updatePerson(uri: string, resolver?: Resolver, hint?: object): Promise<void> {
 	if (typeof uri !== 'string') throw 'uri is not string';
 
 	// URIがこのサーバーを指しているならスキップ
@@ -237,7 +239,7 @@ export async function updatePerson(uri: string, resolver?: Resolver): Promise<vo
 
 	if (resolver == null) resolver = new Resolver();
 
-	const object = await resolver.resolve(uri) as any;
+	const object = hint || await resolver.resolve(uri) as any;
 
 	const err = validatePerson(object, uri);
 

From 57a63d38aaae33331c0272cbcbc3f5d254cfd93d Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sat, 1 Sep 2018 20:17:30 +0900
Subject: [PATCH 044/539] Send Update activity

---
 src/remote/activitypub/renderer/update.ts | 14 +++++++++
 src/server/api/endpoints/i/update.ts      |  4 +++
 src/services/i/update.ts                  | 38 +++++++++++++++++++++++
 3 files changed, 56 insertions(+)
 create mode 100644 src/remote/activitypub/renderer/update.ts
 create mode 100644 src/services/i/update.ts

diff --git a/src/remote/activitypub/renderer/update.ts b/src/remote/activitypub/renderer/update.ts
new file mode 100644
index 0000000000..cf9acc9acb
--- /dev/null
+++ b/src/remote/activitypub/renderer/update.ts
@@ -0,0 +1,14 @@
+import config from '../../../config';
+import { ILocalUser } from '../../../models/user';
+
+export default (object: any, user: ILocalUser) => {
+	const activity = {
+		id: `${config.url}/users/${user._id}#updates/${new Date().getTime()}`,
+		actor: `${config.url}/users/${user._id}`,
+		type: 'Update',
+		to: [ 'https://www.w3.org/ns/activitystreams#Public' ],
+		object
+	} as any;
+
+	return activity;
+};
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index cdb4eb3f56..585339e249 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -5,6 +5,7 @@ import DriveFile from '../../../../models/drive-file';
 import acceptAllFollowRequests from '../../../../services/following/requests/accept-all';
 import { IApp } from '../../../../models/app';
 import config from '../../../../config';
+import { publishToFollowers } from '../../../../services/i/update';
 
 export const meta = {
 	desc: {
@@ -144,4 +145,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 	if (user.isLocked && isLocked === false) {
 		acceptAllFollowRequests(user);
 	}
+
+	// フォロワーにUpdateを配信
+	publishToFollowers(user._id);
 });
diff --git a/src/services/i/update.ts b/src/services/i/update.ts
new file mode 100644
index 0000000000..25b55b0355
--- /dev/null
+++ b/src/services/i/update.ts
@@ -0,0 +1,38 @@
+import * as mongo from 'mongodb';
+import User, { isLocalUser, isRemoteUser } from '../../models/user';
+import Following from '../../models/following';
+import renderPerson from '../../remote/activitypub/renderer/person';
+import renderUpdate from '../../remote/activitypub/renderer/update';
+import packAp from '../../remote/activitypub/renderer';
+import { deliver } from '../../queue';
+
+export async function publishToFollowers(userId: mongo.ObjectID) {
+	const user = await User.findOne({
+		_id: userId
+	});
+
+	const followers = await Following.find({
+		followeeId: user._id
+	});
+
+	const queue: string[] = [];
+
+	// フォロワーがリモートユーザーかつ投稿者がローカルユーザーならUpdateを配信
+	if (isLocalUser(user)) {
+		followers.map(following => {
+			const follower = following._follower;
+
+			if (isRemoteUser(follower)) {
+				const inbox = follower.sharedInbox || follower.inbox;
+				if (!queue.includes(inbox)) queue.push(inbox);
+			}
+		});
+
+		if (queue.length > 0) {
+			const content = packAp(renderUpdate(await renderPerson(user), user));
+			queue.forEach(inbox => {
+				deliver(user, content, inbox);
+			});
+		}
+	}
+}

From 5209a584a2ed76057ec5edc351cf155154f3f68f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 20:47:49 +0900
Subject: [PATCH 045/539] Better post form

---
 package.json                                  |   2 +-
 src/client/app/app.styl                       |  14 +-
 src/client/app/app.vue                        |   5 +-
 .../app/desktop/views/pages/welcome.vue       |  16 +--
 src/client/app/init.ts                        |   7 +-
 src/client/app/mobile/api/post.ts             |  23 +++
 src/client/app/mobile/script.ts               |   3 +-
 .../mobile/views/components/note-detail.vue   |  28 +---
 .../app/mobile/views/components/note.vue      |  28 +---
 .../views/components/post-form-dialog.vue     | 131 ++++++++++++++++++
 src/client/app/mobile/views/pages/home.vue    |  10 +-
 11 files changed, 184 insertions(+), 83 deletions(-)
 create mode 100644 src/client/app/mobile/api/post.ts
 create mode 100644 src/client/app/mobile/views/components/post-form-dialog.vue

diff --git a/package.json b/package.json
index afdd47b3ce..4c88e02a45 100644
--- a/package.json
+++ b/package.json
@@ -210,12 +210,12 @@
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
 		"vue-cropperjs": "2.2.1",
+		"vue-js-modal": "1.3.25",
 		"vue-json-tree-view": "2.1.4",
 		"vue-loader": "15.4.1",
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
 		"vue-template-compiler": "2.5.17",
-		"vue-thin-modal": "1.1.1",
 		"vuedraggable": "2.16.0",
 		"vuex": "3.0.1",
 		"vuex-persistedstate": "2.5.4",
diff --git a/src/client/app/app.styl b/src/client/app/app.styl
index aaa0d34c71..3911f83a61 100644
--- a/src/client/app/app.styl
+++ b/src/client/app/app.styl
@@ -6,6 +6,10 @@ html
 		&, *
 			cursor progress !important
 
+html
+	// iOSのため
+	overflow auto
+
 body
 	overflow-wrap break-word
 
@@ -126,13 +130,3 @@ pre
 
 [data-fa]
 	display inline-block
-
-.modal-backdrop
-	z-index 10000 !important
-
-.modal-content-wrapper
-	z-index 10001 !important
-
-.modal-content
-	padding 0 !important
-	background-color transparent !important
diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 011eb14661..7a46e7dea0 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -1,6 +1,3 @@
 <template>
-<div>
-	<router-view id="app"></router-view>
-	<modal-portal/>
-</div>
+<router-view id="app"></router-view>
 </template>
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 37c776130e..ae9bf7e678 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -38,11 +38,9 @@
 		<mk-welcome-timeline :max="20"/>
 	</div>
 
-	<modal name="signup">
-		<div :class="$style.modal">
-			<header :class="$style.signupFormHeader">%i18n:@signup%</header>
-			<mk-signup :class="$style.signupForm"/>
-		</div>
+	<modal name="signup" width="500px" height="auto" scrollable>
+		<header :class="$style.signupFormHeader">%i18n:@signup%</header>
+		<mk-signup :class="$style.signupForm"/>
 	</modal>
 </div>
 </template>
@@ -91,10 +89,10 @@ export default Vue.extend({
 			this.$refs.pointer.style.left = x.left + 'px';
 		},
 		signup() {
-			this.$modal.push('signup');
+			this.$modal.show('signup');
 		},
 		signin() {
-			this.$modal.push('signin');
+			this.$modal.show('signin');
 		},
 		dark() {
 			this.$store.commit('device/set', {
@@ -268,10 +266,6 @@ root(isDark)
 </style>
 
 <style lang="stylus" module>
-.modal
-	width 500px
-	background #fff !important
-
 .signupForm
 	padding 24px 48px 48px 48px
 
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 0b22509870..82924e92e3 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -10,8 +10,7 @@ import VAnimateCss from 'v-animate-css';
 import Element from 'element-ui';
 import ElementLocaleEn from 'element-ui/lib/locale/lang/en';
 import ElementLocaleJa from 'element-ui/lib/locale/lang/ja';
-import VueThinModal from 'vue-thin-modal';
-import 'vue-thin-modal/dist/vue-thin-modal.css';
+import VModal from 'vue-js-modal';
 
 import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
@@ -30,9 +29,7 @@ Vue.use(VueRouter);
 Vue.use(TreeView);
 Vue.use(VAnimateCss);
 Vue.use(Element, { locale: elementLocale });
-Vue.use(VueThinModal, {
-	autoMountPortal: false
-});
+Vue.use(VModal);
 
 // Register global directives
 require('./common/views/directives');
diff --git a/src/client/app/mobile/api/post.ts b/src/client/app/mobile/api/post.ts
new file mode 100644
index 0000000000..5c0f0af852
--- /dev/null
+++ b/src/client/app/mobile/api/post.ts
@@ -0,0 +1,23 @@
+import PostForm from '../views/components/post-form-dialog.vue';
+
+export default (os) => (opts) => {
+	const o = opts || {};
+
+	document.documentElement.style.overflow = 'hidden';
+
+	function recover() {
+		document.documentElement.style.overflow = 'auto';
+	}
+
+	const vm = new PostForm({
+		parent: os.app,
+		propsData: {
+			reply: o.reply,
+			renote: o.renote
+		}
+	}).$mount();
+	vm.$once('cancel', recover);
+	vm.$once('posted', recover);
+	document.body.appendChild(vm.$el);
+	(vm as any).focus();
+};
diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts
index edc2b35529..5b9d45462a 100644
--- a/src/client/app/mobile/script.ts
+++ b/src/client/app/mobile/script.ts
@@ -14,6 +14,7 @@ import chooseDriveFolder from './api/choose-drive-folder';
 import chooseDriveFile from './api/choose-drive-file';
 import dialog from './api/dialog';
 import input from './api/input';
+import post from './api/post';
 import notify from './api/notify';
 
 import MkIndex from './views/pages/index.vue';
@@ -90,7 +91,7 @@ init((launch) => {
 		chooseDriveFile,
 		dialog: dialog(os),
 		input,
-		post: () => alert('deprecated'),
+		post: post(os),
 		notify
 	}));
 }, true);
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 8a0305cedd..786e57bb22 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -75,19 +75,11 @@
 	<div class="replies" v-if="!compact">
 		<x-sub v-for="note in replies" :key="note.id" :note="note"/>
 	</div>
-
-	<modal :name="replyFormId">
-		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
-	</modal>
-	<modal :name="renoteFormId">
-		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
-	</modal>
 </div>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
-import * as uuid from 'uuid';
 import parse from '../../../../../mfm/parse';
 
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
@@ -113,9 +105,7 @@ export default Vue.extend({
 		return {
 			conversation: [],
 			conversationFetching: false,
-			replies: [],
-			replyFormId: uuid(),
-			renoteFormId: uuid()
+			replies: []
 		};
 	},
 
@@ -195,19 +185,15 @@ export default Vue.extend({
 		},
 
 		reply() {
-			this.$modal.push(this.replyFormId);
-		},
-
-		replyFormClosed() {
-			this.$modal.pop();
+			(this as any).apis.post({
+				reply: this.p
+			});
 		},
 
 		renote() {
-			this.$modal.push(this.renoteFormId);
-		},
-
-		renoteFormClosed() {
-			this.$modal.pop();
+			(this as any).apis.post({
+				renote: this.p
+			});
 		},
 
 		react() {
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 4bf4eb34e3..d0cea135f9 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -60,19 +60,11 @@
 			</footer>
 		</div>
 	</article>
-
-	<modal :name="replyFormId">
-		<mk-post-form @posted="replyFormClosed" @cancel="replyFormClosed" :reply="p"/>
-	</modal>
-	<modal :name="renoteFormId">
-		<mk-post-form @posted="renoteFormClosed" @cancel="renoteFormClosed" :renote="p"/>
-	</modal>
 </div>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
-import * as uuid from 'uuid';
 import parse from '../../../../../mfm/parse';
 
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
@@ -90,9 +82,7 @@ export default Vue.extend({
 		return {
 			showContent: false,
 			connection: null,
-			connectionId: null,
-			replyFormId: uuid(),
-			renoteFormId: uuid()
+			connectionId: null
 		};
 	},
 
@@ -205,19 +195,15 @@ export default Vue.extend({
 		},
 
 		reply() {
-			this.$modal.push(this.replyFormId);
-		},
-
-		replyFormClosed() {
-			this.$modal.pop();
+			(this as any).apis.post({
+				reply: this.p
+			});
 		},
 
 		renote() {
-			this.$modal.push(this.renoteFormId);
-		},
-
-		renoteFormClosed() {
-			this.$modal.pop();
+			(this as any).apis.post({
+				renote: this.p
+			});
 		},
 
 		react() {
diff --git a/src/client/app/mobile/views/components/post-form-dialog.vue b/src/client/app/mobile/views/components/post-form-dialog.vue
new file mode 100644
index 0000000000..6fe9249321
--- /dev/null
+++ b/src/client/app/mobile/views/components/post-form-dialog.vue
@@ -0,0 +1,131 @@
+<template>
+<div class="ulveipglmagnxfgvitaxyszerjwiqmwl">
+	<div class="bg" ref="bg" @click="onBgClick"></div>
+	<div class="main" ref="main" @click.self="onBgClick">
+		<mk-post-form ref="form"
+			:reply="reply"
+			:renote="renote"
+			:initial-text="initialText"
+			:instant="instant"
+			@posted="onPosted"
+			@cancel="onCanceled"/>
+	</div>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import * as anime from 'animejs';
+
+export default Vue.extend({
+	props: {
+		reply: {
+			type: Object,
+			required: false
+		},
+		renote: {
+			type: Object,
+			required: false
+		},
+		initialText: {
+			type: String,
+			required: false
+		},
+		instant: {
+			type: Boolean,
+			required: false,
+			default: false
+		}
+	},
+
+	mounted() {
+		this.$nextTick(() => {
+			(this.$refs.bg as any).style.pointerEvents = 'auto';
+			anime({
+				targets: this.$refs.bg,
+				opacity: 1,
+				duration: 100,
+				easing: 'linear'
+			});
+
+			anime({
+				targets: this.$refs.main,
+				opacity: 1,
+				translateY: [-16, 0],
+				duration: 300,
+				easing: 'easeOutQuad'
+			});
+		});
+	},
+
+	methods: {
+		focus() {
+			this.$refs.form.focus();
+		},
+
+		close() {
+			(this.$refs.bg as any).style.pointerEvents = 'none';
+			anime({
+				targets: this.$refs.bg,
+				opacity: 0,
+				duration: 300,
+				easing: 'linear'
+			});
+
+			(this.$refs.main as any).style.pointerEvents = 'none';
+			anime({
+				targets: this.$refs.main,
+				opacity: 0,
+				translateY: 16,
+				duration: 300,
+				easing: 'easeOutQuad',
+				complete: () => this.$destroy()
+			});
+		},
+
+		onBgClick() {
+			this.$emit('cancel');
+			this.close();
+		},
+
+		onPosted() {
+			this.$emit('posted');
+			this.close();
+		},
+
+		onCanceled() {
+			this.$emit('cancel');
+			this.close();
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+.ulveipglmagnxfgvitaxyszerjwiqmwl
+	> .bg
+		display block
+		position fixed
+		z-index 10000
+		top 0
+		left 0
+		width 100%
+		height 100%
+		background rgba(#000, 0.7)
+		opacity 0
+		pointer-events none
+
+	> .main
+		display block
+		position fixed
+		z-index 10000
+		top 0
+		left 0
+		right 0
+		height 100%
+		overflow auto
+		margin 0 auto 0 auto
+		opacity 0
+		transform translateY(-16px)
+
+</style>
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index a03fa03c5f..706c9cd28b 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -42,10 +42,6 @@
 			<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 		</div>
 	</main>
-
-	<modal name="postForm">
-		<mk-post-form @posted="postFormClosed" @cancel="postFormClosed"/>
-	</modal>
 </mk-ui>
 </template>
 
@@ -111,11 +107,7 @@ export default Vue.extend({
 
 	methods: {
 		fn() {
-			this.$modal.push('postForm');
-		},
-
-		postFormClosed() {
-			this.$modal.pop();
+			(this as any).apis.post();
 		},
 
 		saveSrc() {

From f3499b787cb08d36f2bf9af8293efd41729c77eb Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 20:49:06 +0900
Subject: [PATCH 046/539] 8.20.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 4c88e02a45..72dd6b73f0 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.19.1",
-	"clientVersion": "1.0.9225",
+	"version": "8.20.0",
+	"clientVersion": "1.0.9240",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 4a977cd5235b71494e70be75bd52ffe061dc3b76 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 21:41:37 +0900
Subject: [PATCH 047/539] Update CHANGELOG.md

---
 CHANGELOG.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef3b5b4939..84cf61f028 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -47,13 +47,13 @@ Please run `node cli/migration/5.0.0` before launch.
 
 オセロがリバーシに変更されました。
 
-Othello is now Reversi.
+Othello is rename to Reversi.
 
 ### Migration
 
 MongoDBの、`othelloGames`と`othelloMatchings`コレクションをそれぞれ`reversiGames`と`reversiMatchings`にリネームしてください。
 
-You need to rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings`.
+Please rename `othelloGames` and `othelloMatchings` MongoDB collections to `reversiGames` and `reversiMatchings` respectively.
 
 3.0.0
 -----

From 3d24112d2db94ba9755f1acf4ec03a1582e830ba Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 22:09:54 +0900
Subject: [PATCH 048/539] Refactor reversi engine

---
 src/games/reversi/core.ts | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index 92b7c3799c..b610d46884 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -205,13 +205,7 @@ export default class Reversi {
 	 * 打つことができる場所を取得します
 	 */
 	public canPutSomewhere(color: Color): number[] {
-		const result: number[] = [];
-
-		this.board.forEach((x, i) => {
-			if (this.canPut(color, i)) result.push(i);
-		});
-
-		return result;
+		return Array.from(this.board.keys()).filter(i => this.canPut(color, i));
 	}
 
 	/**

From 91ebd310b7dd94a98517a6c28228d8da9024983e Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 22:18:07 +0900
Subject: [PATCH 049/539] Refactor reversi game

---
 .../views/components/games/reversi/reversi.game.vue       | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index b432a2308d..673879a435 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -159,11 +159,9 @@ export default Vue.extend({
 				canPutEverywhere: this.game.settings.canPutEverywhere,
 				loopedBoard: this.game.settings.loopedBoard
 			});
-			this.logs.forEach((log, i) => {
-				if (i < v) {
-					this.o.put(log.color, log.pos);
-				}
-			});
+			for (const log of this.logs.slice(0, v)) {
+				this.o.put(log.color, log.pos);
+			}
 			this.$forceUpdate();
 		}
 	},

From acffc3e522c4fd46d2206dc90546268f388a70b7 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 22:32:51 +0900
Subject: [PATCH 050/539] Refactor mfm component

---
 .../views/components/misskey-flavored-markdown.ts   | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.ts b/src/client/app/common/views/components/misskey-flavored-markdown.ts
index e97da4302c..44680751f7 100644
--- a/src/client/app/common/views/components/misskey-flavored-markdown.ts
+++ b/src/client/app/common/views/components/misskey-flavored-markdown.ts
@@ -205,17 +205,8 @@ export default Vue.component('misskey-flavored-markdown', {
 			}
 		}));
 
-		const _els = [];
-		els.forEach((el, i) => {
-			if (el.tag == 'br') {
-				if (!['div', 'pre'].includes(els[i - 1].tag)) {
-					_els.push(el);
-				}
-			} else {
-				_els.push(el);
-			}
-		});
-
+		// el.tag === 'br' のとき i !== 0 が保証されるため、短絡評価により els[i - 1] は配列外参照しない
+		const _els = els.filter((el, i) => !(el.tag === 'br' && ['div', 'pre'].includes(els[i - 1].tag)));
 		return createElement('span', _els);
 	}
 });

From ffb345ccb5680df4f28bd9ad3c3d1ab8480c99ba Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Sat, 1 Sep 2018 22:45:27 +0900
Subject: [PATCH 051/539] fix #2315 (#2339)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* improve MFM to html

* improve html to MFM

* missing semicolon

* missing semicolon

* fix html to MFM

タグのリンクは解除するように

* fix bug

* misssing semicolon

* Update html-to-mfm.ts

* Update html-to-mfm.ts
---
 src/mfm/html-to-mfm.ts | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/mfm/html-to-mfm.ts b/src/mfm/html-to-mfm.ts
index daa228ec51..e2681f5447 100644
--- a/src/mfm/html-to-mfm.ts
+++ b/src/mfm/html-to-mfm.ts
@@ -33,15 +33,19 @@ export default function(html: string): string {
 
 			case 'a':
 				const txt = getText(node);
+				const rel = node.attrs.find((x: any) => x.name == 'rel');
+				const href = node.attrs.find((x: any) => x.name == 'href');
 
+				// ハッシュタグ / hrefがない / txtがURL
+				if ((rel && rel.value.match('tag') !== null) || !href || href.value == txt) {
+					text += txt;
 				// メンション
-				if (txt.startsWith('@')) {
+				} else if (txt.startsWith('@')) {
 					const part = txt.split('@');
 
 					if (part.length == 2) {
 						//#region ホスト名部分が省略されているので復元する
-						const href = new URL(node.attrs.find((x: any) => x.name == 'href').value);
-						const acct = txt + '@' + href.hostname;
+						const acct = txt + '@' + (new URL(href.value)).hostname;
 						text += acct;
 						break;
 						//#endregion
@@ -49,10 +53,9 @@ export default function(html: string): string {
 						text += txt;
 						break;
 					}
-				}
-
-				if (node.childNodes) {
-					node.childNodes.forEach((n: any) => analyze(n));
+				// その他
+				} else {
+					text += `[${txt}](${href.value})`;
 				}
 				break;
 

From 291beb45fcb7a4c856232b12848ebad8267e2840 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 23:12:51 +0900
Subject: [PATCH 052/539] Use string interpolation

---
 src/client/app/auth/views/index.vue                         | 2 +-
 src/client/app/boot.js                                      | 2 +-
 src/client/app/common/scripts/streaming/stream.ts           | 4 ++--
 src/client/app/common/views/components/autocomplete.vue     | 4 ++--
 .../views/components/connect-failed.troubleshooter.vue      | 2 +-
 src/client/app/common/views/components/url-preview.vue      | 2 +-
 src/client/app/common/views/directives/autocomplete.ts      | 4 ++--
 src/client/app/common/views/filters/note.ts                 | 2 +-
 src/client/app/common/views/filters/user.ts                 | 2 +-
 src/client/app/common/views/pages/follow.vue                | 2 +-
 src/client/app/desktop/views/components/drive.folder.vue    | 2 +-
 src/client/app/desktop/views/components/drive.vue           | 4 ++--
 src/client/app/desktop/views/components/media-image.vue     | 2 +-
 src/client/app/desktop/views/components/post-form.vue       | 6 +++---
 src/client/app/desktop/views/pages/drive.vue                | 2 +-
 src/client/app/desktop/views/pages/games/reversi.vue        | 4 ++--
 src/client/app/desktop/views/pages/messaging-room.vue       | 2 +-
 src/client/app/mobile/views/components/post-form.vue        | 6 +++---
 src/client/app/mobile/views/components/ui.nav.vue           | 2 +-
 src/client/app/mobile/views/pages/drive.vue                 | 4 ++--
 src/client/app/mobile/views/pages/followers.vue             | 2 +-
 src/client/app/mobile/views/pages/following.vue             | 2 +-
 src/client/app/mobile/views/pages/games/reversi.vue         | 4 ++--
 src/client/app/mobile/views/pages/settings.vue              | 2 +-
 src/client/app/mobile/views/pages/user-lists.vue            | 2 +-
 src/client/app/mobile/views/pages/user.vue                  | 2 +-
 src/daemons/notes-stats.ts                                  | 2 +-
 src/daemons/server-stats.ts                                 | 2 +-
 src/mfm/html-to-mfm.ts                                      | 2 +-
 src/mfm/html.ts                                             | 4 ++--
 src/misc/fa.ts                                              | 2 +-
 src/remote/activitypub/renderer/hashtag.ts                  | 2 +-
 src/server/activitypub.ts                                   | 2 +-
 src/server/api/endpoints.ts                                 | 2 +-
 src/server/api/stream/notes-stats.ts                        | 2 +-
 src/server/api/stream/server-stats.ts                       | 2 +-
 src/server/web/docs.ts                                      | 2 +-
 src/server/web/views/user.pug                               | 2 +-
 src/services/drive/add-file.ts                              | 2 +-
 webpack.config.ts                                           | 4 ++--
 40 files changed, 53 insertions(+), 53 deletions(-)

diff --git a/src/client/app/auth/views/index.vue b/src/client/app/auth/views/index.vue
index 609e758994..ba7df911e5 100644
--- a/src/client/app/auth/views/index.vue
+++ b/src/client/app/auth/views/index.vue
@@ -80,7 +80,7 @@ export default Vue.extend({
 		accepted() {
 			this.state = 'accepted';
 			if (this.session.app.callbackUrl) {
-				location.href = this.session.app.callbackUrl + '?token=' + this.session.token;
+				location.href = `${this.session.app.callbackUrl}?token=${this.session.token}`;
 			}
 		}
 	}
diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index 54397c98c6..dd2cf93a89 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -94,7 +94,7 @@
 
 	// Get salt query
 	const salt = localStorage.getItem('salt')
-		? '?salt=' + localStorage.getItem('salt')
+		? `?salt=${localStorage.getItem('salt')}`
 		: '';
 
 	// Load an app script
diff --git a/src/client/app/common/scripts/streaming/stream.ts b/src/client/app/common/scripts/streaming/stream.ts
index fefa8e5ced..4ab78f1190 100644
--- a/src/client/app/common/scripts/streaming/stream.ts
+++ b/src/client/app/common/scripts/streaming/stream.ts
@@ -44,11 +44,11 @@ export default class Connection extends EventEmitter {
 
 		const query = params
 			? Object.keys(params)
-				.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
+				.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
 				.join('&')
 			: null;
 
-		this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? '?' + query : ''}`);
+		this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? `?${query}` : ''}`);
 		this.socket.addEventListener('open', this.onOpen);
 		this.socket.addEventListener('close', this.onClose);
 		this.socket.addEventListener('message', this.onMessage);
diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index b274eaa0a0..ea05afd6dc 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -125,7 +125,7 @@ export default Vue.extend({
 			}
 
 			if (this.type == 'user') {
-				const cacheKey = 'autocomplete:user:' + this.q;
+				const cacheKey = `autocomplete:user:${this.q}`;
 				const cache = sessionStorage.getItem(cacheKey);
 				if (cache) {
 					const users = JSON.parse(cache);
@@ -148,7 +148,7 @@ export default Vue.extend({
 					this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
 					this.fetching = false;
 				} else {
-					const cacheKey = 'autocomplete:hashtag:' + this.q;
+					const cacheKey = `autocomplete:hashtag:${this.q}`;
 					const cache = sessionStorage.getItem(cacheKey);
 					if (cache) {
 						const hashtags = JSON.parse(cache);
diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
index 6c23cc7969..f64cae6b4b 100644
--- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue
+++ b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
@@ -57,7 +57,7 @@ export default Vue.extend({
 		}
 
 		// Check internet connection
-		fetch('https://google.com?rand=' + Math.random(), {
+		fetch(`https://google.com?rand=${Math.random()}`, {
 			mode: 'no-cors'
 		}).then(() => {
 			this.internet = true;
diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index d5dda0c80a..e182e7f8cb 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -170,7 +170,7 @@ export default Vue.extend({
 			return;
 		}
 
-		fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
+		fetch(`/url?url=${encodeURIComponent(this.url)}`).then(res => {
 			res.json().then(info => {
 				if (info.url == null) return;
 				this.title = info.title;
diff --git a/src/client/app/common/views/directives/autocomplete.ts b/src/client/app/common/views/directives/autocomplete.ts
index b252cf5c1f..26bc13871d 100644
--- a/src/client/app/common/views/directives/autocomplete.ts
+++ b/src/client/app/common/views/directives/autocomplete.ts
@@ -191,7 +191,7 @@ class Autocomplete {
 			const acct = renderAcct(value);
 
 			// 挿入
-			this.text = trimmedBefore + '@' + acct + ' ' + after;
+			this.text = `${trimmedBefore}@${acct} ${after}`;
 
 			// キャレットを戻す
 			this.vm.$nextTick(() => {
@@ -207,7 +207,7 @@ class Autocomplete {
 			const after = source.substr(caret);
 
 			// 挿入
-			this.text = trimmedBefore + '#' + value + ' ' + after;
+			this.text = `${trimmedBefore}#${value} ${after}`;
 
 			// キャレットを戻す
 			this.vm.$nextTick(() => {
diff --git a/src/client/app/common/views/filters/note.ts b/src/client/app/common/views/filters/note.ts
index a611dc8685..3c9c8b7485 100644
--- a/src/client/app/common/views/filters/note.ts
+++ b/src/client/app/common/views/filters/note.ts
@@ -1,5 +1,5 @@
 import Vue from 'vue';
 
 Vue.filter('notePage', note => {
-	return '/notes/' + note.id;
+	return `/notes/${note.id}`;
 });
diff --git a/src/client/app/common/views/filters/user.ts b/src/client/app/common/views/filters/user.ts
index ca0910fc53..e5220229b7 100644
--- a/src/client/app/common/views/filters/user.ts
+++ b/src/client/app/common/views/filters/user.ts
@@ -11,5 +11,5 @@ Vue.filter('userName', user => {
 });
 
 Vue.filter('userPage', (user, path?) => {
-	return '/@' + Vue.filter('acct')(user) + (path ? '/' + path : '');
+	return `/@${Vue.filter('acct')(user)}${(path ? `/${path}` : '')}`;
 });
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 13d855d20a..ec74b3a9b9 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
-	<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + myName + '</b>')"></div>
+	<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${myName}`)"></div>
 
 	<main>
 		<div class="banner" :style="bannerStyle"></div>
diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue
index 83880fef5c..e6b71f9426 100644
--- a/src/client/app/desktop/views/components/drive.folder.vue
+++ b/src/client/app/desktop/views/components/drive.folder.vue
@@ -163,7 +163,7 @@ export default Vue.extend({
 							});
 							break;
 						default:
-							alert('%i18n:@unhandled-error% ' + err);
+							alert(`%i18n:@unhandled-error% ${err}`);
 					}
 				});
 			}
diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index d919e4a5ea..cb289027d4 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -323,7 +323,7 @@ export default Vue.extend({
 							});
 							break;
 						default:
-							alert('%i18n:@unhandled-error% ' + err);
+							alert(`%i18n:@unhandled-error% ${err}`);
 					}
 				});
 			}
@@ -404,7 +404,7 @@ export default Vue.extend({
 					folder: folder
 				});
 			} else {
-				window.open(url + '/i/drive/folder/' + folder.id,
+				window.open(`${url}/i/drive/folder/${folder.id}`,
 					'drive_window',
 					'height=500, width=800');
 			}
diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 8b68f260fa..52d029a269 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 			const mouseY = e.clientY - rect.top;
 			const xp = mouseX / this.$el.offsetWidth * 100;
 			const yp = mouseY / this.$el.offsetHeight * 100;
-			this.$el.style.backgroundPosition = xp + '% ' + yp + '%';
+			this.$el.style.backgroundPosition = `${xp}% ${yp}%';
 			this.$el.style.backgroundImage = `url("${this.image.url}")`;
 		},
 
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index bacaea65ee..eb8b40062a 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -110,9 +110,9 @@ export default Vue.extend({
 	computed: {
 		draftId(): string {
 			return this.renote
-				? 'renote:' + this.renote.id
+				? `renote:${this.renote.id}`
 				: this.reply
-					? 'reply:' + this.reply.id
+					? `reply:${this.reply.id}`
 					: 'note';
 		},
 
@@ -313,7 +313,7 @@ export default Vue.extend({
 				this.geo = pos.coords;
 				this.$emit('geo-attached', this.geo);
 			}, err => {
-				alert('%i18n:@error%: ' + err.message);
+				alert(`%i18n:@error%: ${err.message}`);
 			}, {
 					enableHighAccuracy: true
 				});
diff --git a/src/client/app/desktop/views/pages/drive.vue b/src/client/app/desktop/views/pages/drive.vue
index 217dcb7751..dec6c4551a 100644
--- a/src/client/app/desktop/views/pages/drive.vue
+++ b/src/client/app/desktop/views/pages/drive.vue
@@ -31,7 +31,7 @@ export default Vue.extend({
 			const title = folder.name + ' | %i18n:@title%';
 
 			// Rewrite URL
-			history.pushState(null, title, '/i/drive/folder/' + folder.id);
+			history.pushState(null, title, `/i/drive/folder/${folder.id}`);
 
 			document.title = title;
 		}
diff --git a/src/client/app/desktop/views/pages/games/reversi.vue b/src/client/app/desktop/views/pages/games/reversi.vue
index ce9b42c65f..1b0e790a22 100644
--- a/src/client/app/desktop/views/pages/games/reversi.vue
+++ b/src/client/app/desktop/views/pages/games/reversi.vue
@@ -16,10 +16,10 @@ export default Vue.extend({
 	methods: {
 		nav(game, actualNav) {
 			if (actualNav) {
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			} else {
 				// TODO: https://github.com/vuejs/vue-router/issues/703
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			}
 		}
 	}
diff --git a/src/client/app/desktop/views/pages/messaging-room.vue b/src/client/app/desktop/views/pages/messaging-room.vue
index 1ebd53cef4..4be33dda04 100644
--- a/src/client/app/desktop/views/pages/messaging-room.vue
+++ b/src/client/app/desktop/views/pages/messaging-room.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = 'メッセージ: ' + getUserName(this.user);
+				document.title = `メッセージ: ${getUserName(this.user)}`;
 
 				Progress.done();
 			});
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index b076cae26d..8b1f7b08c8 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -105,9 +105,9 @@ export default Vue.extend({
 	computed: {
 		draftId(): string {
 			return this.renote
-				? 'renote:' + this.renote.id
+				? `renote:${this.renote.id}`
 				: this.reply
-					? 'reply:' + this.reply.id
+					? `reply:${this.reply.id}`
 					: 'note';
 		},
 
@@ -229,7 +229,7 @@ export default Vue.extend({
 			navigator.geolocation.getCurrentPosition(pos => {
 				this.geo = pos.coords;
 			}, err => {
-				alert('%i18n:@error%: ' + err.message);
+				alert(`%i18n:@error%: ${err.message}`);
 			}, {
 					enableHighAccuracy: true
 				});
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 39ea513b76..54eed1b6d4 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -82,7 +82,7 @@ export default Vue.extend({
 		search() {
 			const query = window.prompt('%i18n:@search%');
 			if (query == null || query == '') return;
-			this.$router.push('/search?q=' + encodeURIComponent(query));
+			this.$router.push(`/search?q=${encodeURIComponent(query)}`);
 		},
 		onReversiInvited() {
 			this.hasGameInvitation = true;
diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue
index 657f43c7c3..27ac956043 100644
--- a/src/client/app/mobile/views/pages/drive.vue
+++ b/src/client/app/mobile/views/pages/drive.vue
@@ -80,7 +80,7 @@ export default Vue.extend({
 
 			if (!silent) {
 				// Rewrite URL
-				history.pushState(null, title, '/i/drive/folder/' + folder.id);
+				history.pushState(null, title, `/i/drive/folder/${folder.id}`);
 			}
 
 			document.title = title;
@@ -93,7 +93,7 @@ export default Vue.extend({
 
 			if (!silent) {
 				// Rewrite URL
-				history.pushState(null, title, '/i/drive/file/' + file.id);
+				history.pushState(null, title, `/i/drive/file/${file.id}`);
 			}
 
 			document.title = title;
diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue
index 421c150856..601f6670c1 100644
--- a/src/client/app/mobile/views/pages/followers.vue
+++ b/src/client/app/mobile/views/pages/followers.vue
@@ -49,7 +49,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName;
+				document.title = `${'%i18n:@followers-of%'.replace('{}', this.name)} | ${(this as any).os.instanceName}`;
 			});
 		},
 		onLoaded() {
diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue
index ff201ff2bd..0efac6110e 100644
--- a/src/client/app/mobile/views/pages/following.vue
+++ b/src/client/app/mobile/views/pages/following.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName;
+				document.title = `${'%i18n:@followers-of%'.replace('{}', this.name)} | ${(this as any).os.instanceName}`;
 			});
 		},
 		onLoaded() {
diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue
index d6849a1c11..bdadc88a43 100644
--- a/src/client/app/mobile/views/pages/games/reversi.vue
+++ b/src/client/app/mobile/views/pages/games/reversi.vue
@@ -16,10 +16,10 @@ export default Vue.extend({
 	methods: {
 		nav(game, actualNav) {
 			if (actualNav) {
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			} else {
 				// TODO: https://github.com/vuejs/vue-router/issues/703
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			}
 		}
 	}
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 7437eb8b47..838ffd2a6b 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -2,7 +2,7 @@
 <mk-ui>
 	<span slot="header">%fa:cog%%i18n:@settings%</span>
 	<main :data-darkmode="$store.state.device.darkmode">
-		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + name + '</b>')"></div>
+		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div>
 
 		<div>
 			<x-profile/>
diff --git a/src/client/app/mobile/views/pages/user-lists.vue b/src/client/app/mobile/views/pages/user-lists.vue
index abd04c1496..5ee0636dea 100644
--- a/src/client/app/mobile/views/pages/user-lists.vue
+++ b/src/client/app/mobile/views/pages/user-lists.vue
@@ -43,7 +43,7 @@ export default Vue.extend({
 					title
 				});
 
-				this.$router.push('/i/lists/' + list.id);
+				this.$router.push(`/i/lists/${list.id}`);
 			});
 		}
 	}
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index 8918847a8f..ddea43c9f2 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -107,7 +107,7 @@ export default Vue.extend({
 				this.fetching = false;
 
 				Progress.done();
-				document.title = Vue.filter('userName')(this.user) + ' | ' + (this as any).os.instanceName;
+				document.title = `${Vue.filter('userName')(this.user)} | ${(this as any).os.instanceName}`;
 			});
 		}
 	}
diff --git a/src/daemons/notes-stats.ts b/src/daemons/notes-stats.ts
index 3d2c4820a6..bddb54cfa5 100644
--- a/src/daemons/notes-stats.ts
+++ b/src/daemons/notes-stats.ts
@@ -16,7 +16,7 @@ export default function() {
 	});
 
 	ev.on('requestNotesStatsLog', id => {
-		ev.emit('notesStatsLog:' + id, log.toArray());
+		ev.emit(`notesStatsLog:${id}`, log.toArray());
 	});
 
 	process.on('exit', code => {
diff --git a/src/daemons/server-stats.ts b/src/daemons/server-stats.ts
index 4a653f81f4..9bb43fe84e 100644
--- a/src/daemons/server-stats.ts
+++ b/src/daemons/server-stats.ts
@@ -16,7 +16,7 @@ export default function() {
 	const log = new Deque<any>();
 
 	ev.on('requestServerStatsLog', x => {
-		ev.emit('serverStatsLog:' + x.id, log.toArray().slice(0, x.length || 50));
+		ev.emit(`serverStatsLog:${x.id}`, log.toArray().slice(0, x.length || 50));
 	});
 
 	async function tick() {
diff --git a/src/mfm/html-to-mfm.ts b/src/mfm/html-to-mfm.ts
index e2681f5447..b476a9af5c 100644
--- a/src/mfm/html-to-mfm.ts
+++ b/src/mfm/html-to-mfm.ts
@@ -45,7 +45,7 @@ export default function(html: string): string {
 
 					if (part.length == 2) {
 						//#region ホスト名部分が省略されているので復元する
-						const acct = txt + '@' + (new URL(href.value)).hostname;
+						const acct = `${txt}@${(new URL(href.value)).hostname}`;
 						text += acct;
 						break;
 						//#endregion
diff --git a/src/mfm/html.ts b/src/mfm/html.ts
index c798ee410a..2e38fe10a0 100644
--- a/src/mfm/html.ts
+++ b/src/mfm/html.ts
@@ -44,8 +44,8 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
 
 	hashtag({ document }, { hashtag }) {
 		const a = document.createElement('a');
-		a.href = config.url + '/tags/' + hashtag;
-		a.textContent = '#' + hashtag;
+		a.href = `${config.url}/tags/${hashtag}`;
+		a.textContent = `#${hashtag}`;
 		a.setAttribute('rel', 'tag');
 		document.body.appendChild(a);
 	},
diff --git a/src/misc/fa.ts b/src/misc/fa.ts
index 8be06362c3..90cdac89b2 100644
--- a/src/misc/fa.ts
+++ b/src/misc/fa.ts
@@ -26,7 +26,7 @@ export const replacement = (match: string, key: string) => {
 				arg == 'B' ? 'fab' :
 				'';
 		} else if (arg.startsWith('.')) {
-			classes.push('fa-' + arg.substr(1));
+			classes.push(`fa-${arg.substr(1)}`);
 		} else if (arg.startsWith('-')) {
 			transform = arg.substr(1).split('|').join(' ');
 		} else {
diff --git a/src/remote/activitypub/renderer/hashtag.ts b/src/remote/activitypub/renderer/hashtag.ts
index a37ba63532..36563c2df5 100644
--- a/src/remote/activitypub/renderer/hashtag.ts
+++ b/src/remote/activitypub/renderer/hashtag.ts
@@ -3,5 +3,5 @@ import config from '../../../config';
 export default (tag: string) => ({
 	type: 'Hashtag',
 	href: `${config.url}/tags/${encodeURIComponent(tag)}`,
-	name: '#' + tag
+	name: `#${tag}`
 });
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index 1007790ca6..f04f9e91e9 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -22,7 +22,7 @@ const router = new Router();
 function inbox(ctx: Router.IRouterContext) {
 	let signature;
 
-	ctx.req.headers.authorization = 'Signature ' + ctx.req.headers.signature;
+	ctx.req.headers.authorization = `Signature ${ctx.req.headers.signature}`;
 
 	try {
 		signature = httpSignature.parseRequest(ctx.req, { 'headers': [] });
diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts
index d4a44070e6..2b00094269 100644
--- a/src/server/api/endpoints.ts
+++ b/src/server/api/endpoints.ts
@@ -79,7 +79,7 @@ const files = glob.sync('**/*.js', {
 });
 
 const endpoints: IEndpoint[] = files.map(f => {
-	const ep = require('./endpoints/' + f);
+	const ep = require(`./endpoints/${f}`);
 
 	return {
 		name: f.replace('.js', ''),
diff --git a/src/server/api/stream/notes-stats.ts b/src/server/api/stream/notes-stats.ts
index ab00620018..ba99403226 100644
--- a/src/server/api/stream/notes-stats.ts
+++ b/src/server/api/stream/notes-stats.ts
@@ -16,7 +16,7 @@ export default function(request: websocket.request, connection: websocket.connec
 
 		switch (msg.type) {
 			case 'requestLog':
-				ev.once('notesStatsLog:' + msg.id, statsLog => {
+				ev.once(`notesStatsLog:${msg.id}`, statsLog => {
 					connection.send(JSON.stringify({
 						type: 'statsLog',
 						body: statsLog
diff --git a/src/server/api/stream/server-stats.ts b/src/server/api/stream/server-stats.ts
index f6c1f14ebe..d4fbeefa04 100644
--- a/src/server/api/stream/server-stats.ts
+++ b/src/server/api/stream/server-stats.ts
@@ -16,7 +16,7 @@ export default function(request: websocket.request, connection: websocket.connec
 
 		switch (msg.type) {
 			case 'requestLog':
-				ev.once('serverStatsLog:' + msg.id, statsLog => {
+				ev.once(`serverStatsLog:${msg.id}`, statsLog => {
 					connection.send(JSON.stringify({
 						type: 'statsLog',
 						body: statsLog
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index 81e5ace3e8..14ccbdd04f 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -196,7 +196,7 @@ router.get('/*/api/entities/*', async ctx => {
 	const lang = ctx.params[0];
 	const entity = ctx.params[1];
 
-	const x = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname + '/../../../src/docs/api/entities/' + entity + '.yaml'), 'utf-8')) as any;
+	const x = yaml.safeLoad(fs.readFileSync(path.resolve(`${__dirname}/../../../src/docs/api/entities/${entity}.yaml`), 'utf-8')) as any;
 
 	await ctx.render('../../../../src/docs/api/entities/view', Object.assign(await genVars(lang), {
 		id: `api/entities/${entity}`,
diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug
index b5ea2f6eb4..98a53ab549 100644
--- a/src/server/web/views/user.pug
+++ b/src/server/web/views/user.pug
@@ -2,7 +2,7 @@ extends ../../../../src/client/app/base
 
 block vars
 	- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
-	- const url = config.url + '/@' + (user.host ? `${user.username}@${user.host}` : user.username);
+	- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
 	- const img = user.avatarId ? `${config.drive_url}/${user.avatarId}` : null;
 
 block title
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 1da0f49a24..d1c7051ab0 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -40,7 +40,7 @@ async function save(path: string, name: string, type: string, hash: string, size
 		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
 
 		const baseUrl = config.drive.baseUrl
-			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? ':' + config.drive.config.port : '' }/${ config.drive.bucket }`;
+			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;
 
 		await minio.putObject(config.drive.bucket, key, fs.createReadStream(path), size, {
 			'Content-Type': type,
diff --git a/webpack.config.ts b/webpack.config.ts
index ad67530f51..341d4c7022 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -20,7 +20,7 @@ const constants = require('./src/const.json');
 
 const locales = require('./locales');
 const meta = require('./package.json');
-const version = meta.clientVersion + '-' + rndstr({ length: 8, chars: '0-9a-z' });
+const version = `${meta.clientVersion}-${rndstr({ length: 8, chars: '0-9a-z' })}`;
 const codename = meta.codename;
 
 declare var global: {
@@ -42,7 +42,7 @@ global['collapseSpacesReplacement'] = (html: string) => {
 };
 
 global['base64replacement'] = (_: any, key: string) => {
-	return fs.readFileSync(__dirname + '/src/client/' + key, 'base64');
+	return fs.readFileSync(`${__dirname}/src/client/${key}`, 'base64');
 };
 
 global['i18nReplacement'] = i18nReplacement;

From d8dcc4da275230e332fad0eb6ce09703d08aec30 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 23:12:51 +0900
Subject: [PATCH 053/539] Use string interpolation

---
 src/client/app/auth/views/index.vue                         | 2 +-
 src/client/app/boot.js                                      | 2 +-
 src/client/app/common/scripts/streaming/stream.ts           | 4 ++--
 src/client/app/common/views/components/autocomplete.vue     | 4 ++--
 .../views/components/connect-failed.troubleshooter.vue      | 2 +-
 src/client/app/common/views/components/url-preview.vue      | 2 +-
 src/client/app/common/views/directives/autocomplete.ts      | 4 ++--
 src/client/app/common/views/filters/note.ts                 | 2 +-
 src/client/app/common/views/filters/user.ts                 | 2 +-
 src/client/app/common/views/pages/follow.vue                | 2 +-
 src/client/app/desktop/views/components/drive.folder.vue    | 2 +-
 src/client/app/desktop/views/components/drive.vue           | 4 ++--
 src/client/app/desktop/views/components/media-image.vue     | 2 +-
 src/client/app/desktop/views/components/post-form.vue       | 6 +++---
 src/client/app/desktop/views/pages/drive.vue                | 2 +-
 src/client/app/desktop/views/pages/games/reversi.vue        | 4 ++--
 src/client/app/desktop/views/pages/messaging-room.vue       | 2 +-
 src/client/app/mobile/views/components/post-form.vue        | 6 +++---
 src/client/app/mobile/views/components/ui.nav.vue           | 2 +-
 src/client/app/mobile/views/pages/drive.vue                 | 4 ++--
 src/client/app/mobile/views/pages/followers.vue             | 2 +-
 src/client/app/mobile/views/pages/following.vue             | 2 +-
 src/client/app/mobile/views/pages/games/reversi.vue         | 4 ++--
 src/client/app/mobile/views/pages/settings.vue              | 2 +-
 src/client/app/mobile/views/pages/user-lists.vue            | 2 +-
 src/client/app/mobile/views/pages/user.vue                  | 2 +-
 src/daemons/notes-stats.ts                                  | 2 +-
 src/daemons/server-stats.ts                                 | 2 +-
 src/mfm/html-to-mfm.ts                                      | 2 +-
 src/mfm/html.ts                                             | 4 ++--
 src/misc/fa.ts                                              | 2 +-
 src/remote/activitypub/renderer/hashtag.ts                  | 2 +-
 src/server/activitypub.ts                                   | 2 +-
 src/server/api/endpoints.ts                                 | 2 +-
 src/server/api/stream/notes-stats.ts                        | 2 +-
 src/server/api/stream/server-stats.ts                       | 2 +-
 src/server/web/docs.ts                                      | 2 +-
 src/server/web/views/user.pug                               | 2 +-
 src/services/drive/add-file.ts                              | 2 +-
 webpack.config.ts                                           | 4 ++--
 40 files changed, 53 insertions(+), 53 deletions(-)

diff --git a/src/client/app/auth/views/index.vue b/src/client/app/auth/views/index.vue
index 609e758994..ba7df911e5 100644
--- a/src/client/app/auth/views/index.vue
+++ b/src/client/app/auth/views/index.vue
@@ -80,7 +80,7 @@ export default Vue.extend({
 		accepted() {
 			this.state = 'accepted';
 			if (this.session.app.callbackUrl) {
-				location.href = this.session.app.callbackUrl + '?token=' + this.session.token;
+				location.href = `${this.session.app.callbackUrl}?token=${this.session.token}`;
 			}
 		}
 	}
diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index 54397c98c6..dd2cf93a89 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -94,7 +94,7 @@
 
 	// Get salt query
 	const salt = localStorage.getItem('salt')
-		? '?salt=' + localStorage.getItem('salt')
+		? `?salt=${localStorage.getItem('salt')}`
 		: '';
 
 	// Load an app script
diff --git a/src/client/app/common/scripts/streaming/stream.ts b/src/client/app/common/scripts/streaming/stream.ts
index fefa8e5ced..4ab78f1190 100644
--- a/src/client/app/common/scripts/streaming/stream.ts
+++ b/src/client/app/common/scripts/streaming/stream.ts
@@ -44,11 +44,11 @@ export default class Connection extends EventEmitter {
 
 		const query = params
 			? Object.keys(params)
-				.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
+				.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
 				.join('&')
 			: null;
 
-		this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? '?' + query : ''}`);
+		this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? `?${query}` : ''}`);
 		this.socket.addEventListener('open', this.onOpen);
 		this.socket.addEventListener('close', this.onClose);
 		this.socket.addEventListener('message', this.onMessage);
diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index b274eaa0a0..ea05afd6dc 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -125,7 +125,7 @@ export default Vue.extend({
 			}
 
 			if (this.type == 'user') {
-				const cacheKey = 'autocomplete:user:' + this.q;
+				const cacheKey = `autocomplete:user:${this.q}`;
 				const cache = sessionStorage.getItem(cacheKey);
 				if (cache) {
 					const users = JSON.parse(cache);
@@ -148,7 +148,7 @@ export default Vue.extend({
 					this.hashtags = JSON.parse(localStorage.getItem('hashtags') || '[]');
 					this.fetching = false;
 				} else {
-					const cacheKey = 'autocomplete:hashtag:' + this.q;
+					const cacheKey = `autocomplete:hashtag:${this.q}`;
 					const cache = sessionStorage.getItem(cacheKey);
 					if (cache) {
 						const hashtags = JSON.parse(cache);
diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
index 6c23cc7969..f64cae6b4b 100644
--- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue
+++ b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
@@ -57,7 +57,7 @@ export default Vue.extend({
 		}
 
 		// Check internet connection
-		fetch('https://google.com?rand=' + Math.random(), {
+		fetch(`https://google.com?rand=${Math.random()}`, {
 			mode: 'no-cors'
 		}).then(() => {
 			this.internet = true;
diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index d5dda0c80a..e182e7f8cb 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -170,7 +170,7 @@ export default Vue.extend({
 			return;
 		}
 
-		fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
+		fetch(`/url?url=${encodeURIComponent(this.url)}`).then(res => {
 			res.json().then(info => {
 				if (info.url == null) return;
 				this.title = info.title;
diff --git a/src/client/app/common/views/directives/autocomplete.ts b/src/client/app/common/views/directives/autocomplete.ts
index b252cf5c1f..26bc13871d 100644
--- a/src/client/app/common/views/directives/autocomplete.ts
+++ b/src/client/app/common/views/directives/autocomplete.ts
@@ -191,7 +191,7 @@ class Autocomplete {
 			const acct = renderAcct(value);
 
 			// 挿入
-			this.text = trimmedBefore + '@' + acct + ' ' + after;
+			this.text = `${trimmedBefore}@${acct} ${after}`;
 
 			// キャレットを戻す
 			this.vm.$nextTick(() => {
@@ -207,7 +207,7 @@ class Autocomplete {
 			const after = source.substr(caret);
 
 			// 挿入
-			this.text = trimmedBefore + '#' + value + ' ' + after;
+			this.text = `${trimmedBefore}#${value} ${after}`;
 
 			// キャレットを戻す
 			this.vm.$nextTick(() => {
diff --git a/src/client/app/common/views/filters/note.ts b/src/client/app/common/views/filters/note.ts
index a611dc8685..3c9c8b7485 100644
--- a/src/client/app/common/views/filters/note.ts
+++ b/src/client/app/common/views/filters/note.ts
@@ -1,5 +1,5 @@
 import Vue from 'vue';
 
 Vue.filter('notePage', note => {
-	return '/notes/' + note.id;
+	return `/notes/${note.id}`;
 });
diff --git a/src/client/app/common/views/filters/user.ts b/src/client/app/common/views/filters/user.ts
index ca0910fc53..e5220229b7 100644
--- a/src/client/app/common/views/filters/user.ts
+++ b/src/client/app/common/views/filters/user.ts
@@ -11,5 +11,5 @@ Vue.filter('userName', user => {
 });
 
 Vue.filter('userPage', (user, path?) => {
-	return '/@' + Vue.filter('acct')(user) + (path ? '/' + path : '');
+	return `/@${Vue.filter('acct')(user)}${(path ? `/${path}` : '')}`;
 });
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 13d855d20a..ec74b3a9b9 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
-	<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + myName + '</b>')"></div>
+	<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${myName}`)"></div>
 
 	<main>
 		<div class="banner" :style="bannerStyle"></div>
diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue
index 83880fef5c..e6b71f9426 100644
--- a/src/client/app/desktop/views/components/drive.folder.vue
+++ b/src/client/app/desktop/views/components/drive.folder.vue
@@ -163,7 +163,7 @@ export default Vue.extend({
 							});
 							break;
 						default:
-							alert('%i18n:@unhandled-error% ' + err);
+							alert(`%i18n:@unhandled-error% ${err}`);
 					}
 				});
 			}
diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index d919e4a5ea..cb289027d4 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -323,7 +323,7 @@ export default Vue.extend({
 							});
 							break;
 						default:
-							alert('%i18n:@unhandled-error% ' + err);
+							alert(`%i18n:@unhandled-error% ${err}`);
 					}
 				});
 			}
@@ -404,7 +404,7 @@ export default Vue.extend({
 					folder: folder
 				});
 			} else {
-				window.open(url + '/i/drive/folder/' + folder.id,
+				window.open(`${url}/i/drive/folder/${folder.id}`,
 					'drive_window',
 					'height=500, width=800');
 			}
diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 8b68f260fa..52d029a269 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 			const mouseY = e.clientY - rect.top;
 			const xp = mouseX / this.$el.offsetWidth * 100;
 			const yp = mouseY / this.$el.offsetHeight * 100;
-			this.$el.style.backgroundPosition = xp + '% ' + yp + '%';
+			this.$el.style.backgroundPosition = `${xp}% ${yp}%';
 			this.$el.style.backgroundImage = `url("${this.image.url}")`;
 		},
 
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index bacaea65ee..eb8b40062a 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -110,9 +110,9 @@ export default Vue.extend({
 	computed: {
 		draftId(): string {
 			return this.renote
-				? 'renote:' + this.renote.id
+				? `renote:${this.renote.id}`
 				: this.reply
-					? 'reply:' + this.reply.id
+					? `reply:${this.reply.id}`
 					: 'note';
 		},
 
@@ -313,7 +313,7 @@ export default Vue.extend({
 				this.geo = pos.coords;
 				this.$emit('geo-attached', this.geo);
 			}, err => {
-				alert('%i18n:@error%: ' + err.message);
+				alert(`%i18n:@error%: ${err.message}`);
 			}, {
 					enableHighAccuracy: true
 				});
diff --git a/src/client/app/desktop/views/pages/drive.vue b/src/client/app/desktop/views/pages/drive.vue
index 217dcb7751..dec6c4551a 100644
--- a/src/client/app/desktop/views/pages/drive.vue
+++ b/src/client/app/desktop/views/pages/drive.vue
@@ -31,7 +31,7 @@ export default Vue.extend({
 			const title = folder.name + ' | %i18n:@title%';
 
 			// Rewrite URL
-			history.pushState(null, title, '/i/drive/folder/' + folder.id);
+			history.pushState(null, title, `/i/drive/folder/${folder.id}`);
 
 			document.title = title;
 		}
diff --git a/src/client/app/desktop/views/pages/games/reversi.vue b/src/client/app/desktop/views/pages/games/reversi.vue
index ce9b42c65f..1b0e790a22 100644
--- a/src/client/app/desktop/views/pages/games/reversi.vue
+++ b/src/client/app/desktop/views/pages/games/reversi.vue
@@ -16,10 +16,10 @@ export default Vue.extend({
 	methods: {
 		nav(game, actualNav) {
 			if (actualNav) {
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			} else {
 				// TODO: https://github.com/vuejs/vue-router/issues/703
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			}
 		}
 	}
diff --git a/src/client/app/desktop/views/pages/messaging-room.vue b/src/client/app/desktop/views/pages/messaging-room.vue
index 1ebd53cef4..4be33dda04 100644
--- a/src/client/app/desktop/views/pages/messaging-room.vue
+++ b/src/client/app/desktop/views/pages/messaging-room.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = 'メッセージ: ' + getUserName(this.user);
+				document.title = `メッセージ: ${getUserName(this.user)}`;
 
 				Progress.done();
 			});
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index b076cae26d..8b1f7b08c8 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -105,9 +105,9 @@ export default Vue.extend({
 	computed: {
 		draftId(): string {
 			return this.renote
-				? 'renote:' + this.renote.id
+				? `renote:${this.renote.id}`
 				: this.reply
-					? 'reply:' + this.reply.id
+					? `reply:${this.reply.id}`
 					: 'note';
 		},
 
@@ -229,7 +229,7 @@ export default Vue.extend({
 			navigator.geolocation.getCurrentPosition(pos => {
 				this.geo = pos.coords;
 			}, err => {
-				alert('%i18n:@error%: ' + err.message);
+				alert(`%i18n:@error%: ${err.message}`);
 			}, {
 					enableHighAccuracy: true
 				});
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 39ea513b76..54eed1b6d4 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -82,7 +82,7 @@ export default Vue.extend({
 		search() {
 			const query = window.prompt('%i18n:@search%');
 			if (query == null || query == '') return;
-			this.$router.push('/search?q=' + encodeURIComponent(query));
+			this.$router.push(`/search?q=${encodeURIComponent(query)}`);
 		},
 		onReversiInvited() {
 			this.hasGameInvitation = true;
diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue
index 657f43c7c3..27ac956043 100644
--- a/src/client/app/mobile/views/pages/drive.vue
+++ b/src/client/app/mobile/views/pages/drive.vue
@@ -80,7 +80,7 @@ export default Vue.extend({
 
 			if (!silent) {
 				// Rewrite URL
-				history.pushState(null, title, '/i/drive/folder/' + folder.id);
+				history.pushState(null, title, `/i/drive/folder/${folder.id}`);
 			}
 
 			document.title = title;
@@ -93,7 +93,7 @@ export default Vue.extend({
 
 			if (!silent) {
 				// Rewrite URL
-				history.pushState(null, title, '/i/drive/file/' + file.id);
+				history.pushState(null, title, `/i/drive/file/${file.id}`);
 			}
 
 			document.title = title;
diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue
index 421c150856..601f6670c1 100644
--- a/src/client/app/mobile/views/pages/followers.vue
+++ b/src/client/app/mobile/views/pages/followers.vue
@@ -49,7 +49,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName;
+				document.title = `${'%i18n:@followers-of%'.replace('{}', this.name)} | ${(this as any).os.instanceName}`;
 			});
 		},
 		onLoaded() {
diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue
index ff201ff2bd..0efac6110e 100644
--- a/src/client/app/mobile/views/pages/following.vue
+++ b/src/client/app/mobile/views/pages/following.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 				this.user = user;
 				this.fetching = false;
 
-				document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName;
+				document.title = `${'%i18n:@followers-of%'.replace('{}', this.name)} | ${(this as any).os.instanceName}`;
 			});
 		},
 		onLoaded() {
diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue
index d6849a1c11..bdadc88a43 100644
--- a/src/client/app/mobile/views/pages/games/reversi.vue
+++ b/src/client/app/mobile/views/pages/games/reversi.vue
@@ -16,10 +16,10 @@ export default Vue.extend({
 	methods: {
 		nav(game, actualNav) {
 			if (actualNav) {
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			} else {
 				// TODO: https://github.com/vuejs/vue-router/issues/703
-				this.$router.push('/reversi/' + game.id);
+				this.$router.push(`/reversi/${game.id}`);
 			}
 		}
 	}
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 7437eb8b47..838ffd2a6b 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -2,7 +2,7 @@
 <mk-ui>
 	<span slot="header">%fa:cog%%i18n:@settings%</span>
 	<main :data-darkmode="$store.state.device.darkmode">
-		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', '<b>' + name + '</b>')"></div>
+		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div>
 
 		<div>
 			<x-profile/>
diff --git a/src/client/app/mobile/views/pages/user-lists.vue b/src/client/app/mobile/views/pages/user-lists.vue
index abd04c1496..5ee0636dea 100644
--- a/src/client/app/mobile/views/pages/user-lists.vue
+++ b/src/client/app/mobile/views/pages/user-lists.vue
@@ -43,7 +43,7 @@ export default Vue.extend({
 					title
 				});
 
-				this.$router.push('/i/lists/' + list.id);
+				this.$router.push(`/i/lists/${list.id}`);
 			});
 		}
 	}
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index 8918847a8f..ddea43c9f2 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -107,7 +107,7 @@ export default Vue.extend({
 				this.fetching = false;
 
 				Progress.done();
-				document.title = Vue.filter('userName')(this.user) + ' | ' + (this as any).os.instanceName;
+				document.title = `${Vue.filter('userName')(this.user)} | ${(this as any).os.instanceName}`;
 			});
 		}
 	}
diff --git a/src/daemons/notes-stats.ts b/src/daemons/notes-stats.ts
index 3d2c4820a6..bddb54cfa5 100644
--- a/src/daemons/notes-stats.ts
+++ b/src/daemons/notes-stats.ts
@@ -16,7 +16,7 @@ export default function() {
 	});
 
 	ev.on('requestNotesStatsLog', id => {
-		ev.emit('notesStatsLog:' + id, log.toArray());
+		ev.emit(`notesStatsLog:${id}`, log.toArray());
 	});
 
 	process.on('exit', code => {
diff --git a/src/daemons/server-stats.ts b/src/daemons/server-stats.ts
index 4a653f81f4..9bb43fe84e 100644
--- a/src/daemons/server-stats.ts
+++ b/src/daemons/server-stats.ts
@@ -16,7 +16,7 @@ export default function() {
 	const log = new Deque<any>();
 
 	ev.on('requestServerStatsLog', x => {
-		ev.emit('serverStatsLog:' + x.id, log.toArray().slice(0, x.length || 50));
+		ev.emit(`serverStatsLog:${x.id}`, log.toArray().slice(0, x.length || 50));
 	});
 
 	async function tick() {
diff --git a/src/mfm/html-to-mfm.ts b/src/mfm/html-to-mfm.ts
index e2681f5447..b476a9af5c 100644
--- a/src/mfm/html-to-mfm.ts
+++ b/src/mfm/html-to-mfm.ts
@@ -45,7 +45,7 @@ export default function(html: string): string {
 
 					if (part.length == 2) {
 						//#region ホスト名部分が省略されているので復元する
-						const acct = txt + '@' + (new URL(href.value)).hostname;
+						const acct = `${txt}@${(new URL(href.value)).hostname}`;
 						text += acct;
 						break;
 						//#endregion
diff --git a/src/mfm/html.ts b/src/mfm/html.ts
index c798ee410a..2e38fe10a0 100644
--- a/src/mfm/html.ts
+++ b/src/mfm/html.ts
@@ -44,8 +44,8 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
 
 	hashtag({ document }, { hashtag }) {
 		const a = document.createElement('a');
-		a.href = config.url + '/tags/' + hashtag;
-		a.textContent = '#' + hashtag;
+		a.href = `${config.url}/tags/${hashtag}`;
+		a.textContent = `#${hashtag}`;
 		a.setAttribute('rel', 'tag');
 		document.body.appendChild(a);
 	},
diff --git a/src/misc/fa.ts b/src/misc/fa.ts
index 8be06362c3..90cdac89b2 100644
--- a/src/misc/fa.ts
+++ b/src/misc/fa.ts
@@ -26,7 +26,7 @@ export const replacement = (match: string, key: string) => {
 				arg == 'B' ? 'fab' :
 				'';
 		} else if (arg.startsWith('.')) {
-			classes.push('fa-' + arg.substr(1));
+			classes.push(`fa-${arg.substr(1)}`);
 		} else if (arg.startsWith('-')) {
 			transform = arg.substr(1).split('|').join(' ');
 		} else {
diff --git a/src/remote/activitypub/renderer/hashtag.ts b/src/remote/activitypub/renderer/hashtag.ts
index a37ba63532..36563c2df5 100644
--- a/src/remote/activitypub/renderer/hashtag.ts
+++ b/src/remote/activitypub/renderer/hashtag.ts
@@ -3,5 +3,5 @@ import config from '../../../config';
 export default (tag: string) => ({
 	type: 'Hashtag',
 	href: `${config.url}/tags/${encodeURIComponent(tag)}`,
-	name: '#' + tag
+	name: `#${tag}`
 });
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index 1007790ca6..f04f9e91e9 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -22,7 +22,7 @@ const router = new Router();
 function inbox(ctx: Router.IRouterContext) {
 	let signature;
 
-	ctx.req.headers.authorization = 'Signature ' + ctx.req.headers.signature;
+	ctx.req.headers.authorization = `Signature ${ctx.req.headers.signature}`;
 
 	try {
 		signature = httpSignature.parseRequest(ctx.req, { 'headers': [] });
diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts
index d4a44070e6..2b00094269 100644
--- a/src/server/api/endpoints.ts
+++ b/src/server/api/endpoints.ts
@@ -79,7 +79,7 @@ const files = glob.sync('**/*.js', {
 });
 
 const endpoints: IEndpoint[] = files.map(f => {
-	const ep = require('./endpoints/' + f);
+	const ep = require(`./endpoints/${f}`);
 
 	return {
 		name: f.replace('.js', ''),
diff --git a/src/server/api/stream/notes-stats.ts b/src/server/api/stream/notes-stats.ts
index ab00620018..ba99403226 100644
--- a/src/server/api/stream/notes-stats.ts
+++ b/src/server/api/stream/notes-stats.ts
@@ -16,7 +16,7 @@ export default function(request: websocket.request, connection: websocket.connec
 
 		switch (msg.type) {
 			case 'requestLog':
-				ev.once('notesStatsLog:' + msg.id, statsLog => {
+				ev.once(`notesStatsLog:${msg.id}`, statsLog => {
 					connection.send(JSON.stringify({
 						type: 'statsLog',
 						body: statsLog
diff --git a/src/server/api/stream/server-stats.ts b/src/server/api/stream/server-stats.ts
index f6c1f14ebe..d4fbeefa04 100644
--- a/src/server/api/stream/server-stats.ts
+++ b/src/server/api/stream/server-stats.ts
@@ -16,7 +16,7 @@ export default function(request: websocket.request, connection: websocket.connec
 
 		switch (msg.type) {
 			case 'requestLog':
-				ev.once('serverStatsLog:' + msg.id, statsLog => {
+				ev.once(`serverStatsLog:${msg.id}`, statsLog => {
 					connection.send(JSON.stringify({
 						type: 'statsLog',
 						body: statsLog
diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index 81e5ace3e8..14ccbdd04f 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -196,7 +196,7 @@ router.get('/*/api/entities/*', async ctx => {
 	const lang = ctx.params[0];
 	const entity = ctx.params[1];
 
-	const x = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname + '/../../../src/docs/api/entities/' + entity + '.yaml'), 'utf-8')) as any;
+	const x = yaml.safeLoad(fs.readFileSync(path.resolve(`${__dirname}/../../../src/docs/api/entities/${entity}.yaml`), 'utf-8')) as any;
 
 	await ctx.render('../../../../src/docs/api/entities/view', Object.assign(await genVars(lang), {
 		id: `api/entities/${entity}`,
diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug
index b5ea2f6eb4..98a53ab549 100644
--- a/src/server/web/views/user.pug
+++ b/src/server/web/views/user.pug
@@ -2,7 +2,7 @@ extends ../../../../src/client/app/base
 
 block vars
 	- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
-	- const url = config.url + '/@' + (user.host ? `${user.username}@${user.host}` : user.username);
+	- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
 	- const img = user.avatarId ? `${config.drive_url}/${user.avatarId}` : null;
 
 block title
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 1da0f49a24..d1c7051ab0 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -40,7 +40,7 @@ async function save(path: string, name: string, type: string, hash: string, size
 		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
 
 		const baseUrl = config.drive.baseUrl
-			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? ':' + config.drive.config.port : '' }/${ config.drive.bucket }`;
+			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;
 
 		await minio.putObject(config.drive.bucket, key, fs.createReadStream(path), size, {
 			'Content-Type': type,
diff --git a/webpack.config.ts b/webpack.config.ts
index ad67530f51..341d4c7022 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -20,7 +20,7 @@ const constants = require('./src/const.json');
 
 const locales = require('./locales');
 const meta = require('./package.json');
-const version = meta.clientVersion + '-' + rndstr({ length: 8, chars: '0-9a-z' });
+const version = `${meta.clientVersion}-${rndstr({ length: 8, chars: '0-9a-z' })}`;
 const codename = meta.codename;
 
 declare var global: {
@@ -42,7 +42,7 @@ global['collapseSpacesReplacement'] = (html: string) => {
 };
 
 global['base64replacement'] = (_: any, key: string) => {
-	return fs.readFileSync(__dirname + '/src/client/' + key, 'base64');
+	return fs.readFileSync(`${__dirname}/src/client/${key}`, 'base64');
 };
 
 global['i18nReplacement'] = i18nReplacement;

From b28dd4be5238f2f36b573b39e689fc816fadda48 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sat, 1 Sep 2018 23:29:22 +0900
Subject: [PATCH 054/539] Use typeof

---
 src/server/api/endpoints/admin/update-meta.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index 2c7929fabe..9737a281ed 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -25,7 +25,7 @@ export default (params: any) => new Promise(async (res, rej) => {
 
 	const set = {} as any;
 
-	if (ps.disableRegistration === true || ps.disableRegistration === false) {
+	if (typeof ps.disableRegistration === 'boolean') {
 		set.disableRegistration = ps.disableRegistration;
 	}
 

From ce28c70c35a0bbe0f344fa1fb40ed8d6f4a4c013 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 1 Sep 2018 23:57:05 +0900
Subject: [PATCH 055/539] Clean up

---
 src/mfm/html-to-mfm.ts | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/mfm/html-to-mfm.ts b/src/mfm/html-to-mfm.ts
index b476a9af5c..6da1dbdad3 100644
--- a/src/mfm/html-to-mfm.ts
+++ b/src/mfm/html-to-mfm.ts
@@ -47,11 +47,9 @@ export default function(html: string): string {
 						//#region ホスト名部分が省略されているので復元する
 						const acct = `${txt}@${(new URL(href.value)).hostname}`;
 						text += acct;
-						break;
 						//#endregion
 					} else if (part.length == 3) {
 						text += txt;
-						break;
 					}
 				// その他
 				} else {

From 01beb705a28e84764ea36436d20ded14cad1b598 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 00:07:23 +0900
Subject: [PATCH 056/539] 8.21.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 72dd6b73f0..499d453560 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.20.0",
-	"clientVersion": "1.0.9240",
+	"version": "8.21.0",
+	"clientVersion": "1.0.9259",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From f24869625ec12deb660f8f6bb8fe681af7ac0b2c Mon Sep 17 00:00:00 2001
From: xps2 <9610872+xps2@users.noreply.github.com>
Date: Sun, 2 Sep 2018 01:09:27 +0900
Subject: [PATCH 057/539] fix

---
 src/client/app/desktop/views/components/media-image.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 52d029a269..0284872c68 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -48,7 +48,7 @@ export default Vue.extend({
 			const mouseY = e.clientY - rect.top;
 			const xp = mouseX / this.$el.offsetWidth * 100;
 			const yp = mouseY / this.$el.offsetHeight * 100;
-			this.$el.style.backgroundPosition = `${xp}% ${yp}%';
+			this.$el.style.backgroundPosition = `${xp}% ${yp}%`;
 			this.$el.style.backgroundImage = `url("${this.image.url}")`;
 		},
 

From a4678e45deeac110acd76388983f27c6f68e8c07 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sun, 2 Sep 2018 04:48:42 +0900
Subject: [PATCH 058/539] Not check dependencies

---
 src/index.ts               |  2 --
 src/misc/dependencyInfo.ts | 32 --------------------------------
 2 files changed, 34 deletions(-)
 delete mode 100644 src/misc/dependencyInfo.ts

diff --git a/src/index.ts b/src/index.ts
index 470699eab9..ed23ff7e72 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -20,7 +20,6 @@ import Logger from './misc/logger';
 import ProgressBar from './misc/cli/progressbar';
 import EnvironmentInfo from './misc/environmentInfo';
 import MachineInfo from './misc/machineInfo';
-import DependencyInfo from './misc/dependencyInfo';
 import serverStats from './daemons/server-stats';
 import notesStats from './daemons/notes-stats';
 import loadConfig from './config/load';
@@ -116,7 +115,6 @@ async function init(): Promise<Config> {
 	new Logger('Deps').info(`Node.js ${process.version}`);
 	MachineInfo.show();
 	EnvironmentInfo.show();
-	new DependencyInfo().showAll();
 
 	const configLogger = new Logger('Config');
 	let config;
diff --git a/src/misc/dependencyInfo.ts b/src/misc/dependencyInfo.ts
deleted file mode 100644
index 09d2828222..0000000000
--- a/src/misc/dependencyInfo.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import Logger from './logger';
-import { execSync } from 'child_process';
-
-export default class {
-	private logger: Logger;
-
-	constructor() {
-		this.logger = new Logger('Deps');
-	}
-
-	public showAll(): void {
-		this.show('MongoDB', 'mongo --version', x => x.match(/^MongoDB shell version:? v(.*)\r?\n/));
-		this.show('Redis', 'redis-server --version', x => x.match(/v=([0-9\.]*)/));
-	}
-
-	public show(serviceName: string, command: string, transform: (x: string) => RegExpMatchArray): void {
-		try {
-			// ステータス0以外のときにexecSyncはstderrをコンソール上に出力してしまうので
-			// プロセスからのstderrをすべて無視するように stdio オプションをセット
-			const x = execSync(command, { stdio: ['pipe', 'pipe', 'ignore'] });
-			const ver = transform(x.toString());
-			if (ver != null) {
-				this.logger.succ(`${serviceName} ${ver[1]} found`);
-			} else {
-				this.logger.warn(`${serviceName} not found`);
-				this.logger.warn(`Regexp used for version check of ${serviceName} is probably messed up`);
-			}
-		} catch (e) {
-			this.logger.warn(`${serviceName} not found`);
-		}
-	}
-}

From 0177023ead75594c603e41f9c1f355e7f4b18369 Mon Sep 17 00:00:00 2001
From: mei23 <m@m544.net>
Date: Sun, 2 Sep 2018 02:57:34 +0900
Subject: [PATCH 059/539] Use Tombstone for Delete

---
 src/remote/activitypub/renderer/tombstone.ts | 4 ++++
 src/services/note/delete.ts                  | 5 +++--
 2 files changed, 7 insertions(+), 2 deletions(-)
 create mode 100644 src/remote/activitypub/renderer/tombstone.ts

diff --git a/src/remote/activitypub/renderer/tombstone.ts b/src/remote/activitypub/renderer/tombstone.ts
new file mode 100644
index 0000000000..553406b93b
--- /dev/null
+++ b/src/remote/activitypub/renderer/tombstone.ts
@@ -0,0 +1,4 @@
+export default (id: string) => ({
+	id,
+	type: 'Tombstone'
+});
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index d0e2b12b41..dea306feec 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -5,8 +5,9 @@ import renderDelete from '../../remote/activitypub/renderer/delete';
 import pack from '../../remote/activitypub/renderer';
 import { deliver } from '../../queue';
 import Following from '../../models/following';
-import renderNote from '../../remote/activitypub/renderer/note';
+import renderTombstone from '../../remote/activitypub/renderer/tombstone';
 import { updateNoteStats } from '../update-chart';
+import config from '../../config';
 
 /**
  * 投稿を削除します。
@@ -32,7 +33,7 @@ export default async function(user: IUser, note: INote) {
 
 	//#region ローカルの投稿なら削除アクティビティを配送
 	if (isLocalUser(user)) {
-		const content = pack(renderDelete(await renderNote(note), user));
+		const content = pack(renderDelete(renderTombstone(`${config.url}/notes/${note._id}`), user));
 
 		const followings = await Following.find({
 			followeeId: user._id,

From 34eacb7e2d35f37f11874410306d6473f54df761 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Sep 2018 06:35:06 +0900
Subject: [PATCH 060/539] Update README.md [AUTOGEN]

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 465d171114..5d811b6a73 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,6 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4950409/28e7d016209243759d9316be2e21381d/2?token-time=2145916800&token-hash=LuEaDkchH3GQWUcTOhBQ8xfKQYF0s5FjlZRd7Yduia8%3D" alt="mikan54951"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12959468/c249e15aebec4424b5c0f427173671b6/1?token-time=2145916800&token-hash=lubpCEdxAkxPlpR2O6bvZ7BIh8Q4nGf-U_mE1qpjVAQ%3D" alt="fujishan"></td>
 </tr><tr>
 <td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
 <td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
@@ -77,10 +76,9 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/dansup">dansup</a></td>
 <td><a href="https://www.patreon.com/user?u=4950409">mikan54951</a></td>
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
-<td><a href="https://www.patreon.com/fujishan">fujishan</a></td>
 </tr></table>
 
-**Last updated:** Sun, 26 Aug 2018 08:55:06 UTC
+**Last updated:** Sat, 01 Sep 2018 21:35:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From b93395fc4ceaaf9a7139e50ebf7a8643160be3dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Sep 2018 09:05:06 +0900
Subject: [PATCH 061/539] Update README.md [AUTOGEN]

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 5d811b6a73..17a492886d 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,6 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 ----------------------------------------------------------------
 <!-- PATREON_START -->
 <table><tr>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12378075/0156f769e20f412594fa6b87d85fe228/1?token-time=2145916800&token-hash=IsIJRUXszzoD6-7pDnRY8I05T9nSznc4GTaxj7C9SwU%3D" alt="39ff"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
@@ -52,7 +51,6 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></td>
 </tr><tr>
-<td><a href="https://www.patreon.com/user?u=12378075">39ff</a></td>
 <td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
 <td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
 <td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
@@ -78,7 +76,7 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Sat, 01 Sep 2018 21:35:06 UTC
+**Last updated:** Sun, 02 Sep 2018 00:05:05 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 4f0d844b4383160bd9127ce8562d5235fea3bf99 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 09:31:11 +0900
Subject: [PATCH 062/539] Remove needless properties

---
 src/models/drive-file.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index dbbc1f1cd5..698ef092a6 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -193,5 +193,10 @@ export const pack = (
 		*/
 	}
 
+	delete _target.withoutChunks;
+	delete _target.storage;
+	delete _target.storageProps;
+	delete _target.isRemote;
+
 	resolve(_target);
 });

From 14c03f226d49d656a7c1b8d522fa2b50b6280ac7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 09:33:55 +0900
Subject: [PATCH 063/539] 8.21.1

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 499d453560..522765359c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.21.0",
-	"clientVersion": "1.0.9259",
+	"version": "8.21.1",
+	"clientVersion": "1.0.9264",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 3a6947c7edf7c975dda696f675c0fdc952ec8b66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Sep 2018 09:45:06 +0900
Subject: [PATCH 064/539] Update README.md [AUTOGEN]

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 17a492886d..ef36b669d2 100644
--- a/README.md
+++ b/README.md
@@ -65,18 +65,16 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4950409/28e7d016209243759d9316be2e21381d/2?token-time=2145916800&token-hash=LuEaDkchH3GQWUcTOhBQ8xfKQYF0s5FjlZRd7Yduia8%3D" alt="mikan54951"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
 </tr><tr>
 <td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
 <td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
 <td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
 <td><a href="https://www.patreon.com/dansup">dansup</a></td>
-<td><a href="https://www.patreon.com/user?u=4950409">mikan54951</a></td>
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Sun, 02 Sep 2018 00:05:05 UTC
+**Last updated:** Sun, 02 Sep 2018 00:45:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From f6217d96d20905024a5780fd4b3e7320eb41e3c6 Mon Sep 17 00:00:00 2001
From: Marihachi <marihachi0620@gmail.com>
Date: Sun, 2 Sep 2018 11:25:33 +0900
Subject: [PATCH 065/539] add an endpoint users/lists/update (#2585)

* add an endpoint users/lists/update

* add meta params

* fix packing
---
 .../api/endpoints/users/lists/update.ts       | 55 +++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100644 src/server/api/endpoints/users/lists/update.ts

diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts
new file mode 100644
index 0000000000..b80d648122
--- /dev/null
+++ b/src/server/api/endpoints/users/lists/update.ts
@@ -0,0 +1,55 @@
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
+import UserList, { pack } from '../../../../../models/user-list';
+import { ILocalUser } from '../../../../../models/user';
+import getParams from '../../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定したユーザーリストを更新します。',
+		'en-US': 'Update a user list'
+	},
+
+	requireCredential: true,
+
+	kind: 'account-write',
+
+	params: {
+		listId: $.type(ID).note({
+			desc: {
+				'ja-JP': '対象となるユーザーリストのID',
+				'en-US': 'ID of target user list'
+			}
+		}),
+		title: $.str.range(1, 100).note({
+			desc: {
+				'ja-JP': 'このユーザーリストの名前',
+				'en-US': 'name of this user list'
+			}
+		})
+	}
+};
+
+export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
+
+	// Fetch the list
+	const userList = await UserList.findOne({
+		_id: ps.listId,
+		userId: user._id
+	});
+
+	if (userList == null) {
+		return rej('list not found');
+	}
+
+	// update
+	await UserList.update({ _id: userList._id }, {
+		$set: {
+			title: ps.title
+		}
+	});
+
+	// Response
+	res(await pack(userList._id));
+});

From b00060c09ce1eba9f09f4a1c3a23bd0b497b6907 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sun, 2 Sep 2018 17:44:49 +0900
Subject: [PATCH 066/539] Clean up

---
 src/server/api/endpoints/users/lists/update.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts
index b80d648122..7cfc4e0a24 100644
--- a/src/server/api/endpoints/users/lists/update.ts
+++ b/src/server/api/endpoints/users/lists/update.ts
@@ -1,4 +1,5 @@
-import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
+import $ from 'cafy';
+import ID from '../../../../../misc/cafy-id';
 import UserList, { pack } from '../../../../../models/user-list';
 import { ILocalUser } from '../../../../../models/user';
 import getParams from '../../../get-params';

From f94992abbe19a58f81d36de28d4f063064684261 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 17:56:20 +0900
Subject: [PATCH 067/539] :art:

---
 .../app/common/views/components/menu.vue      | 22 +++++++++++++------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index 9b16732b9a..e99bfcbd26 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mk-menu">
+<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
 	<div class="backdrop" ref="backdrop" @click="close"></div>
 	<div class="popover" :class="{ hukidasi }" ref="popover">
 		<template v-for="item in items">
@@ -119,9 +119,10 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 @import '~const.styl'
 
-$border-color = rgba(27, 31, 35, 0.15)
+root(isDark)
+	$bg-color = isDark ? #2c303c : #fff
+	$border-color = rgba(27, 31, 35, 0.15)
 
-.mk-menu
 	position initial
 
 	> .backdrop
@@ -131,14 +132,14 @@ $border-color = rgba(27, 31, 35, 0.15)
 		z-index 10000
 		width 100%
 		height 100%
-		background rgba(#000, 0.1)
+		background rgba(#000, isDark ? 0.5 : 0.1)
 		opacity 0
 
 	> .popover
 		position absolute
 		z-index 10001
 		padding 8px 0
-		background #fff
+		background $bg-color
 		border 1px solid $border-color
 		border-radius 4px
 		box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
@@ -172,12 +173,13 @@ $border-color = rgba(27, 31, 35, 0.15)
 				border-top solid $balloon-size transparent
 				border-left solid $balloon-size transparent
 				border-right solid $balloon-size transparent
-				border-bottom solid $balloon-size #fff
+				border-bottom solid $balloon-size $bg-color
 
 		> button
 			display block
 			padding 8px 16px
 			width 100%
+			color isDark ? #d6dce2 : #111
 
 			&:hover
 				color $theme-color-foreground
@@ -191,6 +193,12 @@ $border-color = rgba(27, 31, 35, 0.15)
 		> div
 			margin 8px 0
 			height 1px
-			background #eee
+			background isDark ? #1c2023 : #eee
+
+.onchrpzrvnoruiaenfcqvccjfuupzzwv[data-darkmode]
+	root(true)
+
+.onchrpzrvnoruiaenfcqvccjfuupzzwv:not([data-darkmode])
+	root(false)
 
 </style>

From ef630195fa6a86ae54eaf866b38c5379dd79242e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 18:23:47 +0900
Subject: [PATCH 068/539] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB?=
 =?UTF-8?q?=E3=81=AE=E3=83=89=E3=83=A9=E3=82=A4=E3=83=96=E3=83=80=E3=82=A4?=
 =?UTF-8?q?=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=8C=E3=81=8A=E3=81=8B=E3=81=97?=
 =?UTF-8?q?=E3=81=84=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3=20&=20=E3=83=80?=
 =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=83=A2=E3=83=BC=E3=83=89=E5=AF=BE=E5=BF=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../views/components/drive-file-chooser.vue   | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue
index 56e41e31d8..aaa707d8a7 100644
--- a/src/client/app/mobile/views/components/drive-file-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-file-chooser.vue
@@ -1,12 +1,12 @@
 <template>
-<div class="mk-drive-file-chooser">
+<div class="cdxzvcfawjxdyxsekbxbfgtplebnoneb">
 	<div class="body">
 		<header>
 			<h1>%i18n:@select-file%<span class="count" v-if="files.length > 0">({{ files.length }})</span></h1>
 			<button class="close" @click="cancel">%fa:times%</button>
 			<button v-if="multiple" class="ok" @click="ok">%fa:check%</button>
 		</header>
-		<mk-drive ref="browser"
+		<mk-drive class="drive" ref="browser"
 			:select-file="true"
 			:multiple="multiple"
 			@change-selection="onChangeSelection"
@@ -46,7 +46,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-.mk-drive-file-chooser
+root(isDark)
 	position fixed
 	z-index 20000
 	top 0
@@ -59,10 +59,11 @@ export default Vue.extend({
 	> .body
 		width 100%
 		height 100%
-		background #fff
+		background isDark ? #282c37 : #fff
 
 		> header
-			border-bottom solid 1px #eee
+			border-bottom solid 1px isDark ? #1b1f29 : #eee
+			color isDark ? #fff : #111
 
 			> h1
 				margin 0
@@ -90,9 +91,15 @@ export default Vue.extend({
 				line-height 42px
 				width 42px
 
-		> .mk-drive
+		> .drive
 			height calc(100% - 42px)
 			overflow scroll
 			-webkit-overflow-scrolling touch
 
+.cdxzvcfawjxdyxsekbxbfgtplebnoneb[data-darkmode]
+	root(true)
+
+.cdxzvcfawjxdyxsekbxbfgtplebnoneb:not([data-darkmode])
+	root(false)
+
 </style>

From d15ebe5732bb4d04a7861f43ab882738b3e4d9ef Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 18:27:43 +0900
Subject: [PATCH 069/539] Improve usability

---
 src/client/app/mobile/views/components/note.vue | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index d0cea135f9..258433cb3f 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -471,10 +471,6 @@ root(isDark)
 					&.reacted
 						color $theme-color
 
-					&.menu
-						@media (max-width 350px)
-							display none
-
 .note[data-darkmode]
 	root(true)
 

From c0ee134f19911dc88f2f3dd2f3600a820fd411cc Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sun, 2 Sep 2018 18:59:42 +0900
Subject: [PATCH 070/539] Add users/lists/delete API (#2589)

---
 .../api/endpoints/users/lists/delete.ts       | 43 +++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 src/server/api/endpoints/users/lists/delete.ts

diff --git a/src/server/api/endpoints/users/lists/delete.ts b/src/server/api/endpoints/users/lists/delete.ts
new file mode 100644
index 0000000000..906534922e
--- /dev/null
+++ b/src/server/api/endpoints/users/lists/delete.ts
@@ -0,0 +1,43 @@
+import $ from 'cafy';
+import ID from '../../../../../misc/cafy-id';
+import UserList, { deleteUserList } from '../../../../../models/user-list';
+import { ILocalUser } from '../../../../../models/user';
+import getParams from '../../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定したユーザーリストを削除します。',
+		'en-US': 'Delete a user list'
+	},
+
+	requireCredential: true,
+
+	kind: 'account-write',
+
+	params: {
+		listId: $.type(ID).note({
+			desc: {
+				'ja-JP': '対象となるユーザーリストのID',
+				'en-US': 'ID of target user list'
+			}
+		})
+	}
+};
+
+export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
+
+	const userList = await UserList.findOne({
+		_id: ps.listId,
+		userId: user._id
+	});
+
+	if (userList == null) {
+		return rej('list not found');
+	}
+
+	deleteUserList(userList);
+
+	res();
+});

From 3136c714bf2359564c97953a02e86bf9cdb1fc76 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sun, 2 Sep 2018 19:03:00 +0900
Subject: [PATCH 071/539] Fix users/list/update API (#2590)

---
 src/server/api/endpoints/users/lists/update.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts
index 7cfc4e0a24..e6577eca4f 100644
--- a/src/server/api/endpoints/users/lists/update.ts
+++ b/src/server/api/endpoints/users/lists/update.ts
@@ -30,7 +30,7 @@ export const meta = {
 	}
 };
 
-export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 	const [ps, psErr] = getParams(meta, params);
 	if (psErr) throw psErr;
 

From d033998b566fa09d3c53ee32fa42617490db4b04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 2 Sep 2018 19:10:12 +0900
Subject: [PATCH 072/539] Update README.md [AUTOGEN] (#2586)

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ef36b669d2..9412222614 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/1?token-time=2145916800&token-hash=DVrSdOqQq2dufgNgWZ3XMnEtl_ZAktr8Lhf2tbHKtoA%3D" alt="Axella"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/2?token-time=2145916800&token-hash=rwZ8qvbm_kpA4ib3kc07tVKupXeySpY5ATQFGxfL9v0%3D" alt="Axella"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
 <td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
@@ -74,7 +74,7 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Sun, 02 Sep 2018 00:45:06 UTC
+**Last updated:** Sun, 02 Sep 2018 05:30:06 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From c145c994a9d6a3e19cde971325df0017ff7d4a6d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 19:27:09 +0900
Subject: [PATCH 073/539] 8.22.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 522765359c..bb7e70beb0 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.21.1",
-	"clientVersion": "1.0.9264",
+	"version": "8.22.0",
+	"clientVersion": "1.0.9273",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 99fbd6026591f555f270b826c71c42e9de601267 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Sun, 2 Sep 2018 20:19:59 +0900
Subject: [PATCH 074/539] Improve url visual (#2591)

* Use string interpolation

* improve url visual

* fix lint
---
 src/client/app/common/views/components/url.vue | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/client/app/common/views/components/url.vue b/src/client/app/common/views/components/url.vue
index e6ffe4466d..04a1f30135 100644
--- a/src/client/app/common/views/components/url.vue
+++ b/src/client/app/common/views/components/url.vue
@@ -12,6 +12,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { toUnicode as decodePunycode } from 'punycode';
 export default Vue.extend({
 	props: ['url', 'target'],
 	data() {
@@ -27,11 +28,11 @@ export default Vue.extend({
 	created() {
 		const url = new URL(this.url);
 		this.schema = url.protocol;
-		this.hostname = url.hostname;
+		this.hostname = decodePunycode(url.hostname);
 		this.port = url.port;
-		this.pathname = url.pathname;
-		this.query = url.search;
-		this.hash = url.hash;
+		this.pathname = decodeURIComponent(url.pathname);
+		this.query = decodeURIComponent(url.search);
+		this.hash = decodeURIComponent(url.hash);
 	}
 });
 </script>

From c57bf87f525f40e37b88714073e198511406fb44 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Sun, 2 Sep 2018 21:39:47 +0900
Subject: [PATCH 075/539] Make poll button togglable (#2592)

---
 src/client/app/desktop/views/components/post-form.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index eb8b40062a..2ca5484610 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -35,7 +35,7 @@
 	<button class="upload" title="%i18n:@attach-media-from-local%" @click="chooseFile">%fa:upload%</button>
 	<button class="drive" title="%i18n:@attach-media-from-drive%" @click="chooseFileFromDrive">%fa:cloud%</button>
 	<button class="kao" title="%i18n:@insert-a-kao%" @click="kao">%fa:R smile%</button>
-	<button class="poll" title="%i18n:@create-poll%" @click="poll = true">%fa:chart-pie%</button>
+	<button class="poll" title="%i18n:@create-poll%" @click="poll = !poll">%fa:chart-pie%</button>
 	<button class="poll" title="%i18n:@hide-contents%" @click="useCw = !useCw">%fa:eye-slash%</button>
 	<button class="geo" title="%i18n:@attach-location-information%" @click="geo ? removeGeo() : setGeo()">%fa:map-marker-alt%</button>
 	<button class="visibility" title="%i18n:@visibility%" @click="setVisibility" ref="visibilityButton">

From 13e822cba616604de7ffc71da495f46200fb815b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 2 Sep 2018 22:40:27 +0900
Subject: [PATCH 076/539] Trim text

Closes #2595
---
 src/server/api/endpoints/messaging/messages/create.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index a6fabcfa45..9a49e09248 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -74,7 +74,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		createdAt: new Date(),
 		fileId: file ? file._id : undefined,
 		recipientId: recipient._id,
-		text: text ? text : undefined,
+		text: text ? text.trim() : undefined,
 		userId: user._id,
 		isRead: false
 	});

From 09843a409b488872a08c07329207465f9ffdb957 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Mon, 3 Sep 2018 18:58:26 +0900
Subject: [PATCH 077/539] Fix typo: Wroker -> Worker (#2597)

---
 docs/setup.en.md        | 2 +-
 src/server/web/index.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/setup.en.md b/docs/setup.en.md
index d426271870..23bcdcca98 100644
--- a/docs/setup.en.md
+++ b/docs/setup.en.md
@@ -54,7 +54,7 @@ Please visit https://www.google.com/recaptcha/intro/ and generate keys.
 
 *(optional)* Generating VAPID keys
 ----------------------------------------------------------------
-If you want to enable ServiceWroker, you need to generate VAPID keys:
+If you want to enable ServiceWorker, you need to generate VAPID keys:
 Unless you have set your global node_modules location elsewhere, you need to run this in root.
 
 ``` shell
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 452e36fe95..e7332f4230 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -63,7 +63,7 @@ router.get('/apple-touch-icon.png', async ctx => {
 	});
 });
 
-// ServiceWroker
+// ServiceWorker
 router.get(/^\/sw\.(.+?)\.js$/, async ctx => {
 	await send(ctx, `/assets/sw.${ctx.params[0]}.js`, {
 		root: client

From 66f3a155e6050fc297d2f600e6d619c5dba0f764 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 3 Sep 2018 23:23:50 +0900
Subject: [PATCH 078/539] =?UTF-8?q?=E3=81=AA=E3=82=93=E3=81=8B=E3=82=82?=
 =?UTF-8?q?=E3=81=86=E3=82=81=E3=81=A3=E3=81=A1=E3=82=83=E3=82=84=E3=81=A3?=
 =?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../app/common/views/components/signin.vue    |   2 +-
 .../app/common/views/widgets/broadcast.vue    |  10 +-
 .../views/pages/admin/admin.announcements.vue |  41 +++
 .../app/desktop/views/pages/admin/admin.vue   |   6 +
 .../app/desktop/views/pages/welcome.vue       | 297 ++++++++----------
 src/server/api/endpoints/admin/update-meta.ts |  12 +-
 6 files changed, 199 insertions(+), 169 deletions(-)
 create mode 100644 src/client/app/desktop/views/pages/admin/admin.announcements.vue

diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index 5230ac371a..b1c6782e93 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -78,7 +78,7 @@ export default Vue.extend({
 			cursor wait !important
 
 	> .avatar
-		margin 16px auto 0 auto
+		margin 0 auto 0 auto
 		width 64px
 		height 64px
 		background #ddd
diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index 69b2a54fe9..d3a39bd9cc 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -42,15 +42,7 @@ export default define({
 	},
 	mounted() {
 		(this as any).os.getMeta().then(meta => {
-			let broadcasts = [];
-			if (meta.broadcasts) {
-				meta.broadcasts.forEach(broadcast => {
-					if (broadcast[lang]) {
-						broadcasts.push(broadcast[lang]);
-					}
-				});
-			}
-			this.broadcasts = broadcasts;
+			this.broadcasts = meta.broadcasts;
 			this.fetching = false;
 		});
 	},
diff --git a/src/client/app/desktop/views/pages/admin/admin.announcements.vue b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
new file mode 100644
index 0000000000..532400deb2
--- /dev/null
+++ b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
@@ -0,0 +1,41 @@
+<template>
+<div class="qldxjjsrseehkusjuoooapmsprvfrxyl mk-admin-card">
+	<header>%i18n:@announcements%</header>
+	<textarea v-model="broadcasts"></textarea>
+	<button class="ui" @click="save">%i18n:@save%</button>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from "vue";
+
+export default Vue.extend({
+	data() {
+		return {
+			broadcasts: '',
+		};
+	},
+	created() {
+		(this as any).os.getMeta().then(meta => {
+			this.broadcasts = JSON.stringify(meta.broadcasts, null, '  ');
+		});
+	},
+	methods: {
+		save() {
+			(this as any).api('admin/update-meta', {
+				broadcasts: JSON.parse(this.broadcasts)
+			});
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+@import '~const.styl'
+
+.qldxjjsrseehkusjuoooapmsprvfrxyl
+	textarea
+		width 100%
+		min-height 300px
+
+</style>
diff --git a/src/client/app/desktop/views/pages/admin/admin.vue b/src/client/app/desktop/views/pages/admin/admin.vue
index 3438462cd6..a71059c378 100644
--- a/src/client/app/desktop/views/pages/admin/admin.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.vue
@@ -4,6 +4,7 @@
 		<ul>
 			<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li>
 			<li @click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
+			<li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
 			<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</li> -->
 			<!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->
 		</ul>
@@ -13,6 +14,9 @@
 			<x-dashboard/>
 			<x-charts/>
 		</div>
+		<div v-show="page == 'announcements'">
+			<x-announcements/>
+		</div>
 		<div v-if="page == 'users'">
 			<x-suspend-user/>
 			<x-unsuspend-user/>
@@ -28,6 +32,7 @@
 <script lang="ts">
 import Vue from "vue";
 import XDashboard from "./admin.dashboard.vue";
+import XAnnouncements from "./admin.announcements.vue";
 import XSuspendUser from "./admin.suspend-user.vue";
 import XUnsuspendUser from "./admin.unsuspend-user.vue";
 import XVerifyUser from "./admin.verify-user.vue";
@@ -37,6 +42,7 @@ import XCharts from "../../components/charts.vue";
 export default Vue.extend({
 	components: {
 		XDashboard,
+		XAnnouncements,
 		XSuspendUser,
 		XUnsuspendUser,
 		XVerifyUser,
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index ae9bf7e678..e67ef16136 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -1,46 +1,60 @@
 <template>
 <div class="mk-welcome">
-	<img ref="pointer" class="pointer" src="/assets/pointer.png" alt="">
 	<button @click="dark">
 		<template v-if="$store.state.device.darkmode">%fa:moon%</template>
 		<template v-else>%fa:R moon%</template>
 	</button>
+
+	<mk-forkit class="forkit"/>
+
 	<div class="body">
-		<div class="container">
+		<div class="main">
+			<h1 v-if="name != 'Misskey'">{{ name }}</h1>
+			<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
+
 			<div class="info">
-				<span><b>{{ host }}</b></span>
+				<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
 				<span class="stats" v-if="stats">
 					<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
 					<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
 				</span>
 			</div>
-			<main>
-				<div class="about">
-					<h1 v-if="name != 'Misskey'">{{ name }}</h1>
-					<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
-					<p class="powerd-by" v-if="name != 'Misskey'" v-html="'%i18n:@powered-by-misskey%'"></p>
-					<p class="desc" v-html="description || '%i18n:common.about%'"></p>
-					<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
-				</div>
-				<div class="login">
-					<mk-signin/>
-				</div>
-			</main>
+
+			<p class="desc" v-html="description || '%i18n:common.about%'"></p>
+
+			<p class="sign">
+				<span class="signup" @click="signup">%i18n:@signup%</span>
+				<span class="divider">|</span>
+				<span class="signin" @click="signin">%i18n:@signin%</span>
+			</p>
+
 			<div class="hashtags">
 				<router-link v-for="tag in tags" :key="tag" :to="`/tags/${ tag }`" :title="tag">#{{ tag }}</router-link>
 			</div>
+		</div>
+
+		<div class="broadcasts">
+			<div v-for="broadcast in broadcasts">
+				<h1 v-html="broadcast.title"></h1>
+				<div v-html="broadcast.text"></div>
+			</div>
+		</div>
+
+		<div class="nav">
 			<mk-nav class="nav"/>
 		</div>
-		<mk-forkit class="forkit"/>
-		<img src="assets/title.dark.svg" :alt="name">
-	</div>
-	<div class="tl">
-		<mk-welcome-timeline :max="20"/>
+
+		<mk-welcome-timeline class="tl" :max="20"/>
 	</div>
 
-	<modal name="signup" width="500px" height="auto" scrollable>
-		<header :class="$style.signupFormHeader">%i18n:@signup%</header>
-		<mk-signup :class="$style.signupForm"/>
+	<modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
+		<header class="formHeader">%i18n:@signup%</header>
+		<mk-signup class="form"/>
+	</modal>
+
+	<modal name="signin" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
+		<header class="formHeader">%i18n:@signin%</header>
+		<mk-signin class="form"/>
 	</modal>
 </div>
 </template>
@@ -57,7 +71,7 @@ export default Vue.extend({
 			host,
 			name: 'Misskey',
 			description: '',
-			pointerInterval: null,
+			broadcasts: [],
 			tags: []
 		};
 	},
@@ -65,6 +79,7 @@ export default Vue.extend({
 		(this as any).os.getMeta().then(meta => {
 			this.name = meta.name;
 			this.description = meta.description;
+			this.broadcasts = meta.broadcasts;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -75,19 +90,7 @@ export default Vue.extend({
 			this.tags = stats.map(x => x.tag);
 		});
 	},
-	mounted() {
-		this.point();
-		this.pointerInterval = setInterval(this.point, 100);
-	},
-	beforeDestroy() {
-		clearInterval(this.pointerInterval);
-	},
 	methods: {
-		point() {
-			const x = this.$refs.signup.getBoundingClientRect();
-			this.$refs.pointer.style.top = x.top + x.height + 'px';
-			this.$refs.pointer.style.left = x.left + 'px';
-		},
 		signup() {
 			this.$modal.show('signup');
 		},
@@ -104,11 +107,40 @@ export default Vue.extend({
 });
 </script>
 
-<style>
-#wait {
-	right: auto;
-	left: 15px;
-}
+<style lang="stylus">
+#wait
+	right auto
+	left 15px
+
+.v--modal-overlay
+	background rgba(0, 0, 0, 0.4)
+
+.modal-light
+	.v--modal-box
+		color #777
+
+		.formHeader
+			border-bottom solid 1px #eee
+
+.modal-dark
+	.v--modal-box
+		background #313543
+		color #fff
+
+		.formHeader
+			border-bottom solid 1px rgba(#000, 0.2)
+
+.modal-light
+.modal-dark
+	.form
+		padding 24px 48px 48px 48px
+
+	.formHeader
+		text-align center
+		padding 48px 0 12px 0
+		margin 0 48px
+		font-size 1.5em
+
 </style>
 
 <style lang="stylus" scoped>
@@ -117,122 +149,85 @@ export default Vue.extend({
 root(isDark)
 	display flex
 	min-height 100vh
+	//background-color #00070F
+	//background-image url('/assets/bg.jpg')
+	//background-position center
+	//background-size cover
 
-	> .pointer
-		display block
+	> .forkit
 		position absolute
-		z-index 1
 		top 0
 		right 0
-		width 180px
-		margin 0 0 0 -180px
-		transform rotateY(180deg) translateX(-10px) translateY(-48px)
-		pointer-events none
 
 	> button
 		position fixed
 		z-index 1
-		top 0
-		left 0
+		bottom 64px
+		left 64px
 		padding 16px
 		font-size 18px
-		color #fff
-
-		display none // TODO
+		color isDark ? #fff : #444
 
 	> .body
-		flex 1
-		padding 64px 0 0 0
-		text-align center
-		background #578394
-		background-position center
-		background-size cover
+		display grid
+		grid-template-rows 0.5fr 0.5fr 64px
+		grid-template-columns 1fr 350px
+		gap 16px
+		width 100%
+		max-width 1200px
+		height 100vh
+		margin 0 auto
+		padding 64px
 
-		&:before
-			content ''
-			display block
-			position absolute
-			top 0
-			left 0
-			right 0
-			bottom 0
-			background rgba(#000, 0.5)
+		> *
+			color isDark ? #fff : #444
+			background isDark ? #313543 : #fff
+			box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+			//border-radius 8px
+			overflow auto
 
-		> .forkit
-			position absolute
-			top 0
-			right 0
+		> .main
+			grid-row 1
+			grid-column 1
+			padding 32px
 
-		> img
-			position absolute
-			bottom 16px
-			right 16px
-			width 150px
+			> h1
+				margin 0
 
-		> .container
-			$aboutWidth = 380px
-			$loginWidth = 340px
-			$width = $aboutWidth + $loginWidth
+				> img
+					margin -8px 0 0 -16px
+					max-width 280px
 
 			> .info
 				margin 0 auto 16px auto
 				width $width
 				font-size 14px
-				color #fff
 
 				> .stats
 					margin-left 16px
 					padding-left 16px
-					border-left solid 1px #fff
+					border-left solid 1px isDark ? #fff : #444
 
 					> *
 						margin-right 16px
 
-			> main
-				display flex
-				margin auto
-				width $width
-				border-radius 8px
-				overflow hidden
-				box-shadow 0 2px 8px rgba(#000, 0.3)
+			> .sign
+				font-size 120%
 
-				> .about
-					width $aboutWidth
-					color #444
-					background #fff
+				> .divider
+					margin 0 16px
 
-					> h1
-						margin 0 0 16px 0
-						padding 32px 32px 0 32px
-						color #444
+				> .signin
+				> .signup
+					cursor pointer
 
-						> img
-							width 170px
-							vertical-align bottom
-
-					> .powerd-by
-						margin 16px
-						opacity 0.7
-
-					> .desc
-						margin 0
-						padding 0 32px 16px 32px
-
-					> a
-						display inline-block
-						margin 0 0 32px 0
-						font-weight bold
-
-				> .login
-					width $loginWidth
-					padding 16px 32px 32px 32px
-					background isDark ? #2e3440 : #f5f5f5
+					&:hover
+						color $theme-color
 
 			> .hashtags
 				margin 16px auto
 				width $width
 				font-size 14px
-				color #fff
 				background rgba(#000, 0.3)
 				border-radius 8px
 
@@ -240,20 +235,32 @@ root(isDark)
 					display inline-block
 					margin 14px
 
-			> .nav
-				display block
-				margin 16px 0
-				font-size 14px
-				color #fff
+		> .broadcasts
+			grid-row 2
+			grid-column 1
+			padding 32px
 
-	> .tl
-		margin 0
-		width 410px
-		height 100vh
-		text-align left
-		background isDark ? #313543 : #fff
+			> div
+				padding 0 0 16px 0
+				margin 0 0 16px 0
+				border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
 
-		> *
+				> h1
+					margin 0
+					font-size 1.5em
+
+		> .nav
+			display flex
+			justify-content center
+			align-items center
+			grid-row 3
+			grid-column 1
+			font-size 14px
+
+		> .tl
+			grid-row 1 / 4
+			grid-column 2
+			text-align left
 			max-height 100%
 			overflow auto
 
@@ -264,29 +271,3 @@ root(isDark)
 	root(false)
 
 </style>
-
-<style lang="stylus" module>
-.signupForm
-	padding 24px 48px 48px 48px
-
-.signupFormHeader
-	padding 48px 0 12px 0
-	margin: 0 48px
-	font-size 1.5em
-	color #777
-	border-bottom solid 1px #eee
-
-.signinForm
-	padding 24px 48px 48px 48px
-
-.signinFormHeader
-	padding 48px 0 12px 0
-	margin: 0 48px
-	font-size 1.5em
-	color #777
-	border-bottom solid 1px #eee
-
-.nav
-	a
-		color #666
-</style>
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index 9737a281ed..10ca15d329 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -11,11 +11,17 @@ export const meta = {
 	requireAdmin: true,
 
 	params: {
+		broadcasts: $.arr($.obj()).optional.nullable.note({
+			desc: {
+				'ja-JP': 'ブロードキャスト'
+			}
+		}),
+
 		disableRegistration: $.bool.optional.nullable.note({
 			desc: {
 				'ja-JP': '招待制か否か'
 			}
-		}),
+		})
 	}
 };
 
@@ -25,6 +31,10 @@ export default (params: any) => new Promise(async (res, rej) => {
 
 	const set = {} as any;
 
+	if (ps.broadcasts) {
+		set.broadcasts = ps.broadcasts;
+	}
+
 	if (typeof ps.disableRegistration === 'boolean') {
 		set.disableRegistration = ps.disableRegistration;
 	}

From ba38f643536580c495b54c768ded0315a78467d4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 3 Sep 2018 23:25:35 +0900
Subject: [PATCH 079/539] 8.23.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index bb7e70beb0..c43f73ecc7 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.22.0",
-	"clientVersion": "1.0.9273",
+	"version": "8.23.0",
+	"clientVersion": "1.0.9287",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 3698c679e23c184e897d86e9d75dfe2a110a282c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 02:09:56 +0900
Subject: [PATCH 080/539] :pizza:

---
 locales/ja-JP.yml                             |   6 +-
 .../app/common/views/components/index.ts      |   2 +
 .../trends.chart.vue}                         |   0
 .../app/common/views/components/trends.vue    | 105 ++++++++++++++++++
 .../app/common/views/widgets/hashtags.vue     |  94 +---------------
 .../app/desktop/views/pages/welcome.vue       |  52 +++++----
 6 files changed, 143 insertions(+), 116 deletions(-)
 rename src/client/app/common/views/{widgets/hashtags.chart.vue => components/trends.chart.vue} (100%)
 create mode 100644 src/client/app/common/views/components/trends.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index c5a3fc81ff..a57f724a32 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -375,6 +375,10 @@ common/views/components/visibility-chooser.vue:
   specified-desc: "指定したユーザーにのみ公開"
   private: "非公開"
 
+common/views/components/trends.vue:
+  count: "{}人が投稿"
+  empty: "トレンドなし"
+
 common/views/widgets/broadcast.vue:
   fetching: "確認中"
   no-broadcasts: "お知らせはありません"
@@ -403,8 +407,6 @@ common/views/widgets/posts-monitor.vue:
 
 common/views/widgets/hashtags.vue:
   title: "ハッシュタグ"
-  count: "{}人が投稿"
-  empty: "トレンドなし"
 
 common/views/widgets/server.vue:
   title: "サーバー情報"
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 422a3da050..4700b6269e 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import trends from './trends.vue';
 import analogClock from './analog-clock.vue';
 import menu from './menu.vue';
 import noteHeader from './note-header.vue';
@@ -40,6 +41,7 @@ import uiSelect from './ui/select.vue';
 import formButton from './ui/form/button.vue';
 import formRadio from './ui/form/radio.vue';
 
+Vue.component('mk-trends', trends);
 Vue.component('mk-analog-clock', analogClock);
 Vue.component('mk-menu', menu);
 Vue.component('mk-note-header', noteHeader);
diff --git a/src/client/app/common/views/widgets/hashtags.chart.vue b/src/client/app/common/views/components/trends.chart.vue
similarity index 100%
rename from src/client/app/common/views/widgets/hashtags.chart.vue
rename to src/client/app/common/views/components/trends.chart.vue
diff --git a/src/client/app/common/views/components/trends.vue b/src/client/app/common/views/components/trends.vue
new file mode 100644
index 0000000000..627edc3876
--- /dev/null
+++ b/src/client/app/common/views/components/trends.vue
@@ -0,0 +1,105 @@
+<template>
+<div class="csqvmxybqbycalfhkxvyfrgbrdalkaoc">
+	<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+	<p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
+	<!-- トランジションを有効にするとなぜかメモリリークする -->
+	<!-- <transition-group v-else tag="div" name="chart"> -->
+	<div>
+		<div v-for="stat in stats" :key="stat.tag">
+			<div class="tag">
+				<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
+				<p>{{ '%i18n:@count%'.replace('{}', stat.usersCount) }}</p>
+			</div>
+			<x-chart class="chart" :src="stat.chart"/>
+		</div>
+	</div>
+	<!-- </transition-group> -->
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XChart from './trends.chart.vue';
+
+export default Vue.extend({
+	components: {
+		XChart
+	},
+	data() {
+		return {
+			stats: [],
+			fetching: true,
+			clock: null
+		};
+	},
+	mounted() {
+		this.fetch();
+		this.clock = setInterval(this.fetch, 1000 * 60);
+	},
+	beforeDestroy() {
+		clearInterval(this.clock);
+	},
+	methods: {
+		fetch() {
+			(this as any).api('hashtags/trend').then(stats => {
+				this.stats = stats;
+				this.fetching = false;
+			});
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+root(isDark)
+	> .fetching
+	> .empty
+		margin 0
+		padding 16px
+		text-align center
+		color #aaa
+
+		> [data-fa]
+			margin-right 4px
+
+	> div
+		.chart-move
+			transition transform 1s ease
+
+		> div
+			display flex
+			align-items center
+			padding 14px 16px
+
+			&:not(:last-child)
+				border-bottom solid 1px isDark ? #393f4f : #eee
+
+			> .tag
+				flex 1
+				overflow hidden
+				font-size 14px
+				color isDark ? #9baec8 : #65727b
+
+				> a
+					display block
+					width 100%
+					white-space nowrap
+					overflow hidden
+					text-overflow ellipsis
+					color inherit
+
+				> p
+					margin 0
+					font-size 75%
+					opacity 0.7
+
+			> .chart
+				height 30px
+
+.csqvmxybqbycalfhkxvyfrgbrdalkaoc[data-darkmode]
+	root(true)
+
+.csqvmxybqbycalfhkxvyfrgbrdalkaoc:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/common/views/widgets/hashtags.vue b/src/client/app/common/views/widgets/hashtags.vue
index 56520400b6..0cb6b2df10 100644
--- a/src/client/app/common/views/widgets/hashtags.vue
+++ b/src/client/app/common/views/widgets/hashtags.vue
@@ -4,20 +4,7 @@
 		<template slot="header">%fa:hashtag%%i18n:@title%</template>
 
 		<div class="mkw-hashtags--body" :data-mobile="platform == 'mobile'">
-			<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
-			<p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
-			<!-- トランジションを有効にするとなぜかメモリリークする -->
-			<!-- <transition-group v-else tag="div" name="chart"> -->
-			<div>
-				<div v-for="stat in stats" :key="stat.tag">
-					<div class="tag">
-						<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
-						<p>{{ '%i18n:@count%'.replace('{}', stat.usersCount) }}</p>
-					</div>
-					<x-chart class="chart" :src="stat.chart"/>
-				</div>
-			</div>
-			<!-- </transition-group> -->
+			<mk-trends/>
 		</div>
 	</mk-widget-container>
 </div>
@@ -25,7 +12,6 @@
 
 <script lang="ts">
 import define from '../../../common/define-widget';
-import XChart from './hashtags.chart.vue';
 
 export default define({
 	name: 'hashtags',
@@ -33,89 +19,11 @@ export default define({
 		compact: false
 	})
 }).extend({
-	components: {
-		XChart
-	},
-	data() {
-		return {
-			stats: [],
-			fetching: true,
-			clock: null
-		};
-	},
-	mounted() {
-		this.fetch();
-		this.clock = setInterval(this.fetch, 1000 * 60);
-	},
-	beforeDestroy() {
-		clearInterval(this.clock);
-	},
 	methods: {
 		func() {
 			this.props.compact = !this.props.compact;
 			this.save();
-		},
-		fetch() {
-			(this as any).api('hashtags/trend').then(stats => {
-				this.stats = stats;
-				this.fetching = false;
-			});
 		}
 	}
 });
 </script>
-
-<style lang="stylus" scoped>
-root(isDark)
-	.mkw-hashtags--body
-		> .fetching
-		> .empty
-			margin 0
-			padding 16px
-			text-align center
-			color #aaa
-
-			> [data-fa]
-				margin-right 4px
-
-		> div
-			.chart-move
-				transition transform 1s ease
-
-			> div
-				display flex
-				align-items center
-				padding 14px 16px
-
-				&:not(:last-child)
-					border-bottom solid 1px isDark ? #393f4f : #eee
-
-				> .tag
-					flex 1
-					overflow hidden
-					font-size 14px
-					color isDark ? #9baec8 : #65727b
-
-					> a
-						display block
-						width 100%
-						white-space nowrap
-						overflow hidden
-						text-overflow ellipsis
-						color inherit
-
-					> p
-						margin 0
-						font-size 75%
-						opacity 0.7
-
-				> .chart
-					height 30px
-
-.mkw-hashtags[data-darkmode]
-	root(true)
-
-.mkw-hashtags:not([data-darkmode])
-	root(false)
-
-</style>
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index e67ef16136..481441c3c7 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -8,7 +8,7 @@
 	<mk-forkit class="forkit"/>
 
 	<div class="body">
-		<div class="main">
+		<div class="main block">
 			<h1 v-if="name != 'Misskey'">{{ name }}</h1>
 			<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
 
@@ -27,24 +27,24 @@
 				<span class="divider">|</span>
 				<span class="signin" @click="signin">%i18n:@signin%</span>
 			</p>
-
-			<div class="hashtags">
-				<router-link v-for="tag in tags" :key="tag" :to="`/tags/${ tag }`" :title="tag">#{{ tag }}</router-link>
-			</div>
 		</div>
 
-		<div class="broadcasts">
+		<div class="broadcasts block">
 			<div v-for="broadcast in broadcasts">
 				<h1 v-html="broadcast.title"></h1>
 				<div v-html="broadcast.text"></div>
 			</div>
 		</div>
 
-		<div class="nav">
+		<div class="nav block">
 			<mk-nav class="nav"/>
 		</div>
 
-		<mk-welcome-timeline class="tl" :max="20"/>
+		<div class="side">
+			<mk-trends class="trends block"/>
+
+			<mk-welcome-timeline class="tl block" :max="20"/>
+		</div>
 	</div>
 
 	<modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
@@ -71,8 +71,7 @@ export default Vue.extend({
 			host,
 			name: 'Misskey',
 			description: '',
-			broadcasts: [],
-			tags: []
+			broadcasts: []
 		};
 	},
 	created() {
@@ -86,9 +85,6 @@ export default Vue.extend({
 			this.stats = stats;
 		});
 
-		(this as any).api('hashtags/trend').then(stats => {
-			this.tags = stats.map(x => x.tag);
-		});
 	},
 	methods: {
 		signup() {
@@ -113,7 +109,7 @@ export default Vue.extend({
 	left 15px
 
 .v--modal-overlay
-	background rgba(0, 0, 0, 0.4)
+	background rgba(0, 0, 0, 0.6)
 
 .modal-light
 	.v--modal-box
@@ -162,8 +158,8 @@ root(isDark)
 	> button
 		position fixed
 		z-index 1
-		bottom 64px
-		left 64px
+		bottom 16px
+		left 16px
 		padding 16px
 		font-size 18px
 		color isDark ? #fff : #444
@@ -179,7 +175,7 @@ root(isDark)
 		margin 0 auto
 		padding 64px
 
-		> *
+		.block
 			color isDark ? #fff : #444
 			background isDark ? #313543 : #fff
 			box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
@@ -190,6 +186,7 @@ root(isDark)
 			grid-row 1
 			grid-column 1
 			padding 32px
+			border-top solid 5px $theme-color
 
 			> h1
 				margin 0
@@ -257,12 +254,25 @@ root(isDark)
 			grid-column 1
 			font-size 14px
 
-		> .tl
+		> .side
+			display grid
 			grid-row 1 / 4
 			grid-column 2
-			text-align left
-			max-height 100%
-			overflow auto
+			grid-template-rows 1fr 350px
+			grid-template-columns 1fr
+			gap 16px
+
+			> .tl
+				grid-row 1
+				grid-column 1
+				text-align left
+				max-height 100%
+				overflow auto
+
+			> .trends
+				grid-row 2
+				grid-column 1
+				padding 8px
 
 .mk-welcome[data-darkmode]
 	root(true)

From a9ae9a65c83832d746df030c38ec2344c8176c8f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 02:10:47 +0900
Subject: [PATCH 081/539] 8.24.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index c43f73ecc7..4d4d109527 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.23.0",
-	"clientVersion": "1.0.9287",
+	"version": "8.24.0",
+	"clientVersion": "1.0.9289",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From a5eb19c878b58a9512f2a034d38ea97dec67a9a9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 11:24:39 +0900
Subject: [PATCH 082/539] Support darkmode

---
 .../app/common/views/widgets/broadcast.vue      | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index d3a39bd9cc..e4e77263e5 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mkw-broadcast"
+<div class="anltbovirfeutcigvwgmgxipejaeozxi"
 	:data-found="broadcasts.length != 0"
 	:data-melt="props.design == 1"
 	:data-mobile="platform == 'mobile'"
@@ -25,7 +25,6 @@
 
 <script lang="ts">
 import define from '../../../common/define-widget';
-import { lang } from '../../../config';
 
 export default define({
 	name: 'broadcast',
@@ -67,7 +66,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-.mkw-broadcast
+root(isDark)
 	padding 10px
 	border solid 1px #4078c0
 	border-radius 6px
@@ -134,15 +133,11 @@ export default define({
 		z-index 1
 		margin 0
 		font-size 0.7em
-		color #555
+		color isDark ? #fff : #555
 
 		&.fetching
 			text-align center
 
-		a
-			color #555
-			text-decoration underline
-
 	> a
 		display block
 		font-size 0.7em
@@ -151,4 +146,10 @@ export default define({
 		> p
 			color #fff
 
+.anltbovirfeutcigvwgmgxipejaeozxi[data-darkmode]
+	root(true)
+
+.anltbovirfeutcigvwgmgxipejaeozxi:not([data-darkmode])
+	root(false)
+
 </style>

From f42665d4bc65d9a0a5f58d0a62b384b3e670c2f6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 11:34:36 +0900
Subject: [PATCH 083/539] :art:

---
 .../app/mobile/views/components/notify.vue    | 25 +++++++++++++------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/client/app/mobile/views/components/notify.vue b/src/client/app/mobile/views/components/notify.vue
index 6d4a481dbe..1b93ab87a1 100644
--- a/src/client/app/mobile/views/components/notify.vue
+++ b/src/client/app/mobile/views/components/notify.vue
@@ -1,6 +1,8 @@
 <template>
 <div class="mk-notify">
-	<mk-notification-preview :notification="notification"/>
+	<div>
+		<mk-notification-preview :notification="notification"/>
+	</div>
 </div>
 </template>
 
@@ -22,7 +24,7 @@ export default Vue.extend({
 			setTimeout(() => {
 				anime({
 					targets: this.$el,
-					bottom: '-64px',
+					bottom: '-72px',
 					duration: 500,
 					easing: 'easeOutQuad',
 					complete: () => this.$destroy()
@@ -37,13 +39,22 @@ export default Vue.extend({
 .mk-notify
 	position fixed
 	z-index 1024
-	bottom -64px
+	bottom -72px
 	left 0
+	right 0
 	width 100%
-	height 64px
+	max-width 500px
+	height 72px
+	margin 0 auto
+	padding 8px
 	pointer-events none
-	-webkit-backdrop-filter blur(2px)
-	backdrop-filter blur(2px)
-	background-color rgba(#000, 0.5)
+	font-size 80%
+
+	> div
+		height 100%
+		-webkit-backdrop-filter blur(2px)
+		backdrop-filter blur(2px)
+		background-color rgba(#000, 0.5)
+		border-radius 6px
 
 </style>

From dc1d7fa9d75dcf00a8e04b9f5ebe7c6262e0c597 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 12:58:35 +0900
Subject: [PATCH 084/539] =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB?=
 =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4=E3=83=B3=E3=82=B9?=
 =?UTF-8?q?=E3=83=88=E3=83=AA=E3=83=BC=E3=83=A0=E3=81=AB=E8=AA=8D=E8=A8=BC?=
 =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=A7=E6=8E=A5=E7=B6=9A=E3=81=A7=E3=81=8D?=
 =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/stream/local-timeline.ts | 6 +++---
 src/server/api/streaming.ts             | 6 +++++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts
index 82060a7aaa..25e0e00c9f 100644
--- a/src/server/api/stream/local-timeline.ts
+++ b/src/server/api/stream/local-timeline.ts
@@ -9,10 +9,10 @@ export default async function(
 	request: websocket.request,
 	connection: websocket.connection,
 	subscriber: Xev,
-	user: IUser
+	user?: IUser
 ) {
-	const mute = await Mute.find({ muterId: user._id });
-	const mutedUserIds = mute.map(m => m.muteeId.toString());
+	const mute = user ? await Mute.find({ muterId: user._id }) : null;
+	const mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
 
 	// Subscribe stream
 	subscriber.on('local-timeline', async note => {
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index c8b2d4e0b9..e6094a40b2 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -52,6 +52,11 @@ module.exports = (server: http.Server) => {
 			return;
 		}
 
+		if (request.resourceURL.pathname === '/local-timeline') {
+			localTimelineStream(request, connection, ev, user);
+			return;
+		}
+
 		if (user == null) {
 			connection.send('authentication-failed');
 			connection.close();
@@ -60,7 +65,6 @@ module.exports = (server: http.Server) => {
 
 		const channel: any =
 			request.resourceURL.pathname === '/' ? homeStream :
-			request.resourceURL.pathname === '/local-timeline' ? localTimelineStream :
 			request.resourceURL.pathname === '/hybrid-timeline' ? hybridTimelineStream :
 			request.resourceURL.pathname === '/global-timeline' ? globalTimelineStream :
 			request.resourceURL.pathname === '/user-list' ? userListStream :

From ba64de334afa9f38ead7285de3193f3b6e58fe75 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 12:58:43 +0900
Subject: [PATCH 085/539] Fix bug

---
 .../common/scripts/streaming/games/reversi/reversi-game.ts  | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts b/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
index e6b02fcfdb..adfa75ff3b 100644
--- a/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
+++ b/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
@@ -3,8 +3,10 @@ import MiOS from '../../../../../mios';
 
 export class ReversiGameStream extends Stream {
 	constructor(os: MiOS, me, game) {
-		super(os, 'games/reversi-game', {
-			i: me ? me.token : null,
+		super(os, 'games/reversi-game', me ? {
+			i: me.token,
+			game: game.id
+		} : {
 			game: game.id
 		});
 	}

From 6abff253ea718acc73ba3d1feca53161923319ae Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 12:59:34 +0900
Subject: [PATCH 086/539] =?UTF-8?q?=E3=83=88=E3=83=83=E3=83=97=E3=83=9A?=
 =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9?=
 =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=92=E3=83=AA=E3=82=A2=E3=83=AB=E3=82=BF?=
 =?UTF-8?q?=E3=82=A4=E3=83=A0=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B=E3=82=88?=
 =?UTF-8?q?=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../scripts/streaming/local-timeline.ts       |  4 +--
 .../views/components/welcome-timeline.vue     | 30 ++++++++++++++++---
 src/client/app/mios.ts                        |  6 ++--
 3 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/src/client/app/common/scripts/streaming/local-timeline.ts b/src/client/app/common/scripts/streaming/local-timeline.ts
index 2834262bdc..41c36aa14c 100644
--- a/src/client/app/common/scripts/streaming/local-timeline.ts
+++ b/src/client/app/common/scripts/streaming/local-timeline.ts
@@ -7,9 +7,9 @@ import MiOS from '../../../mios';
  */
 export class LocalTimelineStream extends Stream {
 	constructor(os: MiOS, me) {
-		super(os, 'local-timeline', {
+		super(os, 'local-timeline', me ? {
 			i: me.token
-		});
+		} : {});
 	}
 }
 
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index 5a8b9df476..d4e7902c7b 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -31,15 +31,30 @@ export default Vue.extend({
 			default: undefined
 		}
 	},
+
 	data() {
 		return {
 			fetching: true,
-			notes: []
+			notes: [],
+			connection: null,
+			connectionId: null
 		};
 	},
+
 	mounted() {
 		this.fetch();
+
+		this.connection = (this as any).os.streams.localTimelineStream.getConnection();
+		this.connectionId = (this as any).os.streams.localTimelineStream.use();
+
+		this.connection.on('note', this.onNote);
 	},
+
+	beforeDestroy() {
+		this.connection.off('note', this.onNote);
+		(this as any).os.streams.localTimelineStream.dispose(this.connectionId);
+	},
+
 	methods: {
 		fetch(cb?) {
 			this.fetching = true;
@@ -49,13 +64,20 @@ export default Vue.extend({
 				reply: false,
 				renote: false,
 				media: false,
-				poll: false,
-				bot: false
+				poll: false
 			}).then(notes => {
 				this.notes = notes;
 				this.fetching = false;
 			});
-		}
+		},
+
+		onNote(note) {
+			if (note.replyId != null) return;
+			if (note.renoteId != null) return;
+			if (note.poll != null) return;
+
+			this.notes.unshift(note);
+		},
 	}
 });
 </script>
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index 664848b5e7..c2ec7f1750 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -3,7 +3,7 @@ import { EventEmitter } from 'eventemitter3';
 import * as uuid from 'uuid';
 
 import initStore from './store';
-import { apiUrl, swPublickey, version, lang, googleMapsApiKey } from './config';
+import { apiUrl, version, lang } from './config';
 import Progress from './common/scripts/loading';
 import Connection from './common/scripts/streaming/stream';
 import { HomeStreamManager } from './common/scripts/streaming/home';
@@ -230,13 +230,13 @@ export default class MiOS extends EventEmitter {
 		//#region Init stream managers
 		this.streams.serverStatsStream = new ServerStatsStreamManager(this);
 		this.streams.notesStatsStream = new NotesStatsStreamManager(this);
+		this.streams.localTimelineStream = new LocalTimelineStreamManager(this, this.store.state.i);
 
 		this.once('signedin', () => {
 			// Init home stream manager
 			this.stream = new HomeStreamManager(this, this.store.state.i);
 
 			// Init other stream manager
-			this.streams.localTimelineStream = new LocalTimelineStreamManager(this, this.store.state.i);
 			this.streams.hybridTimelineStream = new HybridTimelineStreamManager(this, this.store.state.i);
 			this.streams.globalTimelineStream = new GlobalTimelineStreamManager(this, this.store.state.i);
 			this.streams.driveStream = new DriveStreamManager(this, this.store.state.i);
@@ -361,7 +361,7 @@ export default class MiOS extends EventEmitter {
 
 				// A public key your push server will use to send
 				// messages to client apps via a push server.
-				applicationServerKey: urlBase64ToUint8Array(swPublickey)
+				applicationServerKey: urlBase64ToUint8Array(this.meta.data.swPublickey)
 			};
 
 			// Subscribe push notification

From 977200b7cd38191944cf9e078c7bff00314f9d78 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 12:59:40 +0900
Subject: [PATCH 087/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 481441c3c7..0bc5c256e0 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -172,6 +172,7 @@ root(isDark)
 		width 100%
 		max-width 1200px
 		height 100vh
+		min-height 800px
 		margin 0 auto
 		padding 64px
 

From 199573ccee68a9507e64221611b485e1c242a7f6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 13:03:16 +0900
Subject: [PATCH 088/539] #2566

---
 src/server/api/endpoints/meta.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 2b39f26b8e..b0876eaafd 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -33,6 +33,7 @@ export default () => new Promise(async (res, rej) => {
 		},
 		broadcasts: meta.broadcasts,
 		disableRegistration: meta.disableRegistration,
+		driveCapacityPerLocalUserMb: config.localDriveCapacityMb,
 		recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null,
 		swPublickey: config.sw ? config.sw.public_key : null
 	});

From 921609cab162906cff1be52164c4d0ef3f70bf2f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 13:07:09 +0900
Subject: [PATCH 089/539] 8.25.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 4d4d109527..6238613e35 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.24.0",
-	"clientVersion": "1.0.9289",
+	"version": "8.25.0",
+	"clientVersion": "1.0.9297",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 5b039a1beea20d300d1cb2579674383ac763176d Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 4 Sep 2018 17:44:21 +0900
Subject: [PATCH 090/539] Add User-Agent header (#2602)

---
 src/config/load.ts                    | 2 ++
 src/config/types.ts                   | 1 +
 src/remote/activitypub/request.ts     | 1 +
 src/remote/activitypub/resolver.ts    | 3 ++-
 src/services/drive/upload-from-url.ts | 7 ++++++-
 5 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/config/load.ts b/src/config/load.ts
index 8929cf8d3e..3a1bac3201 100644
--- a/src/config/load.ts
+++ b/src/config/load.ts
@@ -7,6 +7,7 @@ import { URL } from 'url';
 import * as yaml from 'js-yaml';
 import { Source, Mixin } from './types';
 import isUrl = require('is-url');
+const pkg = require('../../package.json');
 
 /**
  * Path of configuration directory
@@ -43,6 +44,7 @@ export default function load() {
 	mixin.stats_url = `${mixin.scheme}://${mixin.host}/stats`;
 	mixin.status_url = `${mixin.scheme}://${mixin.host}/status`;
 	mixin.drive_url = `${mixin.scheme}://${mixin.host}/files`;
+	mixin.user_agent = `Misskey/${pkg.version} (${config.url})`;
 
 	if (config.localDriveCapacityMb == null) config.localDriveCapacityMb = 256;
 	if (config.remoteDriveCapacityMb == null) config.remoteDriveCapacityMb = 8;
diff --git a/src/config/types.ts b/src/config/types.ts
index a1dc9a5bd4..003185accd 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -114,6 +114,7 @@ export type Mixin = {
 	status_url: string;
 	dev_url: string;
 	drive_url: string;
+	user_agent: string;
 };
 
 export type Config = Source & Mixin;
diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts
index d739d08e15..07f0ecca8b 100644
--- a/src/remote/activitypub/request.ts
+++ b/src/remote/activitypub/request.ts
@@ -27,6 +27,7 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 		method: 'POST',
 		path: pathname + search,
 		headers: {
+			'User-Agent': config.user_agent,
 			'Content-Type': 'application/activity+json',
 			'Digest': `SHA-256=${hash}`
 		}
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index 0b053ca774..9bbe474d35 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -1,7 +1,7 @@
 import * as request from 'request-promise-native';
 import * as debug from 'debug';
 import { IObject } from './type';
-//import config from '../../config';
+import config from '../../config';
 
 const log = debug('misskey:activitypub:resolver');
 
@@ -51,6 +51,7 @@ export default class Resolver {
 		const object = await request({
 			url: value,
 			headers: {
+				'User-Agent': config.user_agent,
 				Accept: 'application/activity+json, application/ld+json'
 			},
 			json: true
diff --git a/src/services/drive/upload-from-url.ts b/src/services/drive/upload-from-url.ts
index 4e297d3bb1..0cf21ea5a2 100644
--- a/src/services/drive/upload-from-url.ts
+++ b/src/services/drive/upload-from-url.ts
@@ -34,7 +34,12 @@ export default async (url: string, user: IUser, folderId: mongodb.ObjectID = nul
 	// write content at URL to temp file
 	await new Promise((res, rej) => {
 		const writable = fs.createWriteStream(path);
-		request(url)
+		request({
+			url,
+			headers: {
+				'User-Agent': config.user_agent
+			}
+		})
 			.on('error', rej)
 			.on('end', () => {
 				writable.close();

From a0735b0e7a843ef383de486968abdf07c3429814 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Tue, 4 Sep 2018 18:15:58 +0900
Subject: [PATCH 091/539] fix(package): update webpack to version 4.17.2
 (#2599)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 6238613e35..b53345b9d0 100644
--- a/package.json
+++ b/package.json
@@ -221,7 +221,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.17.1",
+		"webpack": "4.17.2",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.26",
 		"ws": "6.0.0",

From eaec936fa6a53d0fd1004a613ea09f482198f366 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 4 Sep 2018 18:33:16 +0900
Subject: [PATCH 092/539] Fix remote follow (#2606)

---
 src/client/app/common/views/pages/follow.vue              | 2 +-
 src/client/app/desktop/views/components/follow-button.vue | 8 +++++---
 src/client/app/mobile/views/components/follow-button.vue  | 4 +++-
 src/models/user.ts                                        | 4 ++--
 src/services/following/create.ts                          | 7 +------
 src/services/following/requests/accept.ts                 | 2 ++
 src/services/following/requests/create.ts                 | 2 --
 src/services/following/requests/reject.ts                 | 5 ++++-
 8 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index ec74b3a9b9..05c1329f6d 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -83,7 +83,7 @@ export default Vue.extend({
 						userId: this.user.id
 					});
 				} else {
-					if (this.user.isLocked && this.user.hasPendingFollowRequestFromYou) {
+					if (this.user.hasPendingFollowRequestFromYou) {
 						this.user = await (this as any).api('following/requests/cancel', {
 							userId: this.user.id
 						});
diff --git a/src/client/app/desktop/views/components/follow-button.vue b/src/client/app/desktop/views/components/follow-button.vue
index 62742a8f39..1db4b0cfa4 100644
--- a/src/client/app/desktop/views/components/follow-button.vue
+++ b/src/client/app/desktop/views/components/follow-button.vue
@@ -55,13 +55,15 @@ export default Vue.extend({
 	methods: {
 		onFollow(user) {
 			if (user.id == this.u.id) {
-				this.user.isFollowing = user.isFollowing;
+				this.u.isFollowing = user.isFollowing;
+				this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
 			}
 		},
 
 		onUnfollow(user) {
 			if (user.id == this.u.id) {
-				this.user.isFollowing = user.isFollowing;
+				this.u.isFollowing = user.isFollowing;
+				this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
 			}
 		},
 
@@ -74,7 +76,7 @@ export default Vue.extend({
 						userId: this.u.id
 					});
 				} else {
-					if (this.u.isLocked && this.u.hasPendingFollowRequestFromYou) {
+					if (this.u.hasPendingFollowRequestFromYou) {
 						this.u = await (this as any).api('following/requests/cancel', {
 							userId: this.u.id
 						});
diff --git a/src/client/app/mobile/views/components/follow-button.vue b/src/client/app/mobile/views/components/follow-button.vue
index 360ee91d4b..ff7260edb5 100644
--- a/src/client/app/mobile/views/components/follow-button.vue
+++ b/src/client/app/mobile/views/components/follow-button.vue
@@ -48,12 +48,14 @@ export default Vue.extend({
 		onFollow(user) {
 			if (user.id == this.u.id) {
 				this.u.isFollowing = user.isFollowing;
+				this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
 			}
 		},
 
 		onUnfollow(user) {
 			if (user.id == this.u.id) {
 				this.u.isFollowing = user.isFollowing;
+				this.u.hasPendingFollowRequestFromYou = user.hasPendingFollowRequestFromYou;
 			}
 		},
 
@@ -66,7 +68,7 @@ export default Vue.extend({
 						userId: this.u.id
 					});
 				} else {
-					if (this.u.isLocked && this.u.hasPendingFollowRequestFromYou) {
+					if (this.u.hasPendingFollowRequestFromYou) {
 						this.u = await (this as any).api('following/requests/cancel', {
 							userId: this.u.id
 						});
diff --git a/src/models/user.ts b/src/models/user.ts
index 31d09bc8f8..8f3fbbdc8f 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -432,10 +432,10 @@ export const pack = (
 				followerId: _user.id,
 				followeeId: meId
 			}),
-			_user.isLocked ? FollowRequest.findOne({
+			FollowRequest.findOne({
 				followerId: meId,
 				followeeId: _user.id
-			}) : Promise.resolve(null),
+			}),
 			FollowRequest.findOne({
 				followerId: _user.id,
 				followeeId: meId
diff --git a/src/services/following/create.ts b/src/services/following/create.ts
index bd39b8e183..dd2fa544dc 100644
--- a/src/services/following/create.ts
+++ b/src/services/following/create.ts
@@ -11,7 +11,7 @@ import { deliver } from '../../queue';
 import createFollowRequest from './requests/create';
 
 export default async function(follower: IUser, followee: IUser) {
-	if (followee.isLocked) {
+	if (followee.isLocked || isLocalUser(follower) && isRemoteUser(followee)) {
 		await createFollowRequest(follower, followee);
 	} else {
 		const following = await Following.insert({
@@ -72,11 +72,6 @@ export default async function(follower: IUser, followee: IUser) {
 			notify(followee._id, follower._id, 'follow');
 		}
 
-		if (isLocalUser(follower) && isRemoteUser(followee)) {
-			const content = pack(renderFollow(follower, followee));
-			deliver(follower, content, followee.inbox);
-		}
-
 		if (isRemoteUser(follower) && isLocalUser(followee)) {
 			const content = pack(renderAccept(renderFollow(follower, followee)));
 			deliver(followee, content, follower.inbox);
diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts
index bf8ed99e13..5e38879a49 100644
--- a/src/services/following/requests/accept.ts
+++ b/src/services/following/requests/accept.ts
@@ -75,4 +75,6 @@ export default async function(followee: IUser, follower: IUser) {
 	packUser(followee, followee, {
 		detail: true
 	}).then(packed => publishUserStream(followee._id, 'meUpdated', packed));
+
+	packUser(followee, follower).then(packed => publishUserStream(follower._id, 'follow', packed));
 }
diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts
index 4c7c90cc08..946c22568c 100644
--- a/src/services/following/requests/create.ts
+++ b/src/services/following/requests/create.ts
@@ -7,8 +7,6 @@ import { deliver } from '../../../queue';
 import FollowRequest from '../../../models/follow-request';
 
 export default async function(follower: IUser, followee: IUser) {
-	if (!followee.isLocked) throw '対象のアカウントは鍵アカウントではありません';
-
 	await FollowRequest.insert({
 		createdAt: new Date(),
 		followerId: follower._id,
diff --git a/src/services/following/requests/reject.ts b/src/services/following/requests/reject.ts
index affcd2ef5a..eda6716321 100644
--- a/src/services/following/requests/reject.ts
+++ b/src/services/following/requests/reject.ts
@@ -1,9 +1,10 @@
-import User, { IUser, isRemoteUser, ILocalUser } from '../../../models/user';
+import User, { IUser, isRemoteUser, ILocalUser, pack as packUser } from '../../../models/user';
 import FollowRequest from '../../../models/follow-request';
 import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
 import renderReject from '../../../remote/activitypub/renderer/reject';
 import { deliver } from '../../../queue';
+import { publishUserStream } from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	if (isRemoteUser(follower)) {
@@ -21,4 +22,6 @@ export default async function(followee: IUser, follower: IUser) {
 			pendingReceivedFollowRequestsCount: -1
 		}
 	});
+
+	packUser(followee, follower).then(packed => publishUserStream(follower._id, 'unfollow', packed));
 }

From d279f8e9ffa5f192e205fa3b96933155f1cd180a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 4 Sep 2018 19:19:51 +0900
Subject: [PATCH 093/539] :art:

---
 src/client/app/mobile/views/components/notify.vue | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/client/app/mobile/views/components/notify.vue b/src/client/app/mobile/views/components/notify.vue
index 1b93ab87a1..4d9b7c0f6b 100644
--- a/src/client/app/mobile/views/components/notify.vue
+++ b/src/client/app/mobile/views/components/notify.vue
@@ -24,7 +24,7 @@ export default Vue.extend({
 			setTimeout(() => {
 				anime({
 					targets: this.$el,
-					bottom: '-72px',
+					bottom: `-${this.$el.offsetHeight}px`,
 					duration: 500,
 					easing: 'easeOutQuad',
 					complete: () => this.$destroy()
@@ -37,14 +37,16 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .mk-notify
+	$height = 78px
+
 	position fixed
 	z-index 1024
-	bottom -72px
+	bottom -($height)
 	left 0
 	right 0
 	width 100%
 	max-width 500px
-	height 72px
+	height $height
 	margin 0 auto
 	padding 8px
 	pointer-events none
@@ -55,6 +57,7 @@ export default Vue.extend({
 		-webkit-backdrop-filter blur(2px)
 		backdrop-filter blur(2px)
 		background-color rgba(#000, 0.5)
-		border-radius 6px
+		border-radius 7px
+		overflow hidden
 
 </style>

From 2555e23b107bb2c38e068e5f2f9da568a2adb375 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Tue, 4 Sep 2018 20:01:15 +0900
Subject: [PATCH 094/539] wip

---
 .../common/views/components/media-list.vue    |  1 +
 .../desktop/views/components/media-audio.vue  | 68 +++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 src/client/app/desktop/views/components/media-audio.vue

diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index cdfc2c8d3c..c531f9ac91 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -3,6 +3,7 @@
 	<div :data-count="mediaList.length" ref="grid">
 		<template v-for="media in mediaList">
 			<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')" :inline-playable="mediaList.length === 1"/>
+			<mk-media-audio :video="media" :key="media.id" v-if="media.type.startsWith('audio')" :inline-playable="mediaList.length === 1"/>
 			<mk-media-image :image="media" :key="media.id" v-else :raw="raw"/>
 		</template>
 	</div>
diff --git a/src/client/app/desktop/views/components/media-audio.vue b/src/client/app/desktop/views/components/media-audio.vue
new file mode 100644
index 0000000000..4a0c26fb9e
--- /dev/null
+++ b/src/client/app/desktop/views/components/media-audio.vue
@@ -0,0 +1,68 @@
+<template>
+<div class="abunaiaudionankasirankedoichioux" v-if="audio.isSensitive && hide" @click="hide = false">
+	<div>
+		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
+		<span>%i18n:@click-to-show%</span>
+	</div>
+</div>
+<div class="komeijiokayusabanomisoniohitashi" v-else>
+	<audio class="audio"
+		:src="audio.url"
+		:title="audio.name"
+		controls
+		ref="audio"
+		v-if="inlinePlayable" />
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+	props: {
+		audio: {
+			type: Object,
+			required: true
+		},
+		inlinePlayable: {
+			default: false
+		},
+		hide: {
+			type: Boolean,
+			default: true
+		}
+	},
+	computed: {
+		imageStyle(): any {
+			return {
+				'background-image': `url(${this.audio.url})`
+			};
+		}
+	}
+})
+</script>
+
+<style lang="stylus" scoped>
+.komeijiokayusabanomisoniohitashi
+	.audio
+		display block
+		width 100%
+		height 100%
+		border-radius 4px
+
+.abunaiaudionankasirankedoichioux
+	display flex
+	justify-content center
+	align-items center
+	background #111
+	color #fff
+
+	> div
+		display table-cell
+		text-align center
+		font-size 12px
+
+		> b
+			display block
+
+</style>

From dd3e3ddcdd69136023cb39a769d7785fac6696be Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Tue, 4 Sep 2018 20:21:36 +0900
Subject: [PATCH 095/539] wip

---
 locales/ja-JP.yml                             |  5 ++
 .../common/views/components/media-list.vue    |  3 +-
 .../views/components/media-download.vue       | 79 +++++++++++++++++++
 3 files changed, 86 insertions(+), 1 deletion(-)
 create mode 100644 src/client/app/desktop/views/components/media-download.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index a57f724a32..af1ef601af 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -583,6 +583,11 @@ desktop/views/components/media-video.vue:
   sensitive: "閲覧注意"
   click-to-show: "クリックして表示"
 
+desktop/views/components/media-download.vue:
+  sensitive: "閲覧注意"
+  click-to-show: "クリックして表示"
+  download: "ダウンロード"
+
 desktop/views/components/follow-button.vue:
   following: "フォロー中"
   follow: "フォロー"
diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index cdfc2c8d3c..41b8bf9bb7 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -3,7 +3,8 @@
 	<div :data-count="mediaList.length" ref="grid">
 		<template v-for="media in mediaList">
 			<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')" :inline-playable="mediaList.length === 1"/>
-			<mk-media-image :image="media" :key="media.id" v-else :raw="raw"/>
+			<mk-media-image :image="media" :key="media.id" v-if="media.type.startsWith('image')" :raw="raw"/>
+			<mk-media-download :download="media" :key="media.id" v-else :raw="raw"/>
 		</template>
 	</div>
 </div>
diff --git a/src/client/app/desktop/views/components/media-download.vue b/src/client/app/desktop/views/components/media-download.vue
new file mode 100644
index 0000000000..236b065204
--- /dev/null
+++ b/src/client/app/desktop/views/components/media-download.vue
@@ -0,0 +1,79 @@
+<template>
+<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="download.isSensitive && hide" @click="hide = false">
+	<div>
+		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
+		<span>%i18n:@click-to-show%</span>
+	</div>
+</div>
+<a class="reiujibreakfastbreadbaconeggnuts" v-else
+	:href="download.url"
+	:style="style"
+	:title="download.name"
+	download="{{ download.name }}{{ download.ext }}"
+>
+	<div>
+		<div>%fa:download%</div>
+		<div>%i18n:@download%</div>
+		<div>{{ download.name }}{{ download.ext }}</div>
+	</div>
+</a>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+	props: {
+		download: {
+			type: Object,
+			required: true
+		},
+		raw: {
+			default: false
+		},
+		hide: {
+			type: Boolean,
+			default: true
+		}
+	},
+	computed: {
+		style(): any {
+			return {
+				'background-color': this.download.properties.avgColor && this.download.properties.avgColor.length == 3 ? `rgb(${this.download.properties.avgColor.join(',')})` : 'transparent',
+				'background-download': this.raw ? `url(${this.download.url})` : `url(${this.download.thumbnailUrl})`
+			};
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+.reiujibreakfastbreadbaconeggnuts
+	display flex
+	justify-content center
+	align-items center
+
+	> div
+		display table-cell
+		text-align center
+		font-size 12px
+
+		> *
+			display block
+
+.ldwbgwstjsdgcjruamauqdrffetqudry
+	display flex
+	justify-content center
+	align-items center
+	background #111
+	color #fff
+
+	> div
+		display table-cell
+		text-align center
+		font-size 12px
+
+		> *
+			display block
+
+</style>

From 8bcfa97349b73b3c9759cad7b1678a02bc36e2f9 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Tue, 4 Sep 2018 21:06:02 +0900
Subject: [PATCH 096/539] wip

---
 locales/ja-JP.yml                                       | 4 ++++
 src/client/app/common/views/components/media-list.vue   | 2 +-
 src/client/app/desktop/views/components/index.ts        | 2 ++
 src/client/app/desktop/views/components/media-audio.vue | 3 +--
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index a57f724a32..f04495ed95 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -583,6 +583,10 @@ desktop/views/components/media-video.vue:
   sensitive: "閲覧注意"
   click-to-show: "クリックして表示"
 
+desktop/views/components/media-audio.vue:
+  sensitive: "閲覧注意"
+  click-to-show: "クリックして表示"
+
 desktop/views/components/follow-button.vue:
   following: "フォロー中"
   follow: "フォロー"
diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index c531f9ac91..4408ba2792 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -3,7 +3,7 @@
 	<div :data-count="mediaList.length" ref="grid">
 		<template v-for="media in mediaList">
 			<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')" :inline-playable="mediaList.length === 1"/>
-			<mk-media-audio :video="media" :key="media.id" v-if="media.type.startsWith('audio')" :inline-playable="mediaList.length === 1"/>
+			<mk-media-audio :audio="media" :key="media.id" v-if="media.type.startsWith('audio')" :inline-playable="mediaList.length === 1"/>
 			<mk-media-image :image="media" :key="media.id" v-else :raw="raw"/>
 		</template>
 	</div>
diff --git a/src/client/app/desktop/views/components/index.ts b/src/client/app/desktop/views/components/index.ts
index 7b7a38afa2..159ead4983 100644
--- a/src/client/app/desktop/views/components/index.ts
+++ b/src/client/app/desktop/views/components/index.ts
@@ -13,6 +13,7 @@ import ellipsisIcon from './ellipsis-icon.vue';
 import mediaImage from './media-image.vue';
 import mediaImageDialog from './media-image-dialog.vue';
 import mediaVideo from './media-video.vue';
+import mediaAudio from './media-audio.vue';
 import notifications from './notifications.vue';
 import noteForm from './post-form.vue';
 import renoteForm from './renote-form.vue';
@@ -43,6 +44,7 @@ Vue.component('mk-ellipsis-icon', ellipsisIcon);
 Vue.component('mk-media-image', mediaImage);
 Vue.component('mk-media-image-dialog', mediaImageDialog);
 Vue.component('mk-media-video', mediaVideo);
+Vue.component('mk-media-audio', mediaAudio);
 Vue.component('mk-notifications', notifications);
 Vue.component('mk-post-form', noteForm);
 Vue.component('mk-renote-form', renoteForm);
diff --git a/src/client/app/desktop/views/components/media-audio.vue b/src/client/app/desktop/views/components/media-audio.vue
index 4a0c26fb9e..5d41947b17 100644
--- a/src/client/app/desktop/views/components/media-audio.vue
+++ b/src/client/app/desktop/views/components/media-audio.vue
@@ -10,8 +10,7 @@
 		:src="audio.url"
 		:title="audio.name"
 		controls
-		ref="audio"
-		v-if="inlinePlayable" />
+		ref="audio" />
 </div>
 </template>
 

From ebeaef94e2545098ee81f143503180defa731793 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Wed, 5 Sep 2018 01:08:18 +0900
Subject: [PATCH 097/539] Improve media list

---
 locales/ja-JP.yml                             |  13 +--
 .../app/common/views/components/index.ts      |   2 +
 .../common/views/components/media-banner.vue  |  85 ++++++++++++++
 .../common/views/components/media-list.vue    | 109 +++++++++---------
 .../app/desktop/views/components/index.ts     |   2 -
 .../desktop/views/components/media-audio.vue  |  67 -----------
 .../views/components/media-download.vue       |  79 -------------
 .../desktop/views/components/media-image.vue  |   2 +-
 .../desktop/views/components/media-video.vue  |  21 +---
 .../mobile/views/components/media-image.vue   |   2 +-
 10 files changed, 152 insertions(+), 230 deletions(-)
 create mode 100644 src/client/app/common/views/components/media-banner.vue
 delete mode 100644 src/client/app/desktop/views/components/media-audio.vue
 delete mode 100644 src/client/app/desktop/views/components/media-download.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 193c3c5022..de5505e7db 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -250,6 +250,10 @@ common/views/components/connect-failed.troubleshooter.vue:
   flush: "キャッシュの削除"
   set-version: "バージョン指定"
 
+common/views/components/media-banner.vue:
+  sensitive: "閲覧注意"
+  click-to-show: "クリックして表示"
+
 common/views/components/messaging.vue:
   search-user: "ユーザーを探す"
   you: "あなた"
@@ -583,15 +587,6 @@ desktop/views/components/media-video.vue:
   sensitive: "閲覧注意"
   click-to-show: "クリックして表示"
 
-desktop/views/components/media-audio.vue:
-  sensitive: "閲覧注意"
-  click-to-show: "クリックして表示"
-
-desktop/views/components/media-download.vue:
-  sensitive: "閲覧注意"
-  click-to-show: "クリックして表示"
-  download: "ダウンロード"
-
 desktop/views/components/follow-button.vue:
   following: "フォロー中"
   follow: "フォロー"
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 4700b6269e..43cde6c54f 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -18,6 +18,7 @@ import reactionsViewer from './reactions-viewer.vue';
 import time from './time.vue';
 import timer from './timer.vue';
 import mediaList from './media-list.vue';
+import mediaBanner from './media-banner.vue';
 import uploader from './uploader.vue';
 import specialMessage from './special-message.vue';
 import streamIndicator from './stream-indicator.vue';
@@ -59,6 +60,7 @@ Vue.component('mk-reactions-viewer', reactionsViewer);
 Vue.component('mk-time', time);
 Vue.component('mk-timer', timer);
 Vue.component('mk-media-list', mediaList);
+Vue.component('mk-media-banner', mediaBanner);
 Vue.component('mk-uploader', uploader);
 Vue.component('mk-special-message', specialMessage);
 Vue.component('mk-stream-indicator', streamIndicator);
diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
new file mode 100644
index 0000000000..69cd579446
--- /dev/null
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -0,0 +1,85 @@
+<template>
+<div class="mk-media-banner">
+	<div class="mk-media-banner-sensitive" v-if="media.isSensitive && hide" @click="hide = false">
+		<span class="mk-media-banner-icon">%fa:exclamation-triangle%</span>
+		<b>%i18n:@sensitive%</b>
+		<span>%i18n:@click-to-show%</span>
+	</div>
+	<div class="mk-media-banner-audio" v-else-if="media.type.startsWith('audio')">
+		<audio class="audio"
+			:src="media.url"
+			:title="media.name"
+			controls
+			ref="audio"
+			preload="metadata" />
+	</div>
+	<a class="mk-media-banner-download" v-else
+		:href="media.url"
+		:title="media.name"
+		:download="media.name"
+	>
+		<span class="mk-media-banner-icon">%fa:download%</span>
+		<b>{{ media.name }}</b>
+	</a>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+	props: {
+		media: {
+			type: Object,
+			required: true
+		},
+		hide: {
+			type: Boolean,
+			default: true
+		}
+	}
+})
+</script>
+
+<style lang="stylus" scoped>
+.mk-media-banner
+	width 100%
+	border-radius 4px
+	margin-top 4px
+	overflow hidden
+
+	.mk-media-banner-download,
+	.mk-media-banner-sensitive
+		display flex
+		align-items center
+		font-size 12px
+		padding .2em .6em
+		white-space nowrap
+
+		> *
+			display block
+
+		> b
+			flex-shrink 2147483647
+			overflow hidden
+			text-overflow ellipsis
+
+		> *:not(:last-child)
+			margin-right .2em
+
+		> .mk-media-banner-icon
+			font-size 1.6em
+
+	.mk-media-banner-download
+		background #f7f7f7
+
+	.mk-media-banner-sensitive
+		background #111
+		color #fff
+
+	.mk-media-banner-audio
+		.audio
+			display block
+			width 100%
+			height 100%
+</style>
diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index 0312c2dfda..e949c063ab 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -1,12 +1,15 @@
 <template>
 <div class="mk-media-list">
-	<div :data-count="mediaList.length" ref="grid">
-		<template v-for="media in mediaList">
-			<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')" :inline-playable="mediaList.length === 1"/>
-			<mk-media-audio :audio="media" :key="media.id" v-else-if="media.type.startsWith('audio')"/>
-			<mk-media-image :image="media" :key="media.id" v-else-if="media.type.startsWith('image')" :raw="raw"/>
-			<mk-media-download :download="media" :key="media.id" v-else/>
-		</template>
+	<template v-for="media in mediaList">
+		<mk-media-banner :media="media" :key="media.id" v-if="!media.type.startsWith('image') && !media.type.startsWith('video')"/>
+	</template>
+	<div class="mk-media-list-fixed" v-if="mediaList.filter(media => media.type.startsWith('image') || media.type.startsWith('video')).length > 0">
+		<div :data-count="mediaList.filter(media => media.type.startsWith('video') || media.type.startsWith('image')).length" ref="grid">
+			<template v-for="media in mediaList">
+				<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')"/>
+				<mk-media-image :image="media" :key="media.id" v-else-if="media.type.startsWith('image')" :raw="raw"/>
+			</template>
+		</div>
 	</div>
 </div>
 </template>
@@ -32,62 +35,64 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .mk-media-list
-	width 100%
+	> .mk-media-list-fixed
+		width 100%
+		margin-top 4px
 
-	&:before
-		content ''
-		display block
-		padding-top 56.25% // 16:9
+		&:before
+			content ''
+			display block
+			padding-top 56.25% // 16:9
 
-	> div
-		position absolute
-		top 0
-		right 0
-		bottom 0
-		left 0
-		display grid
-		grid-gap 4px
+		> div
+			position absolute
+			top 0
+			right 0
+			bottom 0
+			left 0
+			display grid
+			grid-gap 4px
 
-		> *
-			overflow hidden
-			border-radius 4px
+			> *
+				overflow hidden
+				border-radius 4px
 
-		&[data-count="1"]
-			grid-template-rows 1fr
+			&[data-count="1"]
+				grid-template-rows 1fr
 
-		&[data-count="2"]
-			grid-template-columns 1fr 1fr
-			grid-template-rows 1fr
+			&[data-count="2"]
+				grid-template-columns 1fr 1fr
+				grid-template-rows 1fr
 
-		&[data-count="3"]
-			grid-template-columns 1fr 0.5fr
-			grid-template-rows 1fr 1fr
+			&[data-count="3"]
+				grid-template-columns 1fr 0.5fr
+				grid-template-rows 1fr 1fr
+
+				> *:nth-child(1)
+					grid-row 1 / 3
+
+				> *:nth-child(3)
+					grid-column 2 / 3
+					grid-row 2 / 3
+
+			&[data-count="4"]
+				grid-template-columns 1fr 1fr
+				grid-template-rows 1fr 1fr
 
 			> *:nth-child(1)
-				grid-row 1 / 3
+				grid-column 1 / 2
+				grid-row 1 / 2
+
+			> *:nth-child(2)
+				grid-column 2 / 3
+				grid-row 1 / 2
 
 			> *:nth-child(3)
+				grid-column 1 / 2
+				grid-row 2 / 3
+
+			> *:nth-child(4)
 				grid-column 2 / 3
 				grid-row 2 / 3
 
-		&[data-count="4"]
-			grid-template-columns 1fr 1fr
-			grid-template-rows 1fr 1fr
-
-		> *:nth-child(1)
-			grid-column 1 / 2
-			grid-row 1 / 2
-
-		> *:nth-child(2)
-			grid-column 2 / 3
-			grid-row 1 / 2
-
-		> *:nth-child(3)
-			grid-column 1 / 2
-			grid-row 2 / 3
-
-		> *:nth-child(4)
-			grid-column 2 / 3
-			grid-row 2 / 3
-
 </style>
diff --git a/src/client/app/desktop/views/components/index.ts b/src/client/app/desktop/views/components/index.ts
index 159ead4983..7b7a38afa2 100644
--- a/src/client/app/desktop/views/components/index.ts
+++ b/src/client/app/desktop/views/components/index.ts
@@ -13,7 +13,6 @@ import ellipsisIcon from './ellipsis-icon.vue';
 import mediaImage from './media-image.vue';
 import mediaImageDialog from './media-image-dialog.vue';
 import mediaVideo from './media-video.vue';
-import mediaAudio from './media-audio.vue';
 import notifications from './notifications.vue';
 import noteForm from './post-form.vue';
 import renoteForm from './renote-form.vue';
@@ -44,7 +43,6 @@ Vue.component('mk-ellipsis-icon', ellipsisIcon);
 Vue.component('mk-media-image', mediaImage);
 Vue.component('mk-media-image-dialog', mediaImageDialog);
 Vue.component('mk-media-video', mediaVideo);
-Vue.component('mk-media-audio', mediaAudio);
 Vue.component('mk-notifications', notifications);
 Vue.component('mk-post-form', noteForm);
 Vue.component('mk-renote-form', renoteForm);
diff --git a/src/client/app/desktop/views/components/media-audio.vue b/src/client/app/desktop/views/components/media-audio.vue
deleted file mode 100644
index 5d41947b17..0000000000
--- a/src/client/app/desktop/views/components/media-audio.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-<div class="abunaiaudionankasirankedoichioux" v-if="audio.isSensitive && hide" @click="hide = false">
-	<div>
-		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
-		<span>%i18n:@click-to-show%</span>
-	</div>
-</div>
-<div class="komeijiokayusabanomisoniohitashi" v-else>
-	<audio class="audio"
-		:src="audio.url"
-		:title="audio.name"
-		controls
-		ref="audio" />
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-
-export default Vue.extend({
-	props: {
-		audio: {
-			type: Object,
-			required: true
-		},
-		inlinePlayable: {
-			default: false
-		},
-		hide: {
-			type: Boolean,
-			default: true
-		}
-	},
-	computed: {
-		imageStyle(): any {
-			return {
-				'background-image': `url(${this.audio.url})`
-			};
-		}
-	}
-})
-</script>
-
-<style lang="stylus" scoped>
-.komeijiokayusabanomisoniohitashi
-	.audio
-		display block
-		width 100%
-		height 100%
-		border-radius 4px
-
-.abunaiaudionankasirankedoichioux
-	display flex
-	justify-content center
-	align-items center
-	background #111
-	color #fff
-
-	> div
-		display table-cell
-		text-align center
-		font-size 12px
-
-		> b
-			display block
-
-</style>
diff --git a/src/client/app/desktop/views/components/media-download.vue b/src/client/app/desktop/views/components/media-download.vue
deleted file mode 100644
index 236b065204..0000000000
--- a/src/client/app/desktop/views/components/media-download.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="download.isSensitive && hide" @click="hide = false">
-	<div>
-		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
-		<span>%i18n:@click-to-show%</span>
-	</div>
-</div>
-<a class="reiujibreakfastbreadbaconeggnuts" v-else
-	:href="download.url"
-	:style="style"
-	:title="download.name"
-	download="{{ download.name }}{{ download.ext }}"
->
-	<div>
-		<div>%fa:download%</div>
-		<div>%i18n:@download%</div>
-		<div>{{ download.name }}{{ download.ext }}</div>
-	</div>
-</a>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-
-export default Vue.extend({
-	props: {
-		download: {
-			type: Object,
-			required: true
-		},
-		raw: {
-			default: false
-		},
-		hide: {
-			type: Boolean,
-			default: true
-		}
-	},
-	computed: {
-		style(): any {
-			return {
-				'background-color': this.download.properties.avgColor && this.download.properties.avgColor.length == 3 ? `rgb(${this.download.properties.avgColor.join(',')})` : 'transparent',
-				'background-download': this.raw ? `url(${this.download.url})` : `url(${this.download.thumbnailUrl})`
-			};
-		}
-	}
-});
-</script>
-
-<style lang="stylus" scoped>
-.reiujibreakfastbreadbaconeggnuts
-	display flex
-	justify-content center
-	align-items center
-
-	> div
-		display table-cell
-		text-align center
-		font-size 12px
-
-		> *
-			display block
-
-.ldwbgwstjsdgcjruamauqdrffetqudry
-	display flex
-	justify-content center
-	align-items center
-	background #111
-	color #fff
-
-	> div
-		display table-cell
-		text-align center
-		font-size 12px
-
-		> *
-			display block
-
-</style>
diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 0284872c68..904dc7f832 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -89,7 +89,7 @@ export default Vue.extend({
 		text-align center
 		font-size 12px
 
-		> b
+		> *
 			display block
 
 </style>
diff --git a/src/client/app/desktop/views/components/media-video.vue b/src/client/app/desktop/views/components/media-video.vue
index 6c60f2da96..0a374acb8f 100644
--- a/src/client/app/desktop/views/components/media-video.vue
+++ b/src/client/app/desktop/views/components/media-video.vue
@@ -6,19 +6,11 @@
 	</div>
 </div>
 <div class="vwxdhznewyashiknzolsoihtlpicqepe" v-else>
-	<video class="video"
-		:src="video.url"
-		:title="video.name"
-		controls
-		@dblclick.prevent="onClick"
-		ref="video"
-		v-if="inlinePlayable" />
 	<a class="thumbnail"
 		:href="video.url"
 		:style="imageStyle"
 		@click.prevent="onClick"
-		:title="video.name"
-		v-else>
+		:title="video.name">
 		%fa:R play-circle%
 	</a>
 </div>
@@ -34,9 +26,6 @@ export default Vue.extend({
 			type: Object,
 			required: true
 		},
-		inlinePlayable: {
-			default: false
-		},
 		hide: {
 			type: Boolean,
 			default: true
@@ -68,12 +57,6 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .vwxdhznewyashiknzolsoihtlpicqepe
-	.video
-		display block
-		width 100%
-		height 100%
-		border-radius 4px
-
 	.thumbnail
 		display flex
 		justify-content center
@@ -99,7 +82,7 @@ export default Vue.extend({
 		text-align center
 		font-size 12px
 
-		> b
+		> *
 			display block
 
 </style>
diff --git a/src/client/app/mobile/views/components/media-image.vue b/src/client/app/mobile/views/components/media-image.vue
index e40069bbe3..c8766f5464 100644
--- a/src/client/app/mobile/views/components/media-image.vue
+++ b/src/client/app/mobile/views/components/media-image.vue
@@ -65,7 +65,7 @@ export default Vue.extend({
 		text-align center
 		font-size 12px
 
-		> b
+		> *
 			display block
 
 </style>

From f539491502e4969d43736e7e3e0f2493a2afaf25 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 5 Sep 2018 12:47:13 +0900
Subject: [PATCH 098/539] fix(package): update vue-js-modal to version 1.3.26
 (#2613)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index b53345b9d0..c5c363798e 100644
--- a/package.json
+++ b/package.json
@@ -210,7 +210,7 @@
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
 		"vue-cropperjs": "2.2.1",
-		"vue-js-modal": "1.3.25",
+		"vue-js-modal": "1.3.26",
 		"vue-json-tree-view": "2.1.4",
 		"vue-loader": "15.4.1",
 		"vue-router": "3.0.1",

From a38ce86f87d72573dedcd1b09d7cea885715f9dc Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 5 Sep 2018 12:47:30 +0900
Subject: [PATCH 099/539] fix(package): update systeminformation to version
 3.45.0 (#2609)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c5c363798e..6664c91b0e 100644
--- a/package.json
+++ b/package.json
@@ -194,7 +194,7 @@
 		"stylus": "0.54.5",
 		"stylus-loader": "3.0.2",
 		"summaly": "2.2.0",
-		"systeminformation": "3.44.2",
+		"systeminformation": "3.45.0",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",
 		"tmp": "0.0.33",

From 4bce6f14f3a4df30495b0db7add39c69a9ea55ed Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 5 Sep 2018 12:48:00 +0900
Subject: [PATCH 100/539] fix(package): update node-sass-json-importer to
 version 4.0.0 (#2614)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 6664c91b0e..2bfd0cc27a 100644
--- a/package.json
+++ b/package.json
@@ -161,7 +161,7 @@
 		"nan": "2.11.0",
 		"nested-property": "0.0.7",
 		"node-sass": "4.9.3",
-		"node-sass-json-importer": "3.3.1",
+		"node-sass-json-importer": "4.0.0",
 		"nprogress": "0.2.0",
 		"object-assign-deep": "0.4.0",
 		"on-build-webpack": "0.1.0",

From 7c5bc03492a475eac1008d67869cba8dcbc78a07 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 12:53:08 +0900
Subject: [PATCH 101/539] Update langs

---
 locales/index.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/locales/index.js b/locales/index.js
index 1f28d3ff03..6780251e10 100644
--- a/locales/index.js
+++ b/locales/index.js
@@ -5,7 +5,7 @@
 const fs = require('fs');
 const yaml = require('js-yaml');
 
-const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES'];
+const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES', 'nl-NL'];
 
 const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
 const locales = langs.map(lang => ({ [lang]: loadLocale(lang) }));

From f77eaaa08ab99533b4d3709ecb104c6974802525 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 13:06:49 +0900
Subject: [PATCH 102/539] Improve usability

---
 .../app/mobile/views/components/post-form-dialog.vue     | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/src/client/app/mobile/views/components/post-form-dialog.vue b/src/client/app/mobile/views/components/post-form-dialog.vue
index 6fe9249321..ec37386512 100644
--- a/src/client/app/mobile/views/components/post-form-dialog.vue
+++ b/src/client/app/mobile/views/components/post-form-dialog.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="ulveipglmagnxfgvitaxyszerjwiqmwl">
-	<div class="bg" ref="bg" @click="onBgClick"></div>
-	<div class="main" ref="main" @click.self="onBgClick">
+	<div class="bg" ref="bg"></div>
+	<div class="main" ref="main">
 		<mk-post-form ref="form"
 			:reply="reply"
 			:renote="renote"
@@ -83,11 +83,6 @@ export default Vue.extend({
 			});
 		},
 
-		onBgClick() {
-			this.$emit('cancel');
-			this.close();
-		},
-
 		onPosted() {
 			this.$emit('posted');
 			this.close();

From 6fea2f52f10f4cb9f6cfb9210917c615a9423307 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 13:47:26 +0900
Subject: [PATCH 103/539] nanka iroiro

---
 locales/ja-JP.yml                             |   3 +
 .../app/common/views/components/ui/card.vue   |  27 +++-
 .../app/common/views/components/ui/radio.vue  |   2 +-
 .../app/common/views/components/ui/switch.vue |   7 ++
 .../app/mobile/views/components/notify.vue    |  18 ++-
 .../app/mobile/views/pages/settings.vue       | 118 +++++++++++-------
 .../views/pages/settings/settings.profile.vue |  68 +++++-----
 src/client/app/store.ts                       |   3 +-
 8 files changed, 155 insertions(+), 91 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index a57f724a32..1b73c825bb 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1355,6 +1355,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/src/client/app/common/views/components/ui/card.vue b/src/client/app/common/views/components/ui/card.vue
index 05c51bca6b..aa16b557e1 100644
--- a/src/client/app/common/views/components/ui/card.vue
+++ b/src/client/app/common/views/components/ui/card.vue
@@ -24,19 +24,34 @@ export default Vue.extend({
 
 root(isDark)
 	margin 16px
-	padding 16px
 	color isDark ? #fff : #000
 	background isDark ? #282C37 : #fff
 	box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
 
-	@media (min-width 500px)
-		padding 32px
-
 	> header
-		font-weight normal
-		font-size 24px
+		padding 16px
+		font-weight bold
+		font-size 20px
 		color isDark ? #fff : #444
 
+		@media (min-width 500px)
+			padding 24px 32px
+
+	> section
+		padding 20px 16px
+		border-top solid 1px isDark ? rgba(#000, 0.3) : rgba(#000, 0.1)
+
+		@media (min-width 500px)
+			padding 32px
+
+		&.fit-top
+			padding-top 0
+
+		> header
+			margin-bottom 16px
+			font-weight bold
+			color isDark ? #fff : #444
+
 .ui-card[data-darkmode]
 	root(true)
 
diff --git a/src/client/app/common/views/components/ui/radio.vue b/src/client/app/common/views/components/ui/radio.vue
index 04a46c5a96..dcdda1cf0e 100644
--- a/src/client/app/common/views/components/ui/radio.vue
+++ b/src/client/app/common/views/components/ui/radio.vue
@@ -55,7 +55,7 @@ export default Vue.extend({
 
 root(isDark)
 	display inline-block
-	margin 32px 32px 32px 0
+	margin 0 32px 0 0
 	cursor pointer
 	transition all 0.3s
 
diff --git a/src/client/app/common/views/components/ui/switch.vue b/src/client/app/common/views/components/ui/switch.vue
index a9e00d73d2..e88b867801 100644
--- a/src/client/app/common/views/components/ui/switch.vue
+++ b/src/client/app/common/views/components/ui/switch.vue
@@ -64,6 +64,12 @@ root(isDark)
 	cursor pointer
 	transition all 0.3s
 
+	&:first-child
+		margin-top 0
+
+	&:last-child
+		margin-bottom 0
+
 	> *
 		user-select none
 
@@ -89,6 +95,7 @@ root(isDark)
 
 	> .button
 		display inline-block
+		flex-shrink 0
 		margin 3px 0 0 0
 		width 34px
 		height 14px
diff --git a/src/client/app/mobile/views/components/notify.vue b/src/client/app/mobile/views/components/notify.vue
index 4d9b7c0f6b..7a2f7bfedc 100644
--- a/src/client/app/mobile/views/components/notify.vue
+++ b/src/client/app/mobile/views/components/notify.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mk-notify">
+<div class="mk-notify" :class="pos">
 	<div>
 		<mk-notification-preview :notification="notification"/>
 	</div>
@@ -12,11 +12,16 @@ import * as anime from 'animejs';
 
 export default Vue.extend({
 	props: ['notification'],
+	computed: {
+		pos() {
+			return this.$store.state.device.mobileNotificationPosition;
+		}
+	},
 	mounted() {
 		this.$nextTick(() => {
 			anime({
 				targets: this.$el,
-				bottom: '0px',
+				[this.pos]: '0px',
 				duration: 500,
 				easing: 'easeOutQuad'
 			});
@@ -24,7 +29,7 @@ export default Vue.extend({
 			setTimeout(() => {
 				anime({
 					targets: this.$el,
-					bottom: `-${this.$el.offsetHeight}px`,
+					[this.pos]: `-${this.$el.offsetHeight}px`,
 					duration: 500,
 					easing: 'easeOutQuad',
 					complete: () => this.$destroy()
@@ -41,7 +46,6 @@ export default Vue.extend({
 
 	position fixed
 	z-index 1024
-	bottom -($height)
 	left 0
 	right 0
 	width 100%
@@ -52,6 +56,12 @@ export default Vue.extend({
 	pointer-events none
 	font-size 80%
 
+	&.bottom
+		bottom -($height)
+
+	&.top
+		top -($height)
+
 	> div
 		height 100%
 		-webkit-backdrop-filter blur(2px)
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 838ffd2a6b..4a148dc9d2 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -10,80 +10,101 @@
 			<ui-card>
 				<div slot="title">%fa:palette% %i18n:@design%</div>
 
-				<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
-				<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
-				<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
-				<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
-				<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
-				<ui-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
+				<section>
+					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
+					<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
+					<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
+					<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
+					<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
+					<ui-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
+				</section>
 
-				<div>
-					<div>%i18n:@timeline%</div>
-					<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch>
-					<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch>
-					<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
-					<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
-				</div>
+				<section>
+					<header>%i18n:@timeline%</header>
+					<div>
+						<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch>
+						<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch>
+						<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
+						<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
+					</div>
+				</section>
 
-				<div>
-					<div>%i18n:@post-style%</div>
+				<section>
+					<header>%i18n:@post-style%</header>
 					<ui-radio v-model="postStyle" value="standard">%i18n:@post-style-standard%</ui-radio>
 					<ui-radio v-model="postStyle" value="smart">%i18n:@post-style-smart%</ui-radio>
-				</div>
+				</section>
+
+				<section>
+					<header>%i18n:@notification-position%</header>
+					<ui-radio v-model="mobileNotificationPosition" value="bottom">%i18n:@notification-position-bottom%</ui-radio>
+					<ui-radio v-model="mobileNotificationPosition" value="top">%i18n:@notification-position-top%</ui-radio>
+				</section>
 			</ui-card>
 
 			<ui-card>
 				<div slot="title">%fa:cog% %i18n:@behavior%</div>
-				<ui-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
-				<ui-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
-				<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
-				<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
-				<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
+
+				<section>
+					<ui-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
+					<ui-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
+					<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
+					<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
+					<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
+				</section>
 			</ui-card>
 
 			<ui-card>
 				<div slot="title">%fa:volume-up% %i18n:@sound%</div>
 
-				<ui-switch v-model="enableSounds">%i18n:@enable-sounds%</ui-switch>
+				<section>
+					<ui-switch v-model="enableSounds">%i18n:@enable-sounds%</ui-switch>
+				</section>
 			</ui-card>
 
 			<ui-card>
 				<div slot="title">%fa:language% %i18n:@lang%</div>
 
-				<ui-select v-model="lang" placeholder="%i18n:@auto%">
-					<optgroup label="%i18n:@recommended%">
-						<option value="">%i18n:@auto%</option>
-					</optgroup>
+				<section class="fit-top">
+					<ui-select v-model="lang" placeholder="%i18n:@auto%">
+						<optgroup label="%i18n:@recommended%">
+							<option value="">%i18n:@auto%</option>
+						</optgroup>
 
-					<optgroup label="%i18n:@specify-language%">
-						<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
-					</optgroup>
-				</ui-select>
-				<span>%fa:info-circle% %i18n:@lang-tip%</span>
+						<optgroup label="%i18n:@specify-language%">
+							<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
+						</optgroup>
+					</ui-select>
+					<span>%fa:info-circle% %i18n:@lang-tip%</span>
+				</section>
 			</ui-card>
 
 			<ui-card>
 				<div slot="title">%fa:B twitter% %i18n:@twitter%</div>
 
-				<p class="account" v-if="$store.state.i.twitter"><a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
-				<p>
-					<a :href="`${apiUrl}/connect/twitter`" target="_blank">{{ $store.state.i.twitter ? '%i18n:@twitter-reconnect%' : '%i18n:@twitter-connect%' }}</a>
-					<span v-if="$store.state.i.twitter"> or </span>
-					<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter">%i18n:@twitter-disconnect%</a>
-				</p>
+				<section>
+					<p class="account" v-if="$store.state.i.twitter"><a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
+					<p>
+						<a :href="`${apiUrl}/connect/twitter`" target="_blank">{{ $store.state.i.twitter ? '%i18n:@twitter-reconnect%' : '%i18n:@twitter-connect%' }}</a>
+						<span v-if="$store.state.i.twitter"> or </span>
+						<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter">%i18n:@twitter-disconnect%</a>
+					</p>
+				</section>
 			</ui-card>
 
 			<ui-card>
 				<div slot="title">%fa:sync-alt% %i18n:@update%</div>
 
-				<div>%i18n:@version% <i>{{ version }}</i></div>
-				<template v-if="latestVersion !== undefined">
-					<div>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></div>
-				</template>
-				<ui-button @click="checkForUpdate" :disabled="checkingForUpdate">
-					<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
-					<template v-else>%i18n:@check-for-updates%</template>
-				</ui-button>
+				<section>
+					<div>%i18n:@version% <i>{{ version }}</i></div>
+					<template v-if="latestVersion !== undefined">
+						<div>%i18n:@latest-version% <i>{{ latestVersion ? latestVersion : version }}</i></div>
+					</template>
+					<ui-button @click="checkForUpdate" :disabled="checkingForUpdate">
+						<template v-if="checkingForUpdate">%i18n:@update-checking%<mk-ellipsis/></template>
+						<template v-else>%i18n:@check-for-updates%</template>
+					</ui-button>
+				</section>
 			</ui-card>
 		</div>
 
@@ -134,6 +155,11 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
 		},
 
+		mobileNotificationPosition: {
+			get() { return this.$store.state.device.mobileNotificationPosition; },
+			set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
+		},
+
 		lightmode: {
 			get() { return this.$store.state.device.lightmode; },
 			set(value) { this.$store.commit('device/set', { key: 'lightmode', value }); }
@@ -273,7 +299,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	margin 0 auto
-	max-width 500px
+	max-width 600px
 	width 100%
 
 	> .signin-as
diff --git a/src/client/app/mobile/views/pages/settings/settings.profile.vue b/src/client/app/mobile/views/pages/settings/settings.profile.vue
index 3b797cdde1..3efeac3da5 100644
--- a/src/client/app/mobile/views/pages/settings/settings.profile.vue
+++ b/src/client/app/mobile/views/pages/settings/settings.profile.vue
@@ -2,47 +2,49 @@
 <ui-card>
 	<div slot="title">%fa:user% %i18n:@title%</div>
 
-	<ui-form :disabled="saving">
-		<ui-input v-model="name" :max="30">
-			<span>%i18n:@name%</span>
-		</ui-input>
+	<section class="fit-top">
+		<ui-form :disabled="saving">
+			<ui-input v-model="name" :max="30">
+				<span>%i18n:@name%</span>
+			</ui-input>
 
-		<ui-input v-model="username" readonly>
-			<span>%i18n:@account%</span>
-			<span slot="prefix">@</span>
-			<span slot="suffix">@{{ host }}</span>
-		</ui-input>
+			<ui-input v-model="username" readonly>
+				<span>%i18n:@account%</span>
+				<span slot="prefix">@</span>
+				<span slot="suffix">@{{ host }}</span>
+			</ui-input>
 
-		<ui-input v-model="location">
-			<span>%i18n:@location%</span>
-			<span slot="prefix">%fa:map-marker-alt%</span>
-		</ui-input>
+			<ui-input v-model="location">
+				<span>%i18n:@location%</span>
+				<span slot="prefix">%fa:map-marker-alt%</span>
+			</ui-input>
 
-		<ui-input v-model="birthday" type="date">
-			<span>%i18n:@birthday%</span>
-			<span slot="prefix">%fa:birthday-cake%</span>
-		</ui-input>
+			<ui-input v-model="birthday" type="date">
+				<span>%i18n:@birthday%</span>
+				<span slot="prefix">%fa:birthday-cake%</span>
+			</ui-input>
 
-		<ui-textarea v-model="description" :max="500">
-			<span>%i18n:@description%</span>
-		</ui-textarea>
+			<ui-textarea v-model="description" :max="500">
+				<span>%i18n:@description%</span>
+			</ui-textarea>
 
-		<ui-input type="file" @change="onAvatarChange">
-			<span>%i18n:@avatar%</span>
-			<span slot="icon">%fa:image%</span>
-			<span slot="text" v-if="avatarUploading">%i18n:@uploading%<mk-ellipsis/></span>
-		</ui-input>
+			<ui-input type="file" @change="onAvatarChange">
+				<span>%i18n:@avatar%</span>
+				<span slot="icon">%fa:image%</span>
+				<span slot="text" v-if="avatarUploading">%i18n:@uploading%<mk-ellipsis/></span>
+			</ui-input>
 
-		<ui-input type="file" @change="onBannerChange">
-			<span>%i18n:@banner%</span>
-			<span slot="icon">%fa:image%</span>
-			<span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span>
-		</ui-input>
+			<ui-input type="file" @change="onBannerChange">
+				<span>%i18n:@banner%</span>
+				<span slot="icon">%fa:image%</span>
+				<span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span>
+			</ui-input>
 
-		<ui-switch v-model="isCat">%i18n:@is-cat%</ui-switch>
+			<ui-switch v-model="isCat">%i18n:@is-cat%</ui-switch>
 
-		<ui-button @click="save">%i18n:@save%</ui-button>
-	</ui-form>
+			<ui-button @click="save">%i18n:@save%</ui-button>
+		</ui-form>
+	</section>
 </ui-card>
 </template>
 
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 469563495f..53f3eefc08 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -43,7 +43,8 @@ const defaultDeviceSettings = {
 	debug: false,
 	lightmode: false,
 	loadRawImages: false,
-	postStyle: 'standard'
+	postStyle: 'standard',
+	mobileNotificationPosition: 'bottom'
 };
 
 export default (os: MiOS) => new Vuex.Store({

From 1915ccabdd99f45d708122ff52a2c2070cef40bc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 13:49:08 +0900
Subject: [PATCH 104/539] 8.26.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 2bfd0cc27a..7cfca8480e 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.25.0",
-	"clientVersion": "1.0.9297",
+	"version": "8.26.0",
+	"clientVersion": "1.0.9358",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From f83f8631accb2455fe03fbcbb1711fdb829d163a Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 5 Sep 2018 13:56:59 +0900
Subject: [PATCH 105/539] fix(package): update systeminformation to version
 3.45.1 (#2616)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 7cfca8480e..70124a0ae4 100644
--- a/package.json
+++ b/package.json
@@ -194,7 +194,7 @@
 		"stylus": "0.54.5",
 		"stylus-loader": "3.0.2",
 		"summaly": "2.2.0",
-		"systeminformation": "3.45.0",
+		"systeminformation": "3.45.1",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",
 		"tmp": "0.0.33",

From 8b490b9b94511e85dd37ab655d5ccead71ba6a4e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 16:48:59 +0900
Subject: [PATCH 106/539] #2607

---
 src/db/elasticsearch.ts | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/db/elasticsearch.ts b/src/db/elasticsearch.ts
index 4acff40793..ee5769d1d4 100644
--- a/src/db/elasticsearch.ts
+++ b/src/db/elasticsearch.ts
@@ -4,6 +4,12 @@ import config from '../config';
 const index = {
 	settings: {
 		analysis: {
+			normalizer: {
+				lowercase_normalizer: {
+					type: 'custom',
+					filter: ['lowercase']
+				}
+			},
 			analyzer: {
 				bigram: {
 					tokenizer: 'bigram_tokenizer'
@@ -24,7 +30,8 @@ const index = {
 				text: {
 					type: 'text',
 					index: true,
-					analyzer: 'bigram'
+					analyzer: 'bigram',
+					normalizer: 'lowercase_normalizer'
 				}
 			}
 		}

From ff8d300ea84a5ee4294123768789ddcab13819da Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 17:43:31 +0900
Subject: [PATCH 107/539] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB?=
 =?UTF-8?q?=E7=89=88=E3=81=AE=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AB?=
 =?UTF-8?q?=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B=E3=82=92=E8=A1=A8=E7=A4=BA?=
 =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../app/mobile/views/components/ui.nav.vue    | 33 ++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 54eed1b6d4..83a8eb4392 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -34,6 +34,12 @@
 					<li @click="dark"><p><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template><span>%i18n:@darkmode%</span></p></li>
 				</ul>
 			</div>
+			<div class="announcements" v-if="announcements.length > 0">
+				<article v-for="announcement in announcements">
+					<span v-html="announcement.title" class="title"></span>
+					<div v-html="announcement.text"></div>
+				</article>
+			</div>
 			<a :href="aboutUrl"><p class="about">%i18n:@about%</p></a>
 		</div>
 	</transition>
@@ -46,23 +52,32 @@ import { lang } from '../../../config';
 
 export default Vue.extend({
 	props: ['isOpen'],
+
 	data() {
 		return {
 			hasGameInvitation: false,
 			connection: null,
 			connectionId: null,
-			aboutUrl: `/docs/${lang}/about`
+			aboutUrl: `/docs/${lang}/about`,
+			announcements: []
 		};
 	},
+
 	computed: {
 		hasUnreadNotification(): boolean {
 			return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadNotification;
 		},
+
 		hasUnreadMessagingMessage(): boolean {
 			return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadMessagingMessage;
 		}
 	},
+
 	mounted() {
+		(this as any).os.getMeta().then(meta => {
+			this.announcements = meta.broadcasts;
+		});
+
 		if (this.$store.getters.isSignedIn) {
 			this.connection = (this as any).os.stream.getConnection();
 			this.connectionId = (this as any).os.stream.use();
@@ -71,6 +86,7 @@ export default Vue.extend({
 			this.connection.on('reversi_no_invites', this.onReversiNoInvites);
 		}
 	},
+
 	beforeDestroy() {
 		if (this.$store.getters.isSignedIn) {
 			this.connection.off('reversi_invited', this.onReversiInvited);
@@ -78,18 +94,22 @@ export default Vue.extend({
 			(this as any).os.stream.dispose(this.connectionId);
 		}
 	},
+
 	methods: {
 		search() {
 			const query = window.prompt('%i18n:@search%');
 			if (query == null || query == '') return;
 			this.$router.push(`/search?q=${encodeURIComponent(query)}`);
 		},
+
 		onReversiInvited() {
 			this.hasGameInvitation = true;
 		},
+
 		onReversiNoInvites() {
 			this.hasGameInvitation = false;
 		},
+
 		dark() {
 			this.$store.commit('device/set', {
 				key: 'darkmode',
@@ -204,6 +224,17 @@ root(isDark)
 					color $color
 					opacity 0.5
 
+	.announcements
+		> article
+			background isDark ? rgba(30, 129, 216, 0.2) : rgba(155, 196, 232, 0.2)
+			color isDark ? #fff : #3f4967
+			padding 16px
+			margin 8px 0
+			font-size 12px
+
+			> .title
+				font-weight bold
+
 	.about
 		margin 0 0 8px 0
 		padding 1em 0

From 299f83684bbced1cabd36836ca37ccc1684ce750 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Wed, 5 Sep 2018 18:01:47 +0900
Subject: [PATCH 108/539] media-banner darkmode

---
 src/client/app/common/views/components/media-banner.vue | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 69cd579446..48b0d03d30 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -70,7 +70,10 @@ export default Vue.extend({
 		> .mk-media-banner-icon
 			font-size 1.6em
 
-	.mk-media-banner-download
+	.mk-media-banner-download[data-darkmode]
+		background #21242d
+
+	.mk-media-banner-download:not([data-darkmode])
 		background #f7f7f7
 
 	.mk-media-banner-sensitive

From db943df0c8fbded2a2d5a8f56927c173e6aba931 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 18:09:31 +0900
Subject: [PATCH 109/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 0bc5c256e0..b7a39fbdb8 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -172,7 +172,7 @@ root(isDark)
 		width 100%
 		max-width 1200px
 		height 100vh
-		min-height 800px
+		min-height 1000px
 		margin 0 auto
 		padding 64px
 

From a1b82e97230eab994c06fc7c902e71539664d3d7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 19:32:46 +0900
Subject: [PATCH 110/539] #2620

---
 package.json                                  |  2 +-
 .../app/common/scripts/parse-search-query.ts  | 53 -------------------
 .../views/components/welcome-timeline.vue     |  2 +-
 .../desktop/views/components/note-detail.vue  |  6 +--
 .../desktop/views/components/notes.note.vue   |  6 +--
 .../app/desktop/views/components/notes.vue    |  2 +-
 .../views/components/post-form-window.vue     | 10 ++--
 .../desktop/views/components/post-form.vue    | 16 +++---
 .../views/components/sub-note-content.vue     |  6 +--
 .../desktop/views/pages/deck/deck.list-tl.vue |  6 +--
 .../desktop/views/pages/deck/deck.note.vue    | 16 +++---
 .../desktop/views/pages/deck/deck.notes.vue   |  2 +-
 .../app/desktop/views/pages/deck/deck.tl.vue  |  6 +--
 .../desktop/views/pages/user/user.photos.vue  |  6 +--
 .../views/pages/user/user.timeline.vue        |  4 +-
 .../app/desktop/views/widgets/trends.vue      |  2 +-
 .../mobile/views/components/note-detail.vue   |  8 +--
 .../app/mobile/views/components/note.vue      |  8 +--
 .../app/mobile/views/components/notes.vue     |  2 +-
 .../app/mobile/views/components/post-form.vue |  8 +--
 .../views/components/sub-note-content.vue     |  6 +--
 .../mobile/views/components/user-timeline.vue |  4 +-
 .../mobile/views/pages/user/home.photos.vue   |  2 +-
 src/docs/api/entities/note.yaml               | 12 ++---
 src/misc/get-note-summary.ts                  |  6 +--
 src/misc/is-quote.ts                          |  2 +-
 src/models/drive-file.ts                      |  2 +-
 src/models/note.ts                            | 26 +++++++--
 src/remote/activitypub/models/note.ts         |  6 +--
 src/remote/activitypub/renderer/note.ts       |  4 +-
 src/server/activitypub/outbox.ts              |  2 +-
 src/server/api/endpoints/notes.ts             | 10 ++--
 src/server/api/endpoints/notes/create.ts      | 23 +++++---
 .../api/endpoints/notes/global-timeline.ts    | 10 ++--
 .../api/endpoints/notes/hybrid-timeline.ts    | 12 ++---
 .../api/endpoints/notes/local-timeline.ts     | 10 ++--
 .../api/endpoints/notes/search_by_tag.ts      |  6 +--
 src/server/api/endpoints/notes/timeline.ts    | 12 ++---
 src/server/api/endpoints/notes/trend.ts       |  2 +-
 .../api/endpoints/notes/user-list-timeline.ts | 12 ++---
 src/server/api/endpoints/users/notes.ts       | 10 ++--
 src/services/note/create.ts                   | 11 ++--
 src/services/note/delete.ts                   |  2 +-
 43 files changed, 167 insertions(+), 196 deletions(-)
 delete mode 100644 src/client/app/common/scripts/parse-search-query.ts

diff --git a/package.json b/package.json
index 70124a0ae4..775c997e55 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.26.0",
+	"version": "9.0.0",
 	"clientVersion": "1.0.9358",
 	"codename": "nighthike",
 	"main": "./built/index.js",
diff --git a/src/client/app/common/scripts/parse-search-query.ts b/src/client/app/common/scripts/parse-search-query.ts
deleted file mode 100644
index 5f6ae3320a..0000000000
--- a/src/client/app/common/scripts/parse-search-query.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-export default function(qs: string) {
-	const q = {
-		text: ''
-	};
-
-	qs.split(' ').forEach(x => {
-		if (/^([a-z_]+?):(.+?)$/.test(x)) {
-			const [key, value] = x.split(':');
-			switch (key) {
-				case 'user':
-					q['includeUserUsernames'] = value.split(',');
-					break;
-				case 'exclude_user':
-					q['excludeUserUsernames'] = value.split(',');
-					break;
-				case 'follow':
-					q['following'] = value == 'null' ? null : value == 'true';
-					break;
-				case 'reply':
-					q['reply'] = value == 'null' ? null : value == 'true';
-					break;
-				case 'renote':
-					q['renote'] = value == 'null' ? null : value == 'true';
-					break;
-				case 'media':
-					q['media'] = value == 'null' ? null : value == 'true';
-					break;
-				case 'poll':
-					q['poll'] = value == 'null' ? null : value == 'true';
-					break;
-				case 'until':
-				case 'since':
-					// YYYY-MM-DD
-					if (/^[0-9]+\-[0-9]+\-[0-9]+$/) {
-						const [yyyy, mm, dd] = value.split('-');
-						q[`${key}_date`] = (new Date(parseInt(yyyy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10))).getTime();
-					}
-					break;
-				default:
-					q[key] = value;
-					break;
-			}
-		} else {
-			q.text += x + ' ';
-		}
-	});
-
-	if (q.text) {
-		q.text = q.text.trim();
-	}
-
-	return q;
-}
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index d4e7902c7b..b427721d37 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -63,7 +63,7 @@ export default Vue.extend({
 				local: true,
 				reply: false,
 				renote: false,
-				media: false,
+				file: false,
 				poll: false
 			}).then(notes => {
 				this.notes = notes;
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 1ba4a9a447..a61a004a85 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -42,8 +42,8 @@
 				<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
 				<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
 			</div>
-			<div class="media" v-if="p.media.length > 0">
-				<mk-media-list :media-list="p.media" :raw="true"/>
+			<div class="files" v-if="p.files.length > 0">
+				<mk-media-list :media-list="p.files" :raw="true"/>
 			</div>
 			<mk-poll v-if="p.poll" :note="p"/>
 			<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
@@ -114,7 +114,7 @@ export default Vue.extend({
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
-				this.note.mediaIds.length == 0 &&
+				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
 		p(): any {
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 7592ae3905..1d6b2048ba 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -28,8 +28,8 @@
 						<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i" :class="$style.text"/>
 						<a class="rp" v-if="p.renote">RP:</a>
 					</div>
-					<div class="media" v-if="p.media.length > 0">
-						<mk-media-list :media-list="p.media"/>
+					<div class="files" v-if="p.files.length > 0">
+						<mk-media-list :media-list="p.files"/>
 					</div>
 					<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
 					<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
@@ -110,7 +110,7 @@ export default Vue.extend({
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
-				this.note.mediaIds.length == 0 &&
+				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
 
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index a1c1207a7b..f19ecf8f9a 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -122,7 +122,7 @@ export default Vue.extend({
 		prepend(note, silent = false) {
 			//#region 弾く
 			const isMyNote = note.userId == this.$store.state.i.id;
-			const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
+			const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
 
 			if (this.$store.state.settings.showMyRenotes === false) {
 				if (isMyNote && isPureRenote) {
diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue
index 51a416e281..a88c96d1bf 100644
--- a/src/client/app/desktop/views/components/post-form-window.vue
+++ b/src/client/app/desktop/views/components/post-form-window.vue
@@ -4,7 +4,7 @@
 		<span class="icon" v-if="geo">%fa:map-marker-alt%</span>
 		<span v-if="!reply">%i18n:@note%</span>
 		<span v-if="reply">%i18n:@reply%</span>
-		<span class="count" v-if="media.length != 0">{{ '%i18n:@attaches%'.replace('{}', media.length) }}</span>
+		<span class="count" v-if="files.length != 0">{{ '%i18n:@attaches%'.replace('{}', files.length) }}</span>
 		<span class="count" v-if="uploadings.length != 0">{{ '%i18n:@uploading-media%'.replace('{}', uploadings.length) }}<mk-ellipsis/></span>
 	</span>
 
@@ -14,7 +14,7 @@
 			:reply="reply"
 			@posted="onPosted"
 			@change-uploadings="onChangeUploadings"
-			@change-attached-media="onChangeMedia"
+			@change-attached-files="onChangeFiles"
 			@geo-attached="onGeoAttached"
 			@geo-dettached="onGeoDettached"/>
 	</div>
@@ -29,7 +29,7 @@ export default Vue.extend({
 	data() {
 		return {
 			uploadings: [],
-			media: [],
+			files: [],
 			geo: null
 		};
 	},
@@ -42,8 +42,8 @@ export default Vue.extend({
 		onChangeUploadings(files) {
 			this.uploadings = files;
 		},
-		onChangeMedia(media) {
-			this.media = media;
+		onChangeFiles(files) {
+			this.files = files;
 		},
 		onGeoAttached(geo) {
 			this.geo = geo;
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 2ca5484610..f6f52c8f1f 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -20,7 +20,7 @@
 			@keydown="onKeydown" @paste="onPaste" :placeholder="placeholder"
 			v-autocomplete="'text'"
 		></textarea>
-		<div class="medias" :class="{ with: poll }" v-show="files.length != 0">
+		<div class="files" :class="{ with: poll }" v-show="files.length != 0">
 			<x-draggable :list="files" :options="{ animation: 150 }">
 				<div v-for="file in files" :key="file.id">
 					<div class="img" :style="{ backgroundImage: `url(${file.thumbnailUrl})` }" :title="file.name"></div>
@@ -188,7 +188,7 @@ export default Vue.extend({
 							(this.$refs.poll as any).set(draft.data.poll);
 						});
 					}
-					this.$emit('change-attached-media', this.files);
+					this.$emit('change-attached-files', this.files);
 				}
 			}
 
@@ -225,12 +225,12 @@ export default Vue.extend({
 
 		attachMedia(driveFile) {
 			this.files.push(driveFile);
-			this.$emit('change-attached-media', this.files);
+			this.$emit('change-attached-files', this.files);
 		},
 
 		detachMedia(id) {
 			this.files = this.files.filter(x => x.id != id);
-			this.$emit('change-attached-media', this.files);
+			this.$emit('change-attached-files', this.files);
 		},
 
 		onChangeFile() {
@@ -249,7 +249,7 @@ export default Vue.extend({
 			this.text = '';
 			this.files = [];
 			this.poll = false;
-			this.$emit('change-attached-media', this.files);
+			this.$emit('change-attached-files', this.files);
 		},
 
 		onKeydown(e) {
@@ -297,7 +297,7 @@ export default Vue.extend({
 			if (driveFile != null && driveFile != '') {
 				const file = JSON.parse(driveFile);
 				this.files.push(file);
-				this.$emit('change-attached-media', this.files);
+				this.$emit('change-attached-files', this.files);
 				e.preventDefault();
 			}
 			//#endregion
@@ -354,7 +354,7 @@ export default Vue.extend({
 
 			(this as any).api('notes/create', {
 				text: this.text == '' ? undefined : this.text,
-				mediaIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
+				fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
 				replyId: this.reply ? this.reply.id : undefined,
 				renoteId: this.renote ? this.renote.id : undefined,
 				poll: this.poll ? (this.$refs.poll as any).get() : undefined,
@@ -514,7 +514,7 @@ root(isDark)
 				margin-right 8px
 				white-space nowrap
 
-		> .medias
+		> .files
 			margin 0
 			padding 0
 			background isDark ? #181b23 : lighten($theme-color, 98%)
diff --git a/src/client/app/desktop/views/components/sub-note-content.vue b/src/client/app/desktop/views/components/sub-note-content.vue
index cb0374b910..6889dc231e 100644
--- a/src/client/app/desktop/views/components/sub-note-content.vue
+++ b/src/client/app/desktop/views/components/sub-note-content.vue
@@ -7,9 +7,9 @@
 		<misskey-flavored-markdown v-if="note.text" :text="note.text" :i="$store.state.i"/>
 		<a class="rp" v-if="note.renoteId" :href="`/notes/${note.renoteId}`">RP: ...</a>
 	</div>
-	<details v-if="note.media.length > 0">
-		<summary>({{ '%i18n:@media-count%'.replace('{}', note.media.length) }})</summary>
-		<mk-media-list :media-list="note.media"/>
+	<details v-if="note.files.length > 0">
+		<summary>({{ '%i18n:@media-count%'.replace('{}', note.files.length) }})</summary>
+		<mk-media-list :media-list="note.files"/>
 	</details>
 	<details v-if="note.poll">
 		<summary>%i18n:@poll%</summary>
diff --git a/src/client/app/desktop/views/pages/deck/deck.list-tl.vue b/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
index 70048f99e3..e82e76e4d0 100644
--- a/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
@@ -68,7 +68,7 @@ export default Vue.extend({
 				(this as any).api('notes/user-list-timeline', {
 					listId: this.list.id,
 					limit: fetchLimit + 1,
-					mediaOnly: this.mediaOnly,
+					withFiles: this.mediaOnly,
 					includeMyRenotes: this.$store.state.settings.showMyRenotes,
 					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
 					includeLocalRenotes: this.$store.state.settings.showLocalRenotes
@@ -90,7 +90,7 @@ export default Vue.extend({
 				listId: this.list.id,
 				limit: fetchLimit + 1,
 				untilId: (this.$refs.timeline as any).tail().id,
-				mediaOnly: this.mediaOnly,
+				withFiles: this.mediaOnly,
 				includeMyRenotes: this.$store.state.settings.showMyRenotes,
 				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
 				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
@@ -109,7 +109,7 @@ export default Vue.extend({
 			return promise;
 		},
 		onNote(note) {
-			if (this.mediaOnly && note.media.length == 0) return;
+			if (this.mediaOnly && note.files.length == 0) return;
 
 			// Prepend a note
 			(this.$refs.timeline as any).prepend(note);
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 2615c0d090..b42df1f347 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -28,8 +28,8 @@
 						<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
 						<a class="rp" v-if="p.renote != null">RP:</a>
 					</div>
-					<div class="media" v-if="p.media.length > 0">
-						<mk-media-list :media-list="p.media"/>
+					<div class="files" v-if="p.files.length > 0">
+						<mk-media-list :media-list="p.files"/>
 					</div>
 					<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
 					<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
@@ -54,11 +54,11 @@
 	</article>
 </div>
 <div v-else class="srwrkujossgfuhrbnvqkybtzxpblgchi">
-	<div v-if="note.media.length > 0">
-		<mk-media-list :media-list="note.media"/>
+	<div v-if="note.files.length > 0">
+		<mk-media-list :media-list="note.files"/>
 	</div>
-	<div v-if="note.renote && note.renote.media.length > 0">
-		<mk-media-list :media-list="note.renote.media"/>
+	<div v-if="note.renote && note.renote.files.length > 0">
+		<mk-media-list :media-list="note.renote.files"/>
 	</div>
 </div>
 </template>
@@ -100,7 +100,7 @@ export default Vue.extend({
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
-				this.note.mediaIds.length == 0 &&
+				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
 
@@ -371,7 +371,7 @@ root(isDark)
 					.mk-url-preview
 						margin-top 8px
 
-					> .media
+					> .files
 						> img
 							display block
 							max-width 100%
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index f7fca5de92..2e7e30f12a 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -127,7 +127,7 @@ export default Vue.extend({
 		prepend(note, silent = false) {
 			//#region 弾く
 			const isMyNote = note.userId == this.$store.state.i.id;
-			const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
+			const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
 
 			if (this.$store.state.settings.showMyRenotes === false) {
 				if (isMyNote && isPureRenote) {
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl.vue b/src/client/app/desktop/views/pages/deck/deck.tl.vue
index a9e4d489c3..120ceb7fc2 100644
--- a/src/client/app/desktop/views/pages/deck/deck.tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.tl.vue
@@ -96,7 +96,7 @@ export default Vue.extend({
 			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
 				(this as any).api(this.endpoint, {
 					limit: fetchLimit + 1,
-					mediaOnly: this.mediaOnly,
+					withFiles: this.mediaOnly,
 					includeMyRenotes: this.$store.state.settings.showMyRenotes,
 					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
 					includeLocalRenotes: this.$store.state.settings.showLocalRenotes
@@ -117,7 +117,7 @@ export default Vue.extend({
 
 			const promise = (this as any).api(this.endpoint, {
 				limit: fetchLimit + 1,
-				mediaOnly: this.mediaOnly,
+				withFiles: this.mediaOnly,
 				untilId: (this.$refs.timeline as any).tail().id,
 				includeMyRenotes: this.$store.state.settings.showMyRenotes,
 				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
@@ -138,7 +138,7 @@ export default Vue.extend({
 		},
 
 		onNote(note) {
-			if (this.mediaOnly && note.media.length == 0) return;
+			if (this.mediaOnly && note.files.length == 0) return;
 
 			// Prepend a note
 			(this.$refs.timeline as any).prepend(note);
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index 64c537f1ed..c5cd9e24fe 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -24,12 +24,12 @@ export default Vue.extend({
 	mounted() {
 		(this as any).api('users/notes', {
 			userId: this.user.id,
-			withMedia: true,
+			withFiles: true,
 			limit: 9
 		}).then(notes => {
 			notes.forEach(note => {
-				note.media.forEach(media => {
-					if (this.images.length < 9) this.images.push(media);
+				note.files.forEach(file => {
+					if (this.images.length < 9) this.images.push(file);
 				});
 			});
 			this.fetching = false;
diff --git a/src/client/app/desktop/views/pages/user/user.timeline.vue b/src/client/app/desktop/views/pages/user/user.timeline.vue
index 67987fcb94..54221380a7 100644
--- a/src/client/app/desktop/views/pages/user/user.timeline.vue
+++ b/src/client/app/desktop/views/pages/user/user.timeline.vue
@@ -66,7 +66,7 @@ export default Vue.extend({
 					limit: fetchLimit + 1,
 					untilDate: this.date ? this.date.getTime() : undefined,
 					includeReplies: this.mode == 'with-replies',
-					withMedia: this.mode == 'with-media'
+					withFiles: this.mode == 'with-media'
 				}).then(notes => {
 					if (notes.length == fetchLimit + 1) {
 						notes.pop();
@@ -86,7 +86,7 @@ export default Vue.extend({
 				userId: this.user.id,
 				limit: fetchLimit + 1,
 				includeReplies: this.mode == 'with-replies',
-				withMedia: this.mode == 'with-media',
+				withFiles: this.mode == 'with-media',
 				untilId: (this.$refs.timeline as any).tail().id
 			});
 
diff --git a/src/client/app/desktop/views/widgets/trends.vue b/src/client/app/desktop/views/widgets/trends.vue
index c33bf2f2f2..aeaab63ac4 100644
--- a/src/client/app/desktop/views/widgets/trends.vue
+++ b/src/client/app/desktop/views/widgets/trends.vue
@@ -49,7 +49,7 @@ export default define({
 				offset: this.offset,
 				renote: false,
 				reply: false,
-				media: false,
+				file: false,
 				poll: false
 			}).then(notes => {
 				const note = notes ? notes[0] : null;
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 786e57bb22..10ff3fcc09 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -40,8 +40,8 @@
 				<span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span>
 				<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
 			</div>
-			<div class="media" v-if="p.media.length > 0">
-				<mk-media-list :media-list="p.media" :raw="true"/>
+			<div class="files" v-if="p.files.length > 0">
+				<mk-media-list :media-list="p.files" :raw="true"/>
 			</div>
 			<mk-poll v-if="p.poll" :note="p"/>
 			<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
@@ -113,7 +113,7 @@ export default Vue.extend({
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
-				this.note.mediaIds.length == 0 &&
+				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
 
@@ -369,7 +369,7 @@ root(isDark)
 			> .mk-url-preview
 				margin-top 8px
 
-			> .media
+			> .files
 				> img
 					display block
 					max-width 100%
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 258433cb3f..9bd4a83ecb 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -28,8 +28,8 @@
 						<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i" :class="$style.text"/>
 						<a class="rp" v-if="p.renote != null">RP:</a>
 					</div>
-					<div class="media" v-if="p.media.length > 0">
-						<mk-media-list :media-list="p.media"/>
+					<div class="files" v-if="p.files.length > 0">
+						<mk-media-list :media-list="p.files"/>
 					</div>
 					<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
 					<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
@@ -90,7 +90,7 @@ export default Vue.extend({
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
-				this.note.mediaIds.length == 0 &&
+				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
 
@@ -414,7 +414,7 @@ root(isDark)
 					.mk-url-preview
 						margin-top 8px
 
-					> .media
+					> .files
 						> img
 							display block
 							max-width 100%
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 714e521c0f..ce2670dc52 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -125,7 +125,7 @@ export default Vue.extend({
 		prepend(note, silent = false) {
 			//#region 弾く
 			const isMyNote = note.userId == this.$store.state.i.id;
-			const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
+			const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
 
 			if (this.$store.state.settings.showMyRenotes === false) {
 				if (isMyNote && isPureRenote) {
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 8b1f7b08c8..644e27cce8 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -200,12 +200,12 @@ export default Vue.extend({
 
 		attachMedia(driveFile) {
 			this.files.push(driveFile);
-			this.$emit('change-attached-media', this.files);
+			this.$emit('change-attached-files', this.files);
 		},
 
 		detachMedia(file) {
 			this.files = this.files.filter(x => x.id != file.id);
-			this.$emit('change-attached-media', this.files);
+			this.$emit('change-attached-files', this.files);
 		},
 
 		onChangeFile() {
@@ -269,7 +269,7 @@ export default Vue.extend({
 			this.text = '';
 			this.files = [];
 			this.poll = false;
-			this.$emit('change-attached-media');
+			this.$emit('change-attached-files');
 		},
 
 		post() {
@@ -277,7 +277,7 @@ export default Vue.extend({
 			const viaMobile = this.$store.state.settings.disableViaMobile !== true;
 			(this as any).api('notes/create', {
 				text: this.text == '' ? undefined : this.text,
-				mediaIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
+				fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
 				replyId: this.reply ? this.reply.id : undefined,
 				renoteId: this.renote ? this.renote.id : undefined,
 				poll: this.poll ? (this.$refs.poll as any).get() : undefined,
diff --git a/src/client/app/mobile/views/components/sub-note-content.vue b/src/client/app/mobile/views/components/sub-note-content.vue
index a4ce49786e..4d0aa25f34 100644
--- a/src/client/app/mobile/views/components/sub-note-content.vue
+++ b/src/client/app/mobile/views/components/sub-note-content.vue
@@ -7,9 +7,9 @@
 		<misskey-flavored-markdown v-if="note.text" :text="note.text" :i="$store.state.i"/>
 		<a class="rp" v-if="note.renoteId">RP: ...</a>
 	</div>
-	<details v-if="note.media.length > 0">
-		<summary>({{ '%i18n:@media-count%'.replace('{}', note.media.length) }})</summary>
-		<mk-media-list :media-list="note.media"/>
+	<details v-if="note.files.length > 0">
+		<summary>({{ '%i18n:@media-count%'.replace('{}', note.files.length) }})</summary>
+		<mk-media-list :media-list="note.files"/>
 	</details>
 	<details v-if="note.poll">
 		<summary>%i18n:@poll%</summary>
diff --git a/src/client/app/mobile/views/components/user-timeline.vue b/src/client/app/mobile/views/components/user-timeline.vue
index 6be675c0a7..7cd23d6655 100644
--- a/src/client/app/mobile/views/components/user-timeline.vue
+++ b/src/client/app/mobile/views/components/user-timeline.vue
@@ -41,7 +41,7 @@ export default Vue.extend({
 			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
 				(this as any).api('users/notes', {
 					userId: this.user.id,
-					withMedia: this.withMedia,
+					withFiles: this.withMedia,
 					limit: fetchLimit + 1
 				}).then(notes => {
 					if (notes.length == fetchLimit + 1) {
@@ -62,7 +62,7 @@ export default Vue.extend({
 
 			const promise = (this as any).api('users/notes', {
 				userId: this.user.id,
-				withMedia: this.withMedia,
+				withFiles: this.withMedia,
 				limit: fetchLimit + 1,
 				untilId: (this.$refs.timeline as any).tail().id
 			});
diff --git a/src/client/app/mobile/views/pages/user/home.photos.vue b/src/client/app/mobile/views/pages/user/home.photos.vue
index 73ff1d5173..e9025ec816 100644
--- a/src/client/app/mobile/views/pages/user/home.photos.vue
+++ b/src/client/app/mobile/views/pages/user/home.photos.vue
@@ -26,7 +26,7 @@ export default Vue.extend({
 	mounted() {
 		(this as any).api('users/notes', {
 			userId: this.user.id,
-			withMedia: true,
+			withFiles: true,
 			limit: 6
 		}).then(notes => {
 			notes.forEach(note => {
diff --git a/src/docs/api/entities/note.yaml b/src/docs/api/entities/note.yaml
index cae9a53f82..6654be2b02 100644
--- a/src/docs/api/entities/note.yaml
+++ b/src/docs/api/entities/note.yaml
@@ -33,19 +33,19 @@ props:
       ja-JP: "投稿の本文"
       en-US: "The text of this note"
 
-  mediaIds:
+  fileIds:
     type: "id(DriveFile)[]"
     optional: true
     desc:
-      ja-JP: "添付されているメディアのID (なければレスポンスでは空配列)"
-      en-US: "The IDs of the attached media (empty array for response if no media is attached)"
+      ja-JP: "添付されているファイルのID (なければレスポンスでは空配列)"
+      en-US: "The IDs of the attached files (empty array for response if no files is attached)"
 
-  media:
+  files:
     type: "entity(DriveFile)[]"
     optional: true
     desc:
-      ja-JP: "添付されているメディア"
-      en-US: "The attached media"
+      ja-JP: "添付されているファイル"
+      en-US: "The attached files"
 
   userId:
     type: "id(User)"
diff --git a/src/misc/get-note-summary.ts b/src/misc/get-note-summary.ts
index ec7c74cf9f..3c6f2dd3d6 100644
--- a/src/misc/get-note-summary.ts
+++ b/src/misc/get-note-summary.ts
@@ -16,9 +16,9 @@ const summarize = (note: any): string => {
 	// 本文
 	summary += note.text ? note.text : '';
 
-	// メディアが添付されているとき
-	if (note.media.length != 0) {
-		summary += ` (${note.media.length}つのメディア)`;
+	// ファイルが添付されているとき
+	if (note.files.length != 0) {
+		summary += ` (${note.files.length}つのファイル)`;
 	}
 
 	// 投票が添付されているとき
diff --git a/src/misc/is-quote.ts b/src/misc/is-quote.ts
index 420f03a489..a99b8f6434 100644
--- a/src/misc/is-quote.ts
+++ b/src/misc/is-quote.ts
@@ -1,5 +1,5 @@
 import { INote } from '../models/note';
 
 export default function(note: INote): boolean {
-	return note.renoteId != null && (note.text != null || note.poll != null || (note.mediaIds != null && note.mediaIds.length > 0));
+	return note.renoteId != null && (note.text != null || note.poll != null || (note.fileIds != null && note.fileIds.length > 0));
 }
diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index 698ef092a6..215b49b305 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -92,7 +92,7 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv
 
 	// このDriveFileを添付しているNoteをすべて削除
 	await Promise.all((
-		await Note.find({ mediaIds: d._id })
+		await Note.find({ fileIds: d._id })
 	).map(x => deleteNote(x)));
 
 	// このDriveFileを添付しているMessagingMessageをすべて削除
diff --git a/src/models/note.ts b/src/models/note.ts
index 9d2e23d901..98d37caf22 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -6,7 +6,7 @@ import { IUser, pack as packUser } from './user';
 import { pack as packApp } from './app';
 import PollVote, { deletePollVote } from './poll-vote';
 import Reaction, { deleteNoteReaction } from './note-reaction';
-import { pack as packFile } from './drive-file';
+import { pack as packFile, IDriveFile } from './drive-file';
 import NoteWatching, { deleteNoteWatching } from './note-watching';
 import NoteReaction from './note-reaction';
 import Favorite, { deleteFavorite } from './favorite';
@@ -17,9 +17,20 @@ const Note = db.get<INote>('notes');
 Note.createIndex('uri', { sparse: true, unique: true });
 Note.createIndex('userId');
 Note.createIndex('tagsLower');
+Note.createIndex('_files.contentType');
 Note.createIndex({
 	createdAt: -1
 });
+
+// 後方互換性のため
+Note.update({}, {
+	$rename: {
+		mediaIds: 'fileIds'
+	}
+}, {
+	multi: true
+});
+
 export default Note;
 
 export function isValidText(text: string): boolean {
@@ -34,7 +45,7 @@ export type INote = {
 	_id: mongo.ObjectID;
 	createdAt: Date;
 	deletedAt: Date;
-	mediaIds: mongo.ObjectID[];
+	fileIds: mongo.ObjectID[];
 	replyId: mongo.ObjectID;
 	renoteId: mongo.ObjectID;
 	poll: {
@@ -92,6 +103,7 @@ export type INote = {
 		inbox?: string;
 	};
 	_replyIds?: mongo.ObjectID[];
+	_files?: IDriveFile[];
 };
 
 /**
@@ -271,11 +283,15 @@ export const pack = async (
 		_note.app = packApp(_note.appId);
 	}
 
-	// Populate media
-	_note.media = hide ? [] : Promise.all(_note.mediaIds.map((fileId: mongo.ObjectID) =>
+	// Populate files
+	_note.files = hide ? [] : Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) =>
 		packFile(fileId)
 	));
 
+	// 後方互換性のため
+	_note.mediaIds = _note.fileIds;
+	_note.media = _note.files;
+
 	// When requested a detailed note data
 	if (opts.detail) {
 		//#region 重いので廃止
@@ -344,7 +360,7 @@ export const pack = async (
 	}
 
 	if (hide) {
-		_note.mediaIds = [];
+		_note.fileIds = [];
 		_note.text = null;
 		_note.poll = null;
 		_note.cw = null;
diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index 1dfeebfdf7..97188b44a6 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -78,11 +78,11 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
 	}
 	//#endergion
 
-	// 添付メディア
+	// 添付ファイル
 	// TODO: attachmentは必ずしもImageではない
 	// TODO: attachmentは必ずしも配列ではない
 	// Noteがsensitiveなら添付もsensitiveにする
-	const media = note.attachment
+	const files = note.attachment
 		.map(attach => attach.sensitive = note.sensitive)
 		? await Promise.all(note.attachment.map(x => resolveImage(actor, x)))
 		: [];
@@ -100,7 +100,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
 
 	return await post(actor, {
 		createdAt: new Date(note.published),
-		media,
+		files: files,
 		reply,
 		renote: undefined,
 		cw: note.summary,
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 1d169d3088..6b30324ae7 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -8,8 +8,8 @@ import User from '../../../models/user';
 import toHtml from '../misc/get-note-html';
 
 export default async function renderNote(note: INote, dive = true): Promise<any> {
-	const promisedFiles: Promise<IDriveFile[]> = note.mediaIds
-		? DriveFile.find({ _id: { $in: note.mediaIds } })
+	const promisedFiles: Promise<IDriveFile[]> = note.fileIds
+		? DriveFile.find({ _id: { $in: note.fileIds } })
 		: Promise.resolve([]);
 
 	let inReplyTo;
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index 37df190880..cc7e55b5df 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -58,7 +58,7 @@ export default async (ctx: Router.IRouterContext) => {
 				$or: [{
 					text: { $ne: null }
 				}, {
-					mediaIds: { $ne: [] }
+					fileIds: { $ne: [] }
 				}]
 			}]
 		} as any;
diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts
index 029bc1a95e..4d15e9483f 100644
--- a/src/server/api/endpoints/notes.ts
+++ b/src/server/api/endpoints/notes.ts
@@ -20,9 +20,9 @@ export default (params: any) => new Promise(async (res, rej) => {
 	const [renote, renoteErr] = $.bool.optional.get(params.renote);
 	if (renoteErr) return rej('invalid renote param');
 
-	// Get 'media' parameter
-	const [media, mediaErr] = $.bool.optional.get(params.media);
-	if (mediaErr) return rej('invalid media param');
+	// Get 'files' parameter
+	const [files, filesErr] = $.bool.optional.get(params.files);
+	if (filesErr) return rej('invalid files param');
 
 	// Get 'poll' parameter
 	const [poll, pollErr] = $.bool.optional.get(params.poll);
@@ -79,8 +79,8 @@ export default (params: any) => new Promise(async (res, rej) => {
 		query.renoteId = renote ? { $exists: true, $ne: null } : null;
 	}
 
-	if (media != undefined) {
-		query.mediaIds = media ? { $exists: true, $ne: null } : [];
+	if (files != undefined) {
+		query.fileIds = files ? { $exists: true, $ne: null } : [];
 	}
 
 	if (poll != undefined) {
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 04f5f7562e..47b53c943b 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -71,9 +71,15 @@ export const meta = {
 			ref: 'geo'
 		}),
 
+		fileIds: $.arr($.type(ID)).optional.unique().range(1, 4).note({
+			desc: {
+				'ja-JP': '添付するファイル'
+			}
+		}),
+
 		mediaIds: $.arr($.type(ID)).optional.unique().range(1, 4).note({
 			desc: {
-				'ja-JP': '添付するメディア'
+				'ja-JP': '添付するファイル (このパラメータは廃止予定です。代わりに fileIds を使ってください。)'
 			}
 		}),
 
@@ -124,15 +130,16 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 	}
 
 	let files: IDriveFile[] = [];
-	if (ps.mediaIds !== undefined) {
+	const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
+	if (fileIds != null) {
 		// Fetch files
 		// forEach だと途中でエラーなどがあっても return できないので
 		// 敢えて for を使っています。
-		for (const mediaId of ps.mediaIds) {
+		for (const fileId of fileIds) {
 			// Fetch file
 			// SELECT _id
 			const entity = await DriveFile.findOne({
-				_id: mediaId,
+				_id: fileId,
 				'metadata.userId': user._id
 			});
 
@@ -155,7 +162,7 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 
 		if (renote == null) {
 			return rej('renoteee is not found');
-		} else if (renote.renoteId && !renote.text && !renote.mediaIds) {
+		} else if (renote.renoteId && !renote.text && !renote.fileIds) {
 			return rej('cannot renote to renote');
 		}
 	}
@@ -176,7 +183,7 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 		}
 
 		// 返信対象が引用でないRenoteだったらエラー
-		if (reply.renoteId && !reply.text && !reply.mediaIds) {
+		if (reply.renoteId && !reply.text && !reply.fileIds) {
 			return rej('cannot reply to renote');
 		}
 	}
@@ -191,13 +198,13 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 
 	// テキストが無いかつ添付ファイルが無いかつRenoteも無いかつ投票も無かったらエラー
 	if ((ps.text === undefined || ps.text === null) && files === null && renote === null && ps.poll === undefined) {
-		return rej('text, mediaIds, renoteId or poll is required');
+		return rej('text, fileIds, renoteId or poll is required');
 	}
 
 	// 投稿を作成
 	const note = await create(user, {
 		createdAt: new Date(),
-		media: files,
+		files: files,
 		poll: ps.poll,
 		text: ps.text,
 		reply,
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 8f7233e308..554245a0f4 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -33,9 +33,9 @@ export default async (params: any, user: ILocalUser) => {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
-	// Get 'mediaOnly' parameter
-	const [mediaOnly, mediaOnlyErr] = $.bool.optional.get(params.mediaOnly);
-	if (mediaOnlyErr) throw 'invalid mediaOnly param';
+	// Get 'withFiles' parameter
+	const [withFiles, withFilesErr] = $.bool.optional.get(params.withFiles);
+	if (withFilesErr) throw 'invalid withFiles param';
 
 	// ミュートしているユーザーを取得
 	const mutedUserIds = user ? (await Mute.find({
@@ -68,8 +68,8 @@ export default async (params: any, user: ILocalUser) => {
 		};
 	}
 
-	if (mediaOnly) {
-		query.mediaIds = { $exists: true, $ne: [] };
+	if (withFiles) {
+		query.fileIds = { $exists: true, $ne: [] };
 	}
 
 	if (sinceId) {
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 2dbb1190c1..1060792683 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -66,7 +66,7 @@ export const meta = {
 			}
 		}),
 
-		mediaOnly: $.bool.optional.note({
+		withFiles: $.bool.optional.note({
 			desc: {
 				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
@@ -164,7 +164,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -180,7 +180,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -196,16 +196,16 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
 		});
 	}
 
-	if (ps.mediaOnly) {
+	if (ps.withFiles) {
 		query.$and.push({
-			mediaIds: { $exists: true, $ne: [] }
+			fileIds: { $exists: true, $ne: [] }
 		});
 	}
 
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index bbcc6303ca..018e636ab5 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -33,9 +33,9 @@ export default async (params: any, user: ILocalUser) => {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
-	// Get 'mediaOnly' parameter
-	const [mediaOnly, mediaOnlyErr] = $.bool.optional.get(params.mediaOnly);
-	if (mediaOnlyErr) throw 'invalid mediaOnly param';
+	// Get 'withFiles' parameter
+	const [withFiles, withFilesErr] = $.bool.optional.get(params.withFiles);
+	if (withFilesErr) throw 'invalid withFiles param';
 
 	// ミュートしているユーザーを取得
 	const mutedUserIds = user ? (await Mute.find({
@@ -69,8 +69,8 @@ export default async (params: any, user: ILocalUser) => {
 		};
 	}
 
-	if (mediaOnly) {
-		query.mediaIds = { $exists: true, $ne: [] };
+	if (withFiles) {
+		query.fileIds = { $exists: true, $ne: [] };
 	}
 
 	if (sinceId) {
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index e092275fe8..317a0726d3 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -247,7 +247,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	if (media != null) {
 		if (media) {
 			push({
-				mediaIds: {
+				fileIds: {
 					$exists: true,
 					$ne: null
 				}
@@ -255,11 +255,11 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		} else {
 			push({
 				$or: [{
-					mediaIds: {
+					fileIds: {
 						$exists: false
 					}
 				}, {
-					mediaIds: null
+					fileIds: null
 				}]
 			});
 		}
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 099bf2010b..145f648c56 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -67,7 +67,7 @@ export const meta = {
 			}
 		}),
 
-		mediaOnly: $.bool.optional.note({
+		withFiles: $.bool.optional.note({
 			desc: {
 				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
@@ -154,7 +154,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -170,7 +170,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -186,16 +186,16 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
 		});
 	}
 
-	if (ps.mediaOnly) {
+	if (ps.withFiles) {
 		query.$and.push({
-			mediaIds: { $exists: true, $ne: [] }
+			fileIds: { $exists: true, $ne: [] }
 		});
 	}
 
diff --git a/src/server/api/endpoints/notes/trend.ts b/src/server/api/endpoints/notes/trend.ts
index 7a0a098f28..9f55ed3243 100644
--- a/src/server/api/endpoints/notes/trend.ts
+++ b/src/server/api/endpoints/notes/trend.ts
@@ -52,7 +52,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	}
 
 	if (media != undefined) {
-		query.mediaIds = media ? { $exists: true, $ne: null } : null;
+		query.fileIds = media ? { $exists: true, $ne: null } : null;
 	}
 
 	if (poll != undefined) {
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index a7b43014ed..e00a7de371 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -73,7 +73,7 @@ export const meta = {
 			}
 		}),
 
-		mediaOnly: $.bool.optional.note({
+		withFiles: $.bool.optional.note({
 			desc: {
 				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
 			}
@@ -160,7 +160,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -176,7 +176,7 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
@@ -192,16 +192,16 @@ export default async (params: any, user: ILocalUser) => {
 			}, {
 				text: { $ne: null }
 			}, {
-				mediaIds: { $ne: [] }
+				fileIds: { $ne: [] }
 			}, {
 				poll: { $ne: null }
 			}]
 		});
 	}
 
-	if (ps.mediaOnly) {
+	if (ps.withFiles) {
 		query.$and.push({
-			mediaIds: { $exists: true, $ne: [] }
+			fileIds: { $exists: true, $ne: [] }
 		});
 	}
 
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index ff7855bde0..d894e52dba 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -27,9 +27,9 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	const [includeReplies = true, includeRepliesErr] = $.bool.optional.get(params.includeReplies);
 	if (includeRepliesErr) return rej('invalid includeReplies param');
 
-	// Get 'withMedia' parameter
-	const [withMedia = false, withMediaErr] = $.bool.optional.get(params.withMedia);
-	if (withMediaErr) return rej('invalid withMedia param');
+	// Get 'withFiles' parameter
+	const [withFiles = false, withFilesErr] = $.bool.optional.get(params.withFiles);
+	if (withFilesErr) return rej('invalid withFiles param');
 
 	// Get 'limit' parameter
 	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
@@ -104,8 +104,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		query.replyId = null;
 	}
 
-	if (withMedia) {
-		query.mediaIds = {
+	if (withFiles) {
+		query.fileIds = {
 			$exists: true,
 			$ne: []
 		};
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 63e3557828..11e3755863 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -84,7 +84,7 @@ type Option = {
 	text?: string;
 	reply?: INote;
 	renote?: INote;
-	media?: IDriveFile[];
+	files?: IDriveFile[];
 	geo?: any;
 	poll?: any;
 	viaMobile?: boolean;
@@ -135,7 +135,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 
 	const mentionedUsers = await extractMentionedUsers(tokens);
 
-	const note = await insertNote(user, data, tokens, tags, mentionedUsers);
+	const note = await insertNote(user, data, tags, mentionedUsers);
 
 	res(note);
 
@@ -309,10 +309,10 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 	publishToUserLists(note, noteObj);
 }
 
-async function insertNote(user: IUser, data: Option, tokens: ReturnType<typeof parse>, tags: string[], mentionedUsers: IUser[]) {
+async function insertNote(user: IUser, data: Option, tags: string[], mentionedUsers: IUser[]) {
 	const insert: any = {
 		createdAt: data.createdAt,
-		mediaIds: data.media ? data.media.map(file => file._id) : [],
+		fileIds: data.files ? data.files.map(file => file._id) : [],
 		replyId: data.reply ? data.reply._id : null,
 		renoteId: data.renote ? data.renote._id : null,
 		text: data.text,
@@ -347,7 +347,8 @@ async function insertNote(user: IUser, data: Option, tokens: ReturnType<typeof p
 		_user: {
 			host: user.host,
 			inbox: isRemoteUser(user) ? user.inbox : undefined
-		}
+		},
+		_files: data.files ? data.files : []
 	};
 
 	if (data.uri != null) insert.uri = data.uri;
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index dea306feec..32e736b7a5 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -23,7 +23,7 @@ export default async function(user: IUser, note: INote) {
 			deletedAt: new Date(),
 			text: null,
 			tags: [],
-			mediaIds: [],
+			fileIds: [],
 			poll: null,
 			geo: null
 		}

From 37058e3480041a922ac5c193e4cc3bc29fd663ae Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 19:35:57 +0900
Subject: [PATCH 111/539] Fix parameter name

---
 src/server/api/endpoints/notes/search_by_tag.ts | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 317a0726d3..f982dc01e9 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -45,9 +45,9 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	const [renote = null, renoteErr] = $.bool.optional.nullable.get(params.renote);
 	if (renoteErr) return rej('invalid renote param');
 
-	// Get 'media' parameter
-	const [media = null, mediaErr] = $.bool.optional.nullable.get(params.media);
-	if (mediaErr) return rej('invalid media param');
+	// Get 'withFiles' parameter
+	const [withFiles = null, withFilesErr] = $.bool.optional.nullable.get(params.withFiles);
+	if (withFilesErr) return rej('invalid withFiles param');
 
 	// Get 'poll' parameter
 	const [poll = null, pollErr] = $.bool.optional.nullable.get(params.poll);
@@ -244,8 +244,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
-	if (media != null) {
-		if (media) {
+	if (withFiles != null) {
+		if (withFiles) {
 			push({
 				fileIds: {
 					$exists: true,

From 4257fed5009a30b7815fe3254d18b4b87806fe51 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Wed, 5 Sep 2018 19:46:55 +0900
Subject: [PATCH 112/539] fix mk-media darkmode

---
 .../app/common/views/components/media-banner.vue  | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 48b0d03d30..5c83925a32 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -42,7 +42,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-.mk-media-banner
+root(isDark)
 	width 100%
 	border-radius 4px
 	margin-top 4px
@@ -70,11 +70,8 @@ export default Vue.extend({
 		> .mk-media-banner-icon
 			font-size 1.6em
 
-	.mk-media-banner-download[data-darkmode]
-		background #21242d
-
-	.mk-media-banner-download:not([data-darkmode])
-		background #f7f7f7
+	.mk-media-banner-download
+		background isDark ? #21242d : #f7f7f7
 
 	.mk-media-banner-sensitive
 		background #111
@@ -85,4 +82,10 @@ export default Vue.extend({
 			display block
 			width 100%
 			height 100%
+
+.mk-media-banner[data-darkmode]
+	root(true)
+
+.mk-media-banner:not([data-darkmode])
+	root(false)
 </style>

From 229e85b2c595a296d1f6501ad7057b72fb5ffd53 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 21:51:31 +0900
Subject: [PATCH 113/539] [WIP] Update welcome page

---
 .../app/desktop/views/pages/welcome.vue       | 207 ++++++++++--------
 1 file changed, 119 insertions(+), 88 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index b7a39fbdb8..ba22cb598f 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -9,41 +9,65 @@
 
 	<div class="body">
 		<div class="main block">
-			<h1 v-if="name != 'Misskey'">{{ name }}</h1>
-			<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
+			<div>
+				<h1 v-if="name != 'Misskey'">{{ name }}</h1>
+				<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
 
-			<div class="info">
-				<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
-				<span class="stats" v-if="stats">
-					<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
-					<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
-				</span>
+				<div class="info">
+					<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
+					<span class="stats" v-if="stats">
+						<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
+						<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
+					</span>
+				</div>
+
+				<p class="desc" v-html="description || '%i18n:common.about%'"></p>
+
+				<p class="sign">
+					<span class="signup" @click="signup">%i18n:@signup%</span>
+					<span class="divider">|</span>
+					<span class="signin" @click="signin">%i18n:@signin%</span>
+				</p>
 			</div>
-
-			<p class="desc" v-html="description || '%i18n:common.about%'"></p>
-
-			<p class="sign">
-				<span class="signup" @click="signup">%i18n:@signup%</span>
-				<span class="divider">|</span>
-				<span class="signin" @click="signin">%i18n:@signin%</span>
-			</p>
 		</div>
 
-		<div class="broadcasts block">
-			<div v-for="broadcast in broadcasts">
-				<h1 v-html="broadcast.title"></h1>
-				<div v-html="broadcast.text"></div>
+		<div class="announcements block">
+			<header>%fa:broadcast-tower% %i18n:@announcements%</header>
+			<div>
+				<div v-for="broadcast in broadcasts">
+					<h1 v-html="broadcast.title"></h1>
+					<div v-html="broadcast.text"></div>
+				</div>
+			</div>
+		</div>
+
+		<div class="photos block">
+			<header>%fa:images% %i18n:@photos%</header>
+			<div>
+				<div v-for="photo in photos">
+				</div>
 			</div>
 		</div>
 
 		<div class="nav block">
-			<mk-nav class="nav"/>
+			<div>
+				<mk-nav class="nav"/>
+			</div>
 		</div>
 
 		<div class="side">
-			<mk-trends class="trends block"/>
+			<div class="trends block">
+				<div>
+					<mk-trends/>
+				</div>
+			</div>
 
-			<mk-welcome-timeline class="tl block" :max="20"/>
+			<div class="tl block">
+				<header>%fa:comment-alt R% %i18n:@timeline%</header>
+				<div>
+					<mk-welcome-timeline class="tl" :max="20"/>
+				</div>
+			</div>
 		</div>
 	</div>
 
@@ -71,7 +95,8 @@ export default Vue.extend({
 			host,
 			name: 'Misskey',
 			description: '',
-			broadcasts: []
+			broadcasts: [],
+			photos: []
 		};
 	},
 	created() {
@@ -166,8 +191,8 @@ root(isDark)
 
 	> .body
 		display grid
-		grid-template-rows 0.5fr 0.5fr 64px
-		grid-template-columns 1fr 350px
+		grid-template-rows 1fr 1fr 64px
+		grid-template-columns 1fr 1fr 350px
 		gap 16px
 		width 100%
 		max-width 1200px
@@ -178,87 +203,95 @@ root(isDark)
 
 		.block
 			color isDark ? #fff : #444
-			background isDark ? #313543 : #fff
+			background isDark ? #282C37 : #fff
 			box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 			//border-radius 8px
 			overflow auto
 
-		> .main
-			grid-row 1
-			grid-column 1
-			padding 32px
-			border-top solid 5px $theme-color
+			> header
+				padding 0 16px
+				line-height 48px
+				background isDark ? #313543 : #fff
 
-			> h1
-				margin 0
-
-				> img
-					margin -8px 0 0 -16px
-					max-width 280px
-
-			> .info
-				margin 0 auto 16px auto
-				width $width
-				font-size 14px
-
-				> .stats
-					margin-left 16px
-					padding-left 16px
-					border-left solid 1px isDark ? #fff : #444
-
-					> *
-						margin-right 16px
-
-			> .sign
-				font-size 120%
-
-				> .divider
-					margin 0 16px
-
-				> .signin
-				> .signup
-					cursor pointer
-
-					&:hover
-						color $theme-color
-
-			> .hashtags
-				margin 16px auto
-				width $width
-				font-size 14px
-				background rgba(#000, 0.3)
-				border-radius 8px
-
-				> *
-					display inline-block
-					margin 14px
-
-		> .broadcasts
-			grid-row 2
-			grid-column 1
-			padding 32px
+				& + div
+					max-height calc(100% - 48px)
 
 			> div
-				padding 0 0 16px 0
-				margin 0 0 16px 0
-				border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+				overflow auto
+
+		> .main
+			grid-row 1
+			grid-column 1 / 3
+			border-top solid 5px $theme-color
+
+			> div
+				padding 32px
 
 				> h1
 					margin 0
-					font-size 1.5em
+
+					> img
+						margin -8px 0 0 -16px
+						max-width 280px
+
+				> .info
+					margin 0 auto 16px auto
+					width $width
+					font-size 14px
+
+					> .stats
+						margin-left 16px
+						padding-left 16px
+						border-left solid 1px isDark ? #fff : #444
+
+						> *
+							margin-right 16px
+
+				> .sign
+					font-size 120%
+
+					> .divider
+						margin 0 16px
+
+					> .signin
+					> .signup
+						cursor pointer
+
+						&:hover
+							color $theme-color
+
+		> .announcements
+			grid-row 2
+			grid-column 1
+
+			> div
+				padding 32px
+
+				> div
+					padding 0 0 16px 0
+					margin 0 0 16px 0
+					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+					> h1
+						margin 0
+						font-size 1.25em
+
+		> .photos
+			grid-row 2
+			grid-column 2
 
 		> .nav
 			display flex
 			justify-content center
 			align-items center
 			grid-row 3
-			grid-column 1
+			grid-column 1 / 3
 			font-size 14px
 
 		> .side
 			display grid
 			grid-row 1 / 4
-			grid-column 2
+			grid-column 3
 			grid-template-rows 1fr 350px
 			grid-template-columns 1fr
 			gap 16px
@@ -266,8 +299,6 @@ root(isDark)
 			> .tl
 				grid-row 1
 				grid-column 1
-				text-align left
-				max-height 100%
 				overflow auto
 
 			> .trends

From b5ff2abdb9ee0c086c8970c738cce5d61761f8f5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 5 Sep 2018 23:55:51 +0900
Subject: [PATCH 114/539] =?UTF-8?q?=E4=BA=92=E6=8F=9B=E6=80=A7=E3=81=AE?=
 =?UTF-8?q?=E3=81=9F=E3=82=81=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20&=20#2623?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/endpoints/notes.ts             | 128 ++++++-----
 .../api/endpoints/notes/global-timeline.ts    |  83 ++++---
 .../api/endpoints/notes/hybrid-timeline.ts    |  12 +-
 .../api/endpoints/notes/local-timeline.ts     |  83 ++++---
 .../api/endpoints/notes/search_by_tag.ts      | 211 ++++++++++--------
 src/server/api/endpoints/notes/timeline.ts    |  12 +-
 .../api/endpoints/notes/user-list-timeline.ts |  12 +-
 src/server/api/endpoints/users/notes.ts       | 178 ++++++++++-----
 8 files changed, 435 insertions(+), 284 deletions(-)

diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts
index 4d15e9483f..5fa58d19de 100644
--- a/src/server/api/endpoints/notes.ts
+++ b/src/server/api/endpoints/notes.ts
@@ -1,51 +1,65 @@
-/**
- * Module dependencies
- */
 import $ from 'cafy'; import ID from '../../../misc/cafy-id';
 import Note, { pack } from '../../../models/note';
+import getParams from '../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '投稿を取得します。'
+	},
+
+	params: {
+		local: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ローカルの投稿に限定するか否か'
+			}
+		}),
+
+		reply: $.bool.optional.note({
+			desc: {
+				'ja-JP': '返信に限定するか否か'
+			}
+		}),
+
+		renote: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'Renoteに限定するか否か'
+			}
+		}),
+
+		withFiles: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か'
+			}
+		}),
+
+		media: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
+			}
+		}),
+
+		poll: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'アンケートが添付された投稿に限定するか否か'
+			}
+		}),
+
+		limit: $.num.optional.range(1, 100).note({
+			default: 10
+		}),
+
+		sinceId: $.type(ID).optional.note({}),
+
+		untilId: $.type(ID).optional.note({}),
+	}
+};
 
-/**
- * Get all notes
- */
 export default (params: any) => new Promise(async (res, rej) => {
-	// Get 'local' parameter
-	const [local, localErr] = $.bool.optional.get(params.local);
-	if (localErr) return rej('invalid local param');
-
-	// Get 'reply' parameter
-	const [reply, replyErr] = $.bool.optional.get(params.reply);
-	if (replyErr) return rej('invalid reply param');
-
-	// Get 'renote' parameter
-	const [renote, renoteErr] = $.bool.optional.get(params.renote);
-	if (renoteErr) return rej('invalid renote param');
-
-	// Get 'files' parameter
-	const [files, filesErr] = $.bool.optional.get(params.files);
-	if (filesErr) return rej('invalid files param');
-
-	// Get 'poll' parameter
-	const [poll, pollErr] = $.bool.optional.get(params.poll);
-	if (pollErr) return rej('invalid poll param');
-
-	// Get 'bot' parameter
-	//const [bot, botErr] = $.bool.optional.get(params.bot);
-	//if (botErr) return rej('invalid bot param');
-
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
-	if (limitErr) return rej('invalid limit param');
-
-	// Get 'sinceId' parameter
-	const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
-	if (sinceIdErr) return rej('invalid sinceId param');
-
-	// Get 'untilId' parameter
-	const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
-	if (untilIdErr) return rej('invalid untilId param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
 	// Check if both of sinceId and untilId is specified
-	if (sinceId && untilId) {
+	if (ps.sinceId && ps.untilId) {
 		return rej('cannot set sinceId and untilId');
 	}
 
@@ -56,35 +70,37 @@ export default (params: any) => new Promise(async (res, rej) => {
 	const query = {
 		visibility: 'public'
 	} as any;
-	if (sinceId) {
+	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {
-			$gt: sinceId
+			$gt: ps.sinceId
 		};
-	} else if (untilId) {
+	} else if (ps.untilId) {
 		query._id = {
-			$lt: untilId
+			$lt: ps.untilId
 		};
 	}
 
-	if (local) {
+	if (ps.local) {
 		query['_user.host'] = null;
 	}
 
-	if (reply != undefined) {
-		query.replyId = reply ? { $exists: true, $ne: null } : null;
+	if (ps.reply != undefined) {
+		query.replyId = ps.reply ? { $exists: true, $ne: null } : null;
 	}
 
-	if (renote != undefined) {
-		query.renoteId = renote ? { $exists: true, $ne: null } : null;
+	if (ps.renote != undefined) {
+		query.renoteId = ps.renote ? { $exists: true, $ne: null } : null;
 	}
 
-	if (files != undefined) {
-		query.fileIds = files ? { $exists: true, $ne: null } : [];
+	const withFiles = ps.withFiles != undefined ? ps.withFiles : ps.media;
+
+	if (withFiles) {
+		query.fileIds = withFiles ? { $exists: true, $ne: null } : [];
 	}
 
-	if (poll != undefined) {
-		query.poll = poll ? { $exists: true, $ne: null } : null;
+	if (ps.poll != undefined) {
+		query.poll = ps.poll ? { $exists: true, $ne: null } : null;
 	}
 
 	// TODO
@@ -95,7 +111,7 @@ export default (params: any) => new Promise(async (res, rej) => {
 	// Issue query
 	const notes = await Note
 		.find(query, {
-			limit: limit,
+			limit: ps.limit,
 			sort: sort
 		});
 
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 554245a0f4..e70fc5d76f 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -3,40 +3,49 @@ import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': 'グローバルタイムラインを取得します。'
+	},
+
+	params: {
+		withFiles: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
+			}
+		}),
+
+		limit: $.num.optional.range(1, 100).note({
+			default: 10
+		}),
+
+		sinceId: $.type(ID).optional.note({}),
+
+		untilId: $.type(ID).optional.note({}),
+
+		sinceDate: $.num.optional.note({}),
+
+		untilDate: $.num.optional.note({}),
+	}
+};
 
-/**
- * Get timeline of global
- */
 export default async (params: any, user: ILocalUser) => {
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
-	if (limitErr) throw 'invalid limit param';
-
-	// Get 'sinceId' parameter
-	const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
-	if (sinceIdErr) throw 'invalid sinceId param';
-
-	// Get 'untilId' parameter
-	const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
-	if (untilIdErr) throw 'invalid untilId param';
-
-	// Get 'sinceDate' parameter
-	const [sinceDate, sinceDateErr] = $.num.optional.get(params.sinceDate);
-	if (sinceDateErr) throw 'invalid sinceDate param';
-
-	// Get 'untilDate' parameter
-	const [untilDate, untilDateErr] = $.num.optional.get(params.untilDate);
-	if (untilDateErr) throw 'invalid untilDate param';
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([sinceId, untilId, sinceDate, untilDate].filter(x => x != null).length > 1) {
+	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
-	// Get 'withFiles' parameter
-	const [withFiles, withFilesErr] = $.bool.optional.get(params.withFiles);
-	if (withFilesErr) throw 'invalid withFiles param';
-
 	// ミュートしているユーザーを取得
 	const mutedUserIds = user ? (await Mute.find({
 		muterId: user._id
@@ -68,27 +77,29 @@ export default async (params: any, user: ILocalUser) => {
 		};
 	}
 
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.mediaOnly;
+
 	if (withFiles) {
 		query.fileIds = { $exists: true, $ne: [] };
 	}
 
-	if (sinceId) {
+	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {
-			$gt: sinceId
+			$gt: ps.sinceId
 		};
-	} else if (untilId) {
+	} else if (ps.untilId) {
 		query._id = {
-			$lt: untilId
+			$lt: ps.untilId
 		};
-	} else if (sinceDate) {
+	} else if (ps.sinceDate) {
 		sort._id = 1;
 		query.createdAt = {
-			$gt: new Date(sinceDate)
+			$gt: new Date(ps.sinceDate)
 		};
-	} else if (untilDate) {
+	} else if (ps.untilDate) {
 		query.createdAt = {
-			$lt: new Date(untilDate)
+			$lt: new Date(ps.untilDate)
 		};
 	}
 	//#endregion
@@ -96,7 +107,7 @@ export default async (params: any, user: ILocalUser) => {
 	// Issue query
 	const timeline = await Note
 		.find(query, {
-			limit: limit,
+			limit: ps.limit,
 			sort: sort
 		});
 
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 1060792683..16cec86797 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -7,8 +7,6 @@ import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 
 export const meta = {
-	name: 'notes/hybrid-timeline',
-
 	desc: {
 		'ja-JP': 'ハイブリッドタイムラインを取得します。'
 	},
@@ -68,7 +66,13 @@ export const meta = {
 
 		withFiles: $.bool.optional.note({
 			desc: {
-				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
 			}
 		}),
 	}
@@ -203,7 +207,7 @@ export default async (params: any, user: ILocalUser) => {
 		});
 	}
 
-	if (ps.withFiles) {
+	if (ps.withFiles || ps.mediaOnly) {
 		query.$and.push({
 			fileIds: { $exists: true, $ne: [] }
 		});
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 018e636ab5..2458a70556 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -3,40 +3,49 @@ import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': 'ローカルタイムラインを取得します。'
+	},
+
+	params: {
+		withFiles: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
+			}
+		}),
+
+		limit: $.num.optional.range(1, 100).note({
+			default: 10
+		}),
+
+		sinceId: $.type(ID).optional.note({}),
+
+		untilId: $.type(ID).optional.note({}),
+
+		sinceDate: $.num.optional.note({}),
+
+		untilDate: $.num.optional.note({}),
+	}
+};
 
-/**
- * Get timeline of local
- */
 export default async (params: any, user: ILocalUser) => {
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
-	if (limitErr) throw 'invalid limit param';
-
-	// Get 'sinceId' parameter
-	const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
-	if (sinceIdErr) throw 'invalid sinceId param';
-
-	// Get 'untilId' parameter
-	const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
-	if (untilIdErr) throw 'invalid untilId param';
-
-	// Get 'sinceDate' parameter
-	const [sinceDate, sinceDateErr] = $.num.optional.get(params.sinceDate);
-	if (sinceDateErr) throw 'invalid sinceDate param';
-
-	// Get 'untilDate' parameter
-	const [untilDate, untilDateErr] = $.num.optional.get(params.untilDate);
-	if (untilDateErr) throw 'invalid untilDate param';
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([sinceId, untilId, sinceDate, untilDate].filter(x => x != null).length > 1) {
+	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
-	// Get 'withFiles' parameter
-	const [withFiles, withFilesErr] = $.bool.optional.get(params.withFiles);
-	if (withFilesErr) throw 'invalid withFiles param';
-
 	// ミュートしているユーザーを取得
 	const mutedUserIds = user ? (await Mute.find({
 		muterId: user._id
@@ -69,27 +78,29 @@ export default async (params: any, user: ILocalUser) => {
 		};
 	}
 
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.mediaOnly;
+
 	if (withFiles) {
 		query.fileIds = { $exists: true, $ne: [] };
 	}
 
-	if (sinceId) {
+	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {
-			$gt: sinceId
+			$gt: ps.sinceId
 		};
-	} else if (untilId) {
+	} else if (ps.untilId) {
 		query._id = {
-			$lt: untilId
+			$lt: ps.untilId
 		};
-	} else if (sinceDate) {
+	} else if (ps.sinceDate) {
 		sort._id = 1;
 		query.createdAt = {
-			$gt: new Date(sinceDate)
+			$gt: new Date(ps.sinceDate)
 		};
-	} else if (untilDate) {
+	} else if (ps.untilDate) {
 		query.createdAt = {
-			$lt: new Date(untilDate)
+			$lt: new Date(ps.untilDate)
 		};
 	}
 	//#endregion
@@ -97,7 +108,7 @@ export default async (params: any, user: ILocalUser) => {
 	// Issue query
 	const timeline = await Note
 		.find(query, {
-			limit: limit,
+			limit: ps.limit,
 			sort: sort
 		});
 
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index f982dc01e9..82f11a9775 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -4,119 +4,152 @@ import User, { ILocalUser } from '../../../../models/user';
 import Mute from '../../../../models/mute';
 import { getFriendIds } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定されたタグが付けられた投稿を取得します。'
+	},
+
+	params: {
+		tag: $.str.note({
+			desc: {
+				'ja-JP': 'タグ'
+			}
+		}),
+
+		includeUserIds: $.arr($.type(ID)).optional.note({
+			default: []
+		}),
+
+		excludeUserIds: $.arr($.type(ID)).optional.note({
+			default: []
+		}),
+
+		includeUserUsernames: $.arr($.str).optional.note({
+			default: []
+		}),
+
+		excludeUserUsernames: $.arr($.str).optional.note({
+			default: []
+		}),
+
+		following: $.bool.optional.nullable.note({
+			default: null
+		}),
+
+		mute: $.str.optional.note({
+			default: 'mute_all'
+		}),
+
+		reply: $.bool.optional.nullable.note({
+			default: null,
+
+			desc: {
+				'ja-JP': '返信に限定するか否か'
+			}
+		}),
+
+		renote: $.bool.optional.nullable.note({
+			default: null,
+
+			desc: {
+				'ja-JP': 'Renoteに限定するか否か'
+			}
+		}),
+
+		withFiles: $.bool.optional.nullable.note({
+			default: null,
+
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か'
+			}
+		}),
+
+		media: $.bool.optional.nullable.note({
+			default: null,
+
+			desc: {
+				'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
+			}
+		}),
+
+		poll: $.bool.optional.nullable.note({
+			default: null,
+
+			desc: {
+				'ja-JP': 'アンケートが添付された投稿に限定するか否か'
+			}
+		}),
+
+		sinceDate: $.num.optional.note({
+		}),
+
+		untilDate: $.num.optional.note({
+		}),
+
+		offset: $.num.optional.min(0).note({
+			default: 0
+		}),
+
+		limit: $.num.optional.range(1, 30).note({
+			default: 10
+		}),
+	}
+};
 
-/**
- * Search notes by tag
- */
 export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
-	// Get 'tag' parameter
-	const [tag, tagError] = $.str.get(params.tag);
-	if (tagError) return rej('invalid tag param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
-	// Get 'includeUserIds' parameter
-	const [includeUserIds = [], includeUserIdsErr] = $.arr($.type(ID)).optional.get(params.includeUserIds);
-	if (includeUserIdsErr) return rej('invalid includeUserIds param');
-
-	// Get 'excludeUserIds' parameter
-	const [excludeUserIds = [], excludeUserIdsErr] = $.arr($.type(ID)).optional.get(params.excludeUserIds);
-	if (excludeUserIdsErr) return rej('invalid excludeUserIds param');
-
-	// Get 'includeUserUsernames' parameter
-	const [includeUserUsernames = [], includeUserUsernamesErr] = $.arr($.str).optional.get(params.includeUserUsernames);
-	if (includeUserUsernamesErr) return rej('invalid includeUserUsernames param');
-
-	// Get 'excludeUserUsernames' parameter
-	const [excludeUserUsernames = [], excludeUserUsernamesErr] = $.arr($.str).optional.get(params.excludeUserUsernames);
-	if (excludeUserUsernamesErr) return rej('invalid excludeUserUsernames param');
-
-	// Get 'following' parameter
-	const [following = null, followingErr] = $.bool.optional.nullable.get(params.following);
-	if (followingErr) return rej('invalid following param');
-
-	// Get 'mute' parameter
-	const [mute = 'mute_all', muteErr] = $.str.optional.get(params.mute);
-	if (muteErr) return rej('invalid mute param');
-
-	// Get 'reply' parameter
-	const [reply = null, replyErr] = $.bool.optional.nullable.get(params.reply);
-	if (replyErr) return rej('invalid reply param');
-
-	// Get 'renote' parameter
-	const [renote = null, renoteErr] = $.bool.optional.nullable.get(params.renote);
-	if (renoteErr) return rej('invalid renote param');
-
-	// Get 'withFiles' parameter
-	const [withFiles = null, withFilesErr] = $.bool.optional.nullable.get(params.withFiles);
-	if (withFilesErr) return rej('invalid withFiles param');
-
-	// Get 'poll' parameter
-	const [poll = null, pollErr] = $.bool.optional.nullable.get(params.poll);
-	if (pollErr) return rej('invalid poll param');
-
-	// Get 'sinceDate' parameter
-	const [sinceDate, sinceDateErr] = $.num.optional.get(params.sinceDate);
-	if (sinceDateErr) throw 'invalid sinceDate param';
-
-	// Get 'untilDate' parameter
-	const [untilDate, untilDateErr] = $.num.optional.get(params.untilDate);
-	if (untilDateErr) throw 'invalid untilDate param';
-
-	// Get 'offset' parameter
-	const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset);
-	if (offsetErr) return rej('invalid offset param');
-
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 30).get(params.limit);
-	if (limitErr) return rej('invalid limit param');
-
-	if (includeUserUsernames != null) {
-		const ids = (await Promise.all(includeUserUsernames.map(async (username) => {
+	if (ps.includeUserUsernames != null) {
+		const ids = (await Promise.all(ps.includeUserUsernames.map(async (username) => {
 			const _user = await User.findOne({
 				usernameLower: username.toLowerCase()
 			});
 			return _user ? _user._id : null;
 		}))).filter(id => id != null);
 
-		ids.forEach(id => includeUserIds.push(id));
+		ids.forEach(id => ps.includeUserIds.push(id));
 	}
 
-	if (excludeUserUsernames != null) {
-		const ids = (await Promise.all(excludeUserUsernames.map(async (username) => {
+	if (ps.excludeUserUsernames != null) {
+		const ids = (await Promise.all(ps.excludeUserUsernames.map(async (username) => {
 			const _user = await User.findOne({
 				usernameLower: username.toLowerCase()
 			});
 			return _user ? _user._id : null;
 		}))).filter(id => id != null);
 
-		ids.forEach(id => excludeUserIds.push(id));
+		ids.forEach(id => ps.excludeUserIds.push(id));
 	}
 
 	let q: any = {
 		$and: [{
-			tagsLower: tag.toLowerCase()
+			tagsLower: ps.tag.toLowerCase()
 		}]
 	};
 
 	const push = (x: any) => q.$and.push(x);
 
-	if (includeUserIds && includeUserIds.length != 0) {
+	if (ps.includeUserIds && ps.includeUserIds.length != 0) {
 		push({
 			userId: {
-				$in: includeUserIds
+				$in: ps.includeUserIds
 			}
 		});
-	} else if (excludeUserIds && excludeUserIds.length != 0) {
+	} else if (ps.excludeUserIds && ps.excludeUserIds.length != 0) {
 		push({
 			userId: {
-				$nin: excludeUserIds
+				$nin: ps.excludeUserIds
 			}
 		});
 	}
 
-	if (following != null && me != null) {
+	if (ps.following != null && me != null) {
 		const ids = await getFriendIds(me._id, false);
 		push({
-			userId: following ? {
+			userId: ps.following ? {
 				$in: ids
 			} : {
 				$nin: ids.concat(me._id)
@@ -131,7 +164,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		});
 		const mutedUserIds = mutes.map(m => m.muteeId);
 
-		switch (mute) {
+		switch (ps.mute) {
 			case 'mute_all':
 				push({
 					userId: {
@@ -202,8 +235,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
-	if (reply != null) {
-		if (reply) {
+	if (ps.reply != null) {
+		if (ps.reply) {
 			push({
 				replyId: {
 					$exists: true,
@@ -223,8 +256,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
-	if (renote != null) {
-		if (renote) {
+	if (ps.renote != null) {
+		if (ps.renote) {
 			push({
 				renoteId: {
 					$exists: true,
@@ -244,6 +277,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.media;
+
 	if (withFiles != null) {
 		if (withFiles) {
 			push({
@@ -265,8 +300,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
-	if (poll != null) {
-		if (poll) {
+	if (ps.poll != null) {
+		if (ps.poll) {
 			push({
 				poll: {
 					$exists: true,
@@ -286,18 +321,18 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
-	if (sinceDate) {
+	if (ps.sinceDate) {
 		push({
 			createdAt: {
-				$gt: new Date(sinceDate)
+				$gt: new Date(ps.sinceDate)
 			}
 		});
 	}
 
-	if (untilDate) {
+	if (ps.untilDate) {
 		push({
 			createdAt: {
-				$lt: new Date(untilDate)
+				$lt: new Date(ps.untilDate)
 			}
 		});
 	}
@@ -312,8 +347,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 			sort: {
 				_id: -1
 			},
-			limit: limit,
-			skip: offset
+			limit: ps.limit,
+			skip: ps.offset
 		});
 
 	// Serialize
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 145f648c56..089e7a182a 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -69,7 +69,13 @@ export const meta = {
 
 		withFiles: $.bool.optional.note({
 			desc: {
-				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
 			}
 		}),
 	}
@@ -193,7 +199,9 @@ export default async (params: any, user: ILocalUser) => {
 		});
 	}
 
-	if (ps.withFiles) {
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.mediaOnly;
+
+	if (withFiles) {
 		query.$and.push({
 			fileIds: { $exists: true, $ne: [] }
 		});
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index e00a7de371..61192d7d3e 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -75,7 +75,13 @@ export const meta = {
 
 		withFiles: $.bool.optional.note({
 			desc: {
-				'ja-JP': 'true にすると、メディアが添付された投稿だけ取得します'
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
 			}
 		}),
 	}
@@ -199,7 +205,9 @@ export default async (params: any, user: ILocalUser) => {
 		});
 	}
 
-	if (ps.withFiles) {
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.mediaOnly;
+
+	if (withFiles) {
 		query.$and.push({
 			fileIds: { $exists: true, $ne: [] }
 		});
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index d894e52dba..42c31189d6 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -2,63 +2,121 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import getHostLower from '../../common/get-host-lower';
 import Note, { pack } from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定したユーザーのタイムラインを取得します。'
+	},
+
+	params: {
+		userId: $.type(ID).optional.note({
+			desc: {
+				'ja-JP': 'ユーザーID'
+			}
+		}),
+
+		username: $.str.optional.note({
+			desc: {
+				'ja-JP': 'ユーザー名'
+			}
+		}),
+
+		host: $.str.optional.note({
+		}),
+
+		includeReplies: $.bool.optional.note({
+			default: true,
+
+			desc: {
+				'ja-JP': 'リプライを含めるか否か'
+			}
+		}),
+
+		limit: $.num.optional.range(1, 100).note({
+			default: 10,
+			desc: {
+				'ja-JP': '最大数'
+			}
+		}),
+
+		sinceId: $.type(ID).optional.note({
+			desc: {
+				'ja-JP': '指定すると、この投稿を基点としてより新しい投稿を取得します'
+			}
+		}),
+
+		untilId: $.type(ID).optional.note({
+			desc: {
+				'ja-JP': '指定すると、この投稿を基点としてより古い投稿を取得します'
+			}
+		}),
+
+		sinceDate: $.num.optional.note({
+			desc: {
+				'ja-JP': '指定した時間を基点としてより新しい投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+			}
+		}),
+
+		untilDate: $.num.optional.note({
+			desc: {
+				'ja-JP': '指定した時間を基点としてより古い投稿を取得します。数値は、1970年1月1日 00:00:00 UTC から指定した日時までの経過時間をミリ秒単位で表します。'
+			}
+		}),
+
+		includeMyRenotes: $.bool.optional.note({
+			default: true,
+			desc: {
+				'ja-JP': '自分の行ったRenoteを含めるかどうか'
+			}
+		}),
+
+		includeRenotedMyNotes: $.bool.optional.note({
+			default: true,
+			desc: {
+				'ja-JP': 'Renoteされた自分の投稿を含めるかどうか'
+			}
+		}),
+
+		includeLocalRenotes: $.bool.optional.note({
+			default: true,
+			desc: {
+				'ja-JP': 'Renoteされたローカルの投稿を含めるかどうか'
+			}
+		}),
+
+		withFiles: $.bool.optional.note({
+			default: false,
+			desc: {
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します'
+			}
+		}),
+
+		mediaOnly: $.bool.optional.note({
+			default: false,
+			desc: {
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
+			}
+		}),
+	}
+};
 
-/**
- * Get notes of a user
- */
 export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
-	// Get 'userId' parameter
-	const [userId, userIdErr] = $.type(ID).optional.get(params.userId);
-	if (userIdErr) return rej('invalid userId param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
-	// Get 'username' parameter
-	const [username, usernameErr] = $.str.optional.get(params.username);
-	if (usernameErr) return rej('invalid username param');
-
-	if (userId === undefined && username === undefined) {
+	if (ps.userId === undefined && ps.username === undefined) {
 		return rej('userId or username is required');
 	}
 
-	// Get 'host' parameter
-	const [host, hostErr] = $.str.optional.get(params.host);
-	if (hostErr) return rej('invalid host param');
-
-	// Get 'includeReplies' parameter
-	const [includeReplies = true, includeRepliesErr] = $.bool.optional.get(params.includeReplies);
-	if (includeRepliesErr) return rej('invalid includeReplies param');
-
-	// Get 'withFiles' parameter
-	const [withFiles = false, withFilesErr] = $.bool.optional.get(params.withFiles);
-	if (withFilesErr) return rej('invalid withFiles param');
-
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
-	if (limitErr) return rej('invalid limit param');
-
-	// Get 'sinceId' parameter
-	const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
-	if (sinceIdErr) return rej('invalid sinceId param');
-
-	// Get 'untilId' parameter
-	const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
-	if (untilIdErr) return rej('invalid untilId param');
-
-	// Get 'sinceDate' parameter
-	const [sinceDate, sinceDateErr] = $.num.optional.get(params.sinceDate);
-	if (sinceDateErr) throw 'invalid sinceDate param';
-
-	// Get 'untilDate' parameter
-	const [untilDate, untilDateErr] = $.num.optional.get(params.untilDate);
-	if (untilDateErr) throw 'invalid untilDate param';
-
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([sinceId, untilId, sinceDate, untilDate].filter(x => x != null).length > 1) {
+	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
-	const q = userId !== undefined
-		? { _id: userId }
-		: { usernameLower: username.toLowerCase(), host: getHostLower(host) } ;
+	const q = ps.userId !== undefined
+		? { _id: ps.userId }
+		: { usernameLower: ps.username.toLowerCase(), host: getHostLower(ps.host) } ;
 
 	// Lookup user
 	const user = await User.findOne(q, {
@@ -80,30 +138,32 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		userId: user._id
 	} as any;
 
-	if (sinceId) {
+	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {
-			$gt: sinceId
+			$gt: ps.sinceId
 		};
-	} else if (untilId) {
+	} else if (ps.untilId) {
 		query._id = {
-			$lt: untilId
+			$lt: ps.untilId
 		};
-	} else if (sinceDate) {
+	} else if (ps.sinceDate) {
 		sort._id = 1;
 		query.createdAt = {
-			$gt: new Date(sinceDate)
+			$gt: new Date(ps.sinceDate)
 		};
-	} else if (untilDate) {
+	} else if (ps.untilDate) {
 		query.createdAt = {
-			$lt: new Date(untilDate)
+			$lt: new Date(ps.untilDate)
 		};
 	}
 
-	if (!includeReplies) {
+	if (!ps.includeReplies) {
 		query.replyId = null;
 	}
 
+	const withFiles = ps.withFiles != null ? ps.withFiles : ps.mediaOnly;
+
 	if (withFiles) {
 		query.fileIds = {
 			$exists: true,
@@ -115,12 +175,10 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	// Issue query
 	const notes = await Note
 		.find(query, {
-			limit: limit,
+			limit: ps.limit,
 			sort: sort
 		});
 
 	// Serialize
-	res(await Promise.all(notes.map(async (note) =>
-		await pack(note, me)
-	)));
+	res(await Promise.all(notes.map(note => pack(note, me))));
 });

From 395cfa61089efc4ab3ea1b6c6842521bad31efed Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 02:16:08 +0900
Subject: [PATCH 115/539] Resolve #2625 (#2627)

---
 src/client/app/desktop/views/pages/deck/deck.column.vue | 3 ++-
 src/games/reversi/core.ts                               | 6 ++++--
 src/prelude/array.ts                                    | 7 +++++++
 src/server/activitypub/outbox.ts                        | 3 ++-
 src/server/api/endpoints/notes/global-timeline.ts       | 3 ++-
 src/server/api/endpoints/notes/hybrid-timeline.ts       | 3 ++-
 src/server/api/endpoints/notes/local-timeline.ts        | 3 ++-
 src/server/api/endpoints/notes/timeline.ts              | 3 ++-
 src/server/api/endpoints/users/notes.ts                 | 3 ++-
 9 files changed, 25 insertions(+), 9 deletions(-)
 create mode 100644 src/prelude/array.ts

diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 239b1b0447..abb09775fb 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -28,6 +28,7 @@
 import Vue from 'vue';
 import Menu from '../../../../common/views/components/menu.vue';
 import contextmenu from '../../../api/contextmenu';
+import { countIf } from '../../../../../../prelude/array';
 
 export default Vue.extend({
 	props: {
@@ -117,7 +118,7 @@ export default Vue.extend({
 		toggleActive() {
 			if (!this.isStacked) return;
 			const vms = this.$store.state.settings.deck.layout.find(ids => ids.indexOf(this.column.id) != -1).map(id => this.getColumnVm(id));
-			if (this.active && vms.filter(vm => vm.$el.classList.contains('active')).length == 1) return;
+			if (this.active && countIf(vm => vm.$el.classList.contains('active'), vms) == 1) return;
 			this.active = !this.active;
 		},
 
diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index b610d46884..34eb03becb 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -1,3 +1,5 @@
+import { count } from "../../prelude/array";
+
 // MISSKEY REVERSI ENGINE
 
 /**
@@ -101,14 +103,14 @@ export default class Reversi {
 	 * 黒石の数
 	 */
 	public get blackCount() {
-		return this.board.filter(x => x === BLACK).length;
+		return count(BLACK, this.board);
 	}
 
 	/**
 	 * 白石の数
 	 */
 	public get whiteCount() {
-		return this.board.filter(x => x === WHITE).length;
+		return count(BLACK, this.board);
 	}
 
 	/**
diff --git a/src/prelude/array.ts b/src/prelude/array.ts
new file mode 100644
index 0000000000..e944030a7f
--- /dev/null
+++ b/src/prelude/array.ts
@@ -0,0 +1,7 @@
+export function countIf<T>(f: (x: T) => boolean, xs: T[]): number {
+	return xs.filter(f).length;
+}
+
+export function count<T>(x: T, xs: T[]): number {
+	return countIf(y => x === y, xs);
+}
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index cc7e55b5df..a5e762eea8 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -10,6 +10,7 @@ import { setResponseType } from '../activitypub';
 
 import Note from '../../models/note';
 import renderNote from '../../remote/activitypub/renderer/note';
+import { countIf } from '../../prelude/array';
 
 export default async (ctx: Router.IRouterContext) => {
 	const userId = new mongo.ObjectID(ctx.params.user);
@@ -25,7 +26,7 @@ export default async (ctx: Router.IRouterContext) => {
 	const page: boolean = ctx.request.query.page === 'true';
 
 	// Validate parameters
-	if (sinceIdErr || untilIdErr || pageErr || [sinceId, untilId].filter(x => x != null).length > 1) {
+	if (sinceIdErr || untilIdErr || pageErr || countIf(x => x != null, [sinceId, untilId]) > 1) {
 		ctx.status = 400;
 		return;
 	}
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index e70fc5d76f..5d93cd78ec 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -4,6 +4,7 @@ import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import { countIf } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -42,7 +43,7 @@ export default async (params: any, user: ILocalUser) => {
 	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
+	if (countIf(x => x != null, [ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate]) > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 16cec86797..0eb7b61830 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -5,6 +5,7 @@ import { getFriends } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import { countIf } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -86,7 +87,7 @@ export default async (params: any, user: ILocalUser) => {
 	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
+	if (countIf(x => x != null, [ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate]) > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 2458a70556..39c385853d 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -4,6 +4,7 @@ import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import { countIf } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -42,7 +43,7 @@ export default async (params: any, user: ILocalUser) => {
 	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
+	if (countIf(x => x != null, [ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate]) > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 089e7a182a..5f3844987c 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -5,6 +5,7 @@ import { getFriends } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import { countIf } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -86,7 +87,7 @@ export default async (params: any, user: ILocalUser) => {
 	if (psErr) throw psErr;
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
+	if (countIf(x => x != null, [ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate]) > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index 42c31189d6..1ab7786a18 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -3,6 +3,7 @@ import getHostLower from '../../common/get-host-lower';
 import Note, { pack } from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import { countIf } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -110,7 +111,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	}
 
 	// Check if only one of sinceId, untilId, sinceDate, untilDate specified
-	if ([ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate].filter(x => x != null).length > 1) {
+	if (countIf(x => x != null, [ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate]) > 1) {
 		throw 'only one of sinceId, untilId, sinceDate, untilDate can be specified';
 	}
 

From ade7e628368fb1443056adf98ac65a768c6ba0d9 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 02:24:39 +0900
Subject: [PATCH 116/539] Add README.md for prelude (#2628)

---
 src/prelude/README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 src/prelude/README.md

diff --git a/src/prelude/README.md b/src/prelude/README.md
new file mode 100644
index 0000000000..bb728cfb1b
--- /dev/null
+++ b/src/prelude/README.md
@@ -0,0 +1,3 @@
+# Prelude
+このディレクトリのコードはJavaScriptの表現能力を補うためのコードです。
+Misskey固有の処理とは独立したコードの集まりですが、Misskeyのコードを読みやすくすることを目的としています。

From e8948452fdc18f8a85af34bc4687e304cd39c987 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 02:28:04 +0900
Subject: [PATCH 117/539] Resolve #2629 (#2630)

---
 src/mfm/html.ts      | 5 +----
 src/prelude/array.ts | 4 ++++
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/mfm/html.ts b/src/mfm/html.ts
index 2e38fe10a0..b7fa5b6f03 100644
--- a/src/mfm/html.ts
+++ b/src/mfm/html.ts
@@ -4,10 +4,7 @@ const { JSDOM } = jsdom;
 import config from '../config';
 import { INote } from '../models/note';
 import { TextElement } from './parse';
-
-function intersperse<T>(sep: T, xs: T[]): T[] {
-	return [].concat(...xs.map(x => [sep, x])).slice(1);
-}
+import { intersperse } from '../prelude/array';
 
 const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers: INote['mentionedRemoteUsers']) => void } = {
 	bold({ document }, { bold }) {
diff --git a/src/prelude/array.ts b/src/prelude/array.ts
index e944030a7f..aee17640ed 100644
--- a/src/prelude/array.ts
+++ b/src/prelude/array.ts
@@ -5,3 +5,7 @@ export function countIf<T>(f: (x: T) => boolean, xs: T[]): number {
 export function count<T>(x: T, xs: T[]): number {
 	return countIf(y => x === y, xs);
 }
+
+export function intersperse<T>(sep: T, xs: T[]): T[] {
+	return [].concat(...xs.map(x => [sep, x])).slice(1);
+}

From 1cc183ecdbc1d9e54d2d04634ea30b2dc071bc53 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 02:44:01 +0900
Subject: [PATCH 118/539] Resolve #2631 (#2632)

---
 src/client/app/common/scripts/gcd.ts                         | 2 --
 src/client/app/mobile/views/components/drive.file-detail.vue | 2 +-
 src/prelude/math.ts                                          | 3 +++
 3 files changed, 4 insertions(+), 3 deletions(-)
 delete mode 100644 src/client/app/common/scripts/gcd.ts
 create mode 100644 src/prelude/math.ts

diff --git a/src/client/app/common/scripts/gcd.ts b/src/client/app/common/scripts/gcd.ts
deleted file mode 100644
index 9a19f9da66..0000000000
--- a/src/client/app/common/scripts/gcd.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-const gcd = (a, b) => !b ? a : gcd(b, a % b);
-export default gcd;
diff --git a/src/client/app/mobile/views/components/drive.file-detail.vue b/src/client/app/mobile/views/components/drive.file-detail.vue
index 43867211e9..8108892597 100644
--- a/src/client/app/mobile/views/components/drive.file-detail.vue
+++ b/src/client/app/mobile/views/components/drive.file-detail.vue
@@ -67,7 +67,7 @@
 import Vue from 'vue';
 import * as EXIF from 'exif-js';
 import * as hljs from 'highlight.js';
-import gcd from '../../../common/scripts/gcd';
+import { gcd } from '../../../../../prelude/math';
 
 export default Vue.extend({
 	props: ['file'],
diff --git a/src/prelude/math.ts b/src/prelude/math.ts
new file mode 100644
index 0000000000..07b94bec30
--- /dev/null
+++ b/src/prelude/math.ts
@@ -0,0 +1,3 @@
+export function gcd(a: number, b: number): number {
+	return b === 0 ? a : gcd(b, a % b);
+}

From 498094b3c7d4fb80bf01fd2668c8244411a8a9fa Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 03:02:52 +0900
Subject: [PATCH 119/539] Refactor reversi engine (#2633)

* Refactor reversi engine

* Add puttablePlaces
---
 src/games/reversi/core.ts | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index 34eb03becb..9199efa092 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -1,4 +1,4 @@
-import { count } from "../../prelude/array";
+import { count, countIf } from "../../prelude/array";
 
 // MISSKEY REVERSI ENGINE
 
@@ -90,8 +90,8 @@ export default class Reversi {
 		//#endregion
 
 		// ゲームが始まった時点で片方の色の石しかないか、始まった時点で勝敗が決定するようなマップの場合がある
-		if (this.canPutSomewhere(BLACK).length == 0) {
-			if (this.canPutSomewhere(WHITE).length == 0) {
+		if (!this.canPutSomewhere(BLACK)) {
+			if (!this.canPutSomewhere(WHITE)) {
 				this.turn = null;
 			} else {
 				this.turn = WHITE;
@@ -172,9 +172,9 @@ export default class Reversi {
 
 	private calcTurn() {
 		// ターン計算
-		if (this.canPutSomewhere(!this.prevColor).length > 0) {
+		if (this.canPutSomewhere(!this.prevColor)) {
 			this.turn = !this.prevColor;
-		} else if (this.canPutSomewhere(this.prevColor).length > 0) {
+		} else if (this.canPutSomewhere(this.prevColor)) {
 			this.turn = this.prevColor;
 		} else {
 			this.turn = null;
@@ -206,10 +206,17 @@ export default class Reversi {
 	/**
 	 * 打つことができる場所を取得します
 	 */
-	public canPutSomewhere(color: Color): number[] {
+	public puttablePlaces(color: Color): number[] {
 		return Array.from(this.board.keys()).filter(i => this.canPut(color, i));
 	}
 
+	/**
+	 * 打つことができる場所があるかどうかを取得します
+	 */
+	public canPutSomewhere(color: Color): boolean {
+		return this.puttablePlaces(color).length > 0;
+	}
+
 	/**
 	 * 指定のマスに石を打つことができるかどうかを取得します
 	 * @param color 自分の色

From ebd1c877ada8c9081c3a42f7168f5e25b91427b1 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Thu, 6 Sep 2018 03:21:11 +0900
Subject: [PATCH 120/539] Show host in local user detail (#2634)

---
 src/client/app/common/views/components/acct.vue        | 10 ++++++++--
 .../app/desktop/views/pages/user/user.header.vue       |  2 +-
 src/client/app/mobile/views/pages/user.vue             |  2 +-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/client/app/common/views/components/acct.vue b/src/client/app/common/views/components/acct.vue
index 1ad222afdd..2b5efe609c 100644
--- a/src/client/app/common/views/components/acct.vue
+++ b/src/client/app/common/views/components/acct.vue
@@ -1,14 +1,20 @@
 <template>
 <span class="mk-acct">
 	<span class="name">@{{ user.username }}</span>
-	<span class="host" v-if="user.host">@{{ user.host }}</span>
+	<span class="host" v-if="user.host || detail">@{{ user.host || host }}</span>
 </span>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
+import { host } from '../../../config';
 export default Vue.extend({
-	props: ['user']
+	props: ['user', 'detail'],
+	data() {
+		return {
+			host
+		};
+	}
 });
 </script>
 
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index d8f4656ed0..4b434ec219 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -6,7 +6,7 @@
 		<div class="title">
 			<p class="name">{{ user | userName }}</p>
 			<div>
-				<span class="username"><mk-acct :user="user"/></span>
+				<span class="username"><mk-acct :user="user" :detail="true" /></span>
 				<span v-if="user.isBot" title="%i18n:@is-bot%">%fa:robot%</span>
 				<span class="location" v-if="user.host === null && user.profile.location">%fa:map-marker% {{ user.profile.location }}</span>
 				<span class="birthday" v-if="user.host === null && user.profile.birthday">%fa:birthday-cake% {{ user.profile.birthday.replace('-', '年').replace('-', '月') + '日' }} ({{ age }}歳)</span>
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index ddea43c9f2..c1082f31a9 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -16,7 +16,7 @@
 				</div>
 				<div class="title">
 					<h1>{{ user | userName }}</h1>
-					<span class="username"><mk-acct :user="user"/></span>
+					<span class="username"><mk-acct :user="user" :detail="true" /></span>
 					<span class="followed" v-if="user.isFollowed">%i18n:@follows-you%</span>
 				</div>
 				<div class="description">

From e2c6227f4713b91d94355c69d619ac2d5d865c1b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 04:28:22 +0900
Subject: [PATCH 121/539] Improve local timeline API

---
 src/server/api/endpoints/notes/local-timeline.ts | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 2458a70556..ce84b4135a 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -23,6 +23,12 @@ export const meta = {
 			}
 		}),
 
+		fileType: $.arr($.str).optional.note({
+			desc: {
+				'ja-JP': '指定された種類のファイルが添付された投稿のみを取得します'
+			}
+		}),
+
 		limit: $.num.optional.range(1, 100).note({
 			default: 10
 		}),
@@ -84,6 +90,14 @@ export default async (params: any, user: ILocalUser) => {
 		query.fileIds = { $exists: true, $ne: [] };
 	}
 
+	if (ps.fileType) {
+		query.fileIds = { $exists: true, $ne: [] };
+
+		query['_files.contentType'] = {
+			$in: ps.fileType
+		};
+	}
+
 	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {

From 451acb77df54d9d27177f0e3a618939d1a034310 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 04:28:39 +0900
Subject: [PATCH 122/539] Improve welcome page

---
 locales/ja-JP.yml                             |  2 ++
 .../app/desktop/views/pages/welcome.vue       | 33 +++++++++++++++++--
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 1b73c825bb..eaf940ed06 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -990,6 +990,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 
 desktop/views/pages/drive.vue:
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index ba22cb598f..f21070f36f 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -44,8 +44,7 @@
 		<div class="photos block">
 			<header>%fa:images% %i18n:@photos%</header>
 			<div>
-				<div v-for="photo in photos">
-				</div>
+				<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
 			</div>
 		</div>
 
@@ -99,6 +98,7 @@ export default Vue.extend({
 			photos: []
 		};
 	},
+
 	created() {
 		(this as any).os.getMeta().then(meta => {
 			this.name = meta.name;
@@ -110,14 +110,30 @@ export default Vue.extend({
 			this.stats = stats;
 		});
 
+		const image = [
+			'image/jpeg',
+			'image/png',
+			'image/gif'
+		];
+
+		(this as any).api('notes/local-timeline', {
+			fileType: image,
+			limit: 6
+		}).then(notes => {
+			const files = [].concat(...notes.map(n => n.files));
+			this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
+		});
 	},
+
 	methods: {
 		signup() {
 			this.$modal.show('signup');
 		},
+
 		signin() {
 			this.$modal.show('signin');
 		},
+
 		dark() {
 			this.$store.commit('device/set', {
 				key: 'darkmode',
@@ -280,6 +296,19 @@ root(isDark)
 			grid-row 2
 			grid-column 2
 
+			> div
+				display grid
+				grid-template-rows 1fr 1fr 1fr
+				grid-template-columns 1fr 1fr
+				gap 8px
+				height 100%
+				padding 16px
+
+				> div
+					//border-radius 4px
+					background-position center center
+					background-size cover
+
 		> .nav
 			display flex
 			justify-content center

From b4f86feddb213bf61a55dff6174a53a1561e8ffd Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 04:38:07 +0900
Subject: [PATCH 123/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index f21070f36f..f6473a4fc6 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -225,10 +225,14 @@ root(isDark)
 			overflow auto
 
 			> header
+				z-index 1
 				padding 0 16px
 				line-height 48px
 				background isDark ? #313543 : #fff
 
+				if !isDark
+					box-shadow 0 1px 0px rgba(0, 0, 0, 0.1)
+
 				& + div
 					max-height calc(100% - 48px)
 

From 91e0fc8c620a8b355151db481ccd59a6733f979b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 04:52:42 +0900
Subject: [PATCH 124/539] Improve welcome page

---
 .../app/desktop/views/pages/welcome.vue       | 10 +--
 src/client/app/mobile/views/pages/welcome.vue | 65 ++++++++++++++++++-
 2 files changed, 67 insertions(+), 8 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index f6473a4fc6..4cfae0c71e 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -34,9 +34,9 @@
 		<div class="announcements block">
 			<header>%fa:broadcast-tower% %i18n:@announcements%</header>
 			<div>
-				<div v-for="broadcast in broadcasts">
-					<h1 v-html="broadcast.title"></h1>
-					<div v-html="broadcast.text"></div>
+				<div v-for="announcement in announcements">
+					<h1 v-html="announcement.title"></h1>
+					<div v-html="announcement.text"></div>
 				</div>
 			</div>
 		</div>
@@ -94,7 +94,7 @@ export default Vue.extend({
 			host,
 			name: 'Misskey',
 			description: '',
-			broadcasts: [],
+			announcements: [],
 			photos: []
 		};
 	},
@@ -103,7 +103,7 @@ export default Vue.extend({
 		(this as any).os.getMeta().then(meta => {
 			this.name = meta.name;
 			this.description = meta.description;
-			this.broadcasts = meta.broadcasts;
+			this.announcements = meta.broadcasts;
 		});
 
 		(this as any).api('stats').then(stats => {
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 49227790ff..1856731d8a 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="welcome">
+<div class="wgwfgvvimdjvhjfwxropcwksnzftjqes">
 	<div>
 		<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name">
 		<p class="host">{{ host }}</p>
@@ -17,10 +17,19 @@
 		<div class="hashtags">
 			<router-link v-for="tag in tags" :key="tag" :to="`/tags/${ tag }`" :title="tag">#{{ tag }}</router-link>
 		</div>
+		<div class="photos">
+			<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
+		</div>
 		<div class="stats" v-if="stats">
 			<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
 			<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
 		</div>
+		<div class="announcements" v-if="announcements && announcements.length > 0">
+			<article v-for="announcement in announcements">
+				<span class="title" v-html="announcement.title"></span>
+				<div v-html="announcement.text"></div>
+			</article>
+		</div>
 		<footer>
 			<small>{{ copyright }}</small>
 		</footer>
@@ -41,13 +50,16 @@ export default Vue.extend({
 			host,
 			name: 'Misskey',
 			description: '',
-			tags: []
+			tags: [],
+			photos: [],
+			announcements: []
 		};
 	},
 	created() {
 		(this as any).os.getMeta().then(meta => {
 			this.name = meta.name;
 			this.description = meta.description;
+			this.announcements = meta.broadcasts;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -57,12 +69,26 @@ export default Vue.extend({
 		(this as any).api('hashtags/trend').then(stats => {
 			this.tags = stats.map(x => x.tag);
 		});
+
+		const image = [
+			'image/jpeg',
+			'image/png',
+			'image/gif'
+		];
+
+		(this as any).api('notes/local-timeline', {
+			fileType: image,
+			limit: 6
+		}).then(notes => {
+			const files = [].concat(...notes.map(n => n.files));
+			this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
+		});
 	}
 });
 </script>
 
 <style lang="stylus" scoped>
-.welcome
+root(isDark)
 	text-align center
 	//background #fff
 
@@ -145,6 +171,19 @@ export default Vue.extend({
 			> *
 				margin 0 16px
 
+		> .photos
+			display grid
+			grid-template-rows 1fr 1fr 1fr
+			grid-template-columns 1fr 1fr
+			gap 8px
+			height 300px
+			margin-top 16px
+
+			> div
+				border-radius 4px
+				background-position center center
+				background-size cover
+
 		> .stats
 			margin 16px 0
 			padding 8px
@@ -156,6 +195,20 @@ export default Vue.extend({
 			> *
 				margin 0 8px
 
+		> .announcements
+			margin 16px 0
+
+			> article
+				background isDark ? rgba(30, 129, 216, 0.2) : rgba(155, 196, 232, 0.2)
+				border-radius 6px
+				color isDark ? #fff : #3f4967
+				padding 16px
+				margin 8px 0
+				font-size 12px
+
+				> .title
+					font-weight bold
+
 		> footer
 			text-align center
 			color #444
@@ -165,4 +218,10 @@ export default Vue.extend({
 				margin 16px 0 0 0
 				opacity 0.7
 
+.wgwfgvvimdjvhjfwxropcwksnzftjqes[data-darkmode]
+	root(true)
+
+.wgwfgvvimdjvhjfwxropcwksnzftjqes:not([data-darkmode])
+	root(false)
+
 </style>

From 2448bf4e4e8433695f9a8611a8ea2c98d51f7f2f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 04:57:21 +0900
Subject: [PATCH 125/539] 8.27.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 775c997e55..60c6a09787 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.0.0",
-	"clientVersion": "1.0.9358",
+	"version": "8.27.0",
+	"clientVersion": "1.0.9378",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 8e359d54bdd05f6718d8dab28ae19e1d1f657f89 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 06:06:22 +0900
Subject: [PATCH 126/539] if elimination (#2635)

---
 src/server/api/call.ts | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/server/api/call.ts b/src/server/api/call.ts
index e9abc11f54..ee79e0a13c 100644
--- a/src/server/api/call.ts
+++ b/src/server/api/call.ts
@@ -25,10 +25,8 @@ export default (endpoint: string, user: IUser, app: IApp, data: any, file?: any)
 		return rej('YOU_ARE_NOT_ADMIN');
 	}
 
-	if (app && ep.meta.kind) {
-		if (!app.permission.some(p => p === ep.meta.kind)) {
-			return rej('PERMISSION_DENIED');
-		}
+	if (app && ep.meta.kind && !app.permission.some(p => p === ep.meta.kind)) {
+		return rej('PERMISSION_DENIED');
 	}
 
 	if (ep.meta.requireCredential && ep.meta.limit) {

From 4a00c13b33fa647e4833317f2b2251b740968924 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 6 Sep 2018 16:03:00 +0900
Subject: [PATCH 127/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 4cfae0c71e..0138fde273 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -213,7 +213,7 @@ root(isDark)
 		width 100%
 		max-width 1200px
 		height 100vh
-		min-height 1000px
+		min-height 950px
 		margin 0 auto
 		padding 64px
 

From 40735ce76bbe727eb9c87475d71e19506e5aad0d Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 19:28:52 +0900
Subject: [PATCH 128/539] Fix bug (#2638)

---
 src/games/reversi/core.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index 9199efa092..481b5b0f75 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -110,7 +110,7 @@ export default class Reversi {
 	 * 白石の数
 	 */
 	public get whiteCount() {
-		return count(BLACK, this.board);
+		return count(WHITE, this.board);
 	}
 
 	/**

From a1b026239e8d38ae1c25bdeb59086551bbac0397 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 6 Sep 2018 19:55:20 +0900
Subject: [PATCH 129/539] fix(package): update @types/ws to version 6.0.1
 (#2636)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 60c6a09787..3aa41cd504 100644
--- a/package.json
+++ b/package.json
@@ -80,7 +80,7 @@
 		"@types/webpack": "4.4.11",
 		"@types/webpack-stream": "3.2.10",
 		"@types/websocket": "0.0.40",
-		"@types/ws": "6.0.0",
+		"@types/ws": "6.0.1",
 		"animejs": "2.2.0",
 		"autosize": "4.0.2",
 		"autwh": "0.1.0",

From 5dd2feba9bf12598eb240e3ece1844124392917d Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 6 Sep 2018 19:55:29 +0900
Subject: [PATCH 130/539] fix(package): update @types/minio to version 7.0.0
 (#2626)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 3aa41cd504..811a60814a 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,7 @@
 		"@types/koa-send": "4.1.1",
 		"@types/koa-views": "2.0.3",
 		"@types/koa__cors": "2.2.3",
-		"@types/minio": "6.0.2",
+		"@types/minio": "7.0.0",
 		"@types/mkdirp": "0.5.2",
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.4",

From f428372869461cf350c0e0cd21c41312a3e0f56f Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 20:06:16 +0900
Subject: [PATCH 131/539] Refactor effects function (#2639)

---
 src/games/reversi/core.ts | 90 +++++++++++++--------------------------
 tslint.json               |  1 +
 2 files changed, 30 insertions(+), 61 deletions(-)

diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index 481b5b0f75..e2a2289f18 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -238,87 +238,55 @@ export default class Reversi {
 	/**
 	 * 指定のマスに石を置いた時の、反転させられる石を取得します
 	 * @param color 自分の色
-	 * @param pos 位置
+	 * @param initPos 位置
 	 */
-	public effects(color: Color, pos: number): number[] {
+	public effects(color: Color, initPos: number): number[] {
 		const enemyColor = !color;
 
-		// ひっくり返せる石(の位置)リスト
-		let stones: number[] = [];
+		const diffVectors: [number, number][] = [
+			[  0,  -1], // 上
+			[ +1,  -1], // 右上
+			[ +1,   0], // 右
+			[ +1,  +1], // 右下
+			[  0,  +1], // 下
+			[ -1,  +1], // 左下
+			[ -1,   0], // 左
+			[ -1,  -1]  // 左上
+		];
 
-		const initPos = pos;
-
-		// 走査
-		const iterate = (fn: (i: number) => number[]) => {
-			let i = 1;
-			const found = [];
+		const effectsInLine = ([dx, dy]: [number, number]): number[] => {
+			const nextPos = (x: number, y: number): [number, number] => [x + dx, y + dy];
 
+			const found: number[] = []; // 挟めるかもしれない相手の石を入れておく配列
+			let [x, y] = this.transformPosToXy(initPos);
 			while (true) {
-				let [x, y] = fn(i);
-
 				// 座標が指し示す位置がボード外に出たとき
 				if (this.opts.loopedBoard) {
-					if (x <  0             ) x = this.mapWidth  - ((-x) % this.mapWidth);
-					if (y <  0             ) y = this.mapHeight - ((-y) % this.mapHeight);
-					if (x >= this.mapWidth ) x = x % this.mapWidth;
-					if (y >= this.mapHeight) y = y % this.mapHeight;
+					x = ((x % this.mapWidth) + this.mapWidth) % this.mapWidth;
+					y = ((y % this.mapHeight) + this.mapHeight) % this.mapHeight;
 
-					// for debug
-					//if (x < 0 || y < 0 || x >= this.mapWidth || y >= this.mapHeight) {
-					//	console.log(x, y);
-					//}
-
-					// 一周して自分に帰ってきたら
 					if (this.transformXyToPos(x, y) == initPos) {
-						// ↓のコメントアウトを外すと、「現時点で自分の石が隣接していないが、
-						// そこに置いたとするとループして最終的に挟んだことになる」というケースを有効化します。(Test4のマップで違いが分かります)
-						// このケースを有効にした方が良いのか無効にした方が良いのか判断がつかなかったためとりあえず無効としておきます
-						// (あと無効な方がゲームとしておもしろそうだった)
-						stones = stones.concat(found);
-						break;
+						// 盤面の境界でループし、自分が石を置く位置に戻ってきたとき、挟めるようにしている (ref: Test4のマップ)
+						return found;
 					}
 				} else {
-					if (x == -1 || y == -1 || x == this.mapWidth || y == this.mapHeight) break;
+					if (x == -1 || y == -1 || x == this.mapWidth || y == this.mapHeight) {
+						return []; // 挟めないことが確定 (盤面外に到達)
+					}
 				}
 
 				const pos = this.transformXyToPos(x, y);
-
-				//#region 「配置不能」マスに当たった場合走査終了
-				const pixel = this.mapDataGet(pos);
-				if (pixel == 'null') break;
-				//#endregion
-
-				// 石取得
+				if (this.mapDataGet(pos) === 'null') return []; // 挟めないことが確定 (配置不可能なマスに到達)
 				const stone = this.board[pos];
+				if (stone === null) return []; // 挟めないことが確定 (石が置かれていないマスに到達)
+				if (stone === enemyColor) found.push(pos); // 挟めるかもしれない (相手の石を発見)
+				if (stone === color) return found; // 挟めることが確定 (対となる自分の石を発見)
 
-				// 石が置かれていないマスなら走査終了
-				if (stone === null) break;
-
-				// 相手の石なら「ひっくり返せるかもリスト」に入れておく
-				if (stone === enemyColor) found.push(pos);
-
-				// 自分の石なら「ひっくり返せるかもリスト」を「ひっくり返せるリスト」に入れ、走査終了
-				if (stone === color) {
-					stones = stones.concat(found);
-					break;
-				}
-
-				i++;
+				[x, y] = nextPos(x, y);
 			}
 		};
 
-		const [x, y] = this.transformPosToXy(pos);
-
-		iterate(i => [x    , y - i]); // 上
-		iterate(i => [x + i, y - i]); // 右上
-		iterate(i => [x + i, y    ]); // 右
-		iterate(i => [x + i, y + i]); // 右下
-		iterate(i => [x    , y + i]); // 下
-		iterate(i => [x - i, y + i]); // 左下
-		iterate(i => [x - i, y    ]); // 左
-		iterate(i => [x - i, y - i]); // 左上
-
-		return stones;
+		return [].concat(...diffVectors.map(effectsInLine));
 	}
 
 	/**
diff --git a/tslint.json b/tslint.json
index ae0df46b96..1adc0a2aed 100644
--- a/tslint.json
+++ b/tslint.json
@@ -17,6 +17,7 @@
 		"no-empty":false,
 		"ordered-imports": [false],
 		"arrow-parens": false,
+		"array-type": false,
 		"object-literal-shorthand": false,
 		"object-literal-key-quotes": false,
 		"triple-equals": [false],

From 3cace734c70c752c57ed9a0057aef4d7ef788528 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Thu, 6 Sep 2018 21:31:15 +0900
Subject: [PATCH 132/539] Add concat function (#2640)

---
 src/client/app/desktop/views/pages/welcome.vue | 5 +++--
 src/client/app/mobile/views/pages/welcome.vue  | 5 +++--
 src/games/reversi/core.ts                      | 4 ++--
 src/prelude/array.ts                           | 8 ++++++--
 4 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 0138fde273..7409f6c9b6 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -85,6 +85,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { host, copyright } from '../../../config';
+import { concat } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	data() {
@@ -119,8 +120,8 @@ export default Vue.extend({
 		(this as any).api('notes/local-timeline', {
 			fileType: image,
 			limit: 6
-		}).then(notes => {
-			const files = [].concat(...notes.map(n => n.files));
+		}).then((notes: any[]) => {
+			const files = concat(notes.map((n: any): any[] => n.files));
 			this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
 		});
 	},
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 1856731d8a..7446cc700f 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -40,6 +40,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { apiUrl, copyright, host } from '../../../config';
+import { concat } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	data() {
@@ -79,8 +80,8 @@ export default Vue.extend({
 		(this as any).api('notes/local-timeline', {
 			fileType: image,
 			limit: 6
-		}).then(notes => {
-			const files = [].concat(...notes.map(n => n.files));
+		}).then((notes: any[]) => {
+			const files = concat(notes.map((n: any): any[] => n.files));
 			this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
 		});
 	}
diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index e2a2289f18..3ca9d052af 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -1,4 +1,4 @@
-import { count, countIf } from "../../prelude/array";
+import { count, concat } from "../../prelude/array";
 
 // MISSKEY REVERSI ENGINE
 
@@ -286,7 +286,7 @@ export default class Reversi {
 			}
 		};
 
-		return [].concat(...diffVectors.map(effectsInLine));
+		return concat(diffVectors.map(effectsInLine));
 	}
 
 	/**
diff --git a/src/prelude/array.ts b/src/prelude/array.ts
index aee17640ed..9a3c266d6d 100644
--- a/src/prelude/array.ts
+++ b/src/prelude/array.ts
@@ -6,6 +6,10 @@ export function count<T>(x: T, xs: T[]): number {
 	return countIf(y => x === y, xs);
 }
 
-export function intersperse<T>(sep: T, xs: T[]): T[] {
-	return [].concat(...xs.map(x => [sep, x])).slice(1);
+export function concat<T>(xss: T[][]): T[] {
+	return ([] as T[]).concat(...xss);
+}
+
+export function intersperse<T>(sep: T, xs: T[]): T[] {
+	return concat(xs.map(x => [sep, x])).slice(1);
 }

From 00d79487cd89f3cae675ecc0392c47ba547b69a5 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 00:02:55 +0900
Subject: [PATCH 133/539] Add erase function (#2641)

---
 .../app/common/scripts/streaming/stream-manager.ts       | 3 ++-
 src/client/app/common/views/components/poll-editor.vue   | 3 ++-
 src/client/app/desktop/views/components/post-form.vue    | 3 ++-
 src/client/app/mios.ts                                   | 3 ++-
 src/client/app/mobile/views/components/post-form.vue     | 3 ++-
 src/client/app/store.ts                                  | 7 ++++---
 src/client/app/sw.js                                     | 4 ++--
 src/prelude/array.ts                                     | 4 ++++
 src/server/api/endpoints/hashtags/trend.ts               | 4 ++--
 src/server/api/endpoints/notes/search_by_tag.ts          | 9 +++++----
 src/services/note/create.ts                              | 7 ++++---
 11 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/src/client/app/common/scripts/streaming/stream-manager.ts b/src/client/app/common/scripts/streaming/stream-manager.ts
index 568b8b0372..8dd06f67d3 100644
--- a/src/client/app/common/scripts/streaming/stream-manager.ts
+++ b/src/client/app/common/scripts/streaming/stream-manager.ts
@@ -1,6 +1,7 @@
 import { EventEmitter } from 'eventemitter3';
 import * as uuid from 'uuid';
 import Connection from './stream';
+import { erase } from '../../../../../prelude/array';
 
 /**
  * ストリーム接続を管理するクラス
@@ -89,7 +90,7 @@ export default abstract class StreamManager<T extends Connection> extends EventE
 	 * @param userId use で発行したユーザーID
 	 */
 	public dispose(userId) {
-		this.users = this.users.filter(id => id != userId);
+		this.users = erase(userId, this.users);
 
 		this._connection.user = `Managed (${ this.users.length })`;
 
diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue
index 115c934c8b..30d9799fec 100644
--- a/src/client/app/common/views/components/poll-editor.vue
+++ b/src/client/app/common/views/components/poll-editor.vue
@@ -20,6 +20,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { erase } from '../../../../../prelude/array';
 export default Vue.extend({
 	data() {
 		return {
@@ -53,7 +54,7 @@ export default Vue.extend({
 
 		get() {
 			return {
-				choices: this.choices.filter(choice => choice != '')
+				choices: erase('', this.choices)
 			}
 		},
 
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index f6f52c8f1f..65dc9eb9c2 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -62,6 +62,7 @@ import getFace from '../../../common/scripts/get-face';
 import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
+import { erase } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	components: {
@@ -346,7 +347,7 @@ export default Vue.extend({
 		},
 
 		removeVisibleUser(user) {
-			this.visibleUsers = this.visibleUsers.filter(u => u != user);
+			this.visibleUsers = erase(user, this.visibleUsers);
 		},
 
 		post() {
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index c2ec7f1750..0f72cd2f34 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -17,6 +17,7 @@ import Err from './common/views/components/connect-failed.vue';
 import { LocalTimelineStreamManager } from './common/scripts/streaming/local-timeline';
 import { HybridTimelineStreamManager } from './common/scripts/streaming/hybrid-timeline';
 import { GlobalTimelineStreamManager } from './common/scripts/streaming/global-timeline';
+import { erase } from '../../prelude/array';
 
 //#region api requests
 let spinner = null;
@@ -537,7 +538,7 @@ export default class MiOS extends EventEmitter {
 	}
 
 	public unregisterStreamConnection(connection: Connection) {
-		this.connections = this.connections.filter(c => c != connection);
+		this.connections = erase(connection, this.connections);
 	}
 }
 
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 644e27cce8..8107c1f3a7 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -59,6 +59,7 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
 import getFace from '../../../common/scripts/get-face';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
+import { erase } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	components: {
@@ -262,7 +263,7 @@ export default Vue.extend({
 		},
 
 		removeVisibleUser(user) {
-			this.visibleUsers = this.visibleUsers.filter(u => u != user);
+			this.visibleUsers = erase(user, this.visibleUsers);
 		},
 
 		clear() {
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 53f3eefc08..08dd9f9920 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -4,6 +4,7 @@ import * as nestedProperty from 'nested-property';
 
 import MiOS from './mios';
 import { hostname } from './config';
+import { erase } from '../../prelude/array';
 
 const defaultSettings = {
 	home: null,
@@ -195,7 +196,7 @@ export default (os: MiOS) => new Vuex.Store({
 
 				removeDeckColumn(state, id) {
 					state.deck.columns = state.deck.columns.filter(c => c.id != id);
-					state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id));
+					state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
 					state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
 				},
 
@@ -266,7 +267,7 @@ export default (os: MiOS) => new Vuex.Store({
 
 				stackLeftDeckColumn(state, id) {
 					const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1);
-					state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id));
+					state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
 					const left = state.deck.layout[i - 1];
 					if (left) state.deck.layout[i - 1].push(id);
 					state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
@@ -274,7 +275,7 @@ export default (os: MiOS) => new Vuex.Store({
 
 				popRightDeckColumn(state, id) {
 					const i = state.deck.layout.findIndex(ids => ids.indexOf(id) != -1);
-					state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id));
+					state.deck.layout = state.deck.layout.map(ids => erase(id, ids));
 					state.deck.layout.splice(i + 1, 0, [id]);
 					state.deck.layout = state.deck.layout.filter(ids => ids.length > 0);
 				},
diff --git a/src/client/app/sw.js b/src/client/app/sw.js
index ac7ea20acf..d381bfb7a5 100644
--- a/src/client/app/sw.js
+++ b/src/client/app/sw.js
@@ -3,6 +3,7 @@
  */
 
 import composeNotification from './common/scripts/compose-notification';
+import { erase } from '../../prelude/array';
 
 // キャッシュするリソース
 const cachee = [
@@ -24,8 +25,7 @@ self.addEventListener('activate', ev => {
 	// Clean up old caches
 	ev.waitUntil(
 		caches.keys().then(keys => Promise.all(
-			keys
-				.filter(key => key != _VERSION_)
+			erase(_VERSION_, keys)
 				.map(key => caches.delete(key))
 		))
 	);
diff --git a/src/prelude/array.ts b/src/prelude/array.ts
index 9a3c266d6d..a2a6bbd4c6 100644
--- a/src/prelude/array.ts
+++ b/src/prelude/array.ts
@@ -13,3 +13,7 @@ export function concat<T>(xss: T[][]): T[] {
 export function intersperse<T>(sep: T, xs: T[]): T[] {
 	return concat(xs.map(x => [sep, x])).slice(1);
 }
+
+export function erase<T>(x: T, xs: T[]): T[] {
+	return xs.filter(y => x !== y);
+}
diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts
index 01dfccc71c..e7c08ca9f0 100644
--- a/src/server/api/endpoints/hashtags/trend.ts
+++ b/src/server/api/endpoints/hashtags/trend.ts
@@ -1,4 +1,5 @@
 import Note from '../../../../models/note';
+import { erase } from '../../../../prelude/array';
 
 /*
 トレンドに載るためには「『直近a分間のユニーク投稿数が今からa分前~今からb分前の間のユニーク投稿数のn倍以上』のハッシュタグの上位5位以内に入る」ことが必要
@@ -85,8 +86,7 @@ export default () => new Promise(async (res, rej) => {
 	//#endregion
 
 	// タグを人気順に並べ替え
-	let hots = (await Promise.all(hotsPromises))
-		.filter(x => x != null)
+	let hots = erase(null, await Promise.all(hotsPromises))
 		.sort((a, b) => b.count - a.count)
 		.map(tag => tag.name)
 		.slice(0, max);
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 82f11a9775..77082c2600 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -5,6 +5,7 @@ import Mute from '../../../../models/mute';
 import { getFriendIds } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
 import getParams from '../../get-params';
+import { erase } from '../../../../prelude/array';
 
 export const meta = {
 	desc: {
@@ -103,23 +104,23 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	if (psErr) throw psErr;
 
 	if (ps.includeUserUsernames != null) {
-		const ids = (await Promise.all(ps.includeUserUsernames.map(async (username) => {
+		const ids = erase(null, await Promise.all(ps.includeUserUsernames.map(async (username) => {
 			const _user = await User.findOne({
 				usernameLower: username.toLowerCase()
 			});
 			return _user ? _user._id : null;
-		}))).filter(id => id != null);
+		})));
 
 		ids.forEach(id => ps.includeUserIds.push(id));
 	}
 
 	if (ps.excludeUserUsernames != null) {
-		const ids = (await Promise.all(ps.excludeUserUsernames.map(async (username) => {
+		const ids = erase(null, await Promise.all(ps.excludeUserUsernames.map(async (username) => {
 			const _user = await User.findOne({
 				usernameLower: username.toLowerCase()
 			});
 			return _user ? _user._id : null;
-		}))).filter(id => id != null);
+		})));
 
 		ids.forEach(id => ps.excludeUserIds.push(id));
 	}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 11e3755863..4759497c63 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -24,6 +24,7 @@ import isQuote from '../../misc/is-quote';
 import { TextElementMention } from '../../mfm/parse/elements/mention';
 import { TextElementHashtag } from '../../mfm/parse/elements/hashtag';
 import { updateNoteStats } from '../update-chart';
+import { erase } from '../../prelude/array';
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
@@ -103,7 +104,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 	if (data.viaMobile == null) data.viaMobile = false;
 
 	if (data.visibleUsers) {
-		data.visibleUsers = data.visibleUsers.filter(x => x != null);
+		data.visibleUsers = erase(null, data.visibleUsers);
 	}
 
 	if (data.reply && data.reply.deletedAt != null) {
@@ -547,13 +548,13 @@ async function extractMentionedUsers(tokens: ReturnType<typeof parse>): Promise<
 	)];
 
 	const mentionedUsers = [...new Set(
-		(await Promise.all(mentionTokens.map(async m => {
+		erase(null, await Promise.all(mentionTokens.map(async m => {
 			try {
 				return await resolveUser(m.username, m.host);
 			} catch (e) {
 				return null;
 			}
-		}))).filter(x => x != null)
+		})))
 	)];
 
 	return mentionedUsers;

From e34b264af2e859d9615d6d5308b7fe1bb1b00be8 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 00:03:44 +0900
Subject: [PATCH 134/539] Fix bug (#2643)

---
 src/games/reversi/core.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/games/reversi/core.ts b/src/games/reversi/core.ts
index 3ca9d052af..e724917fbf 100644
--- a/src/games/reversi/core.ts
+++ b/src/games/reversi/core.ts
@@ -260,6 +260,8 @@ export default class Reversi {
 			const found: number[] = []; // 挟めるかもしれない相手の石を入れておく配列
 			let [x, y] = this.transformPosToXy(initPos);
 			while (true) {
+				[x, y] = nextPos(x, y);
+
 				// 座標が指し示す位置がボード外に出たとき
 				if (this.opts.loopedBoard) {
 					x = ((x % this.mapWidth) + this.mapWidth) % this.mapWidth;
@@ -281,8 +283,6 @@ export default class Reversi {
 				if (stone === null) return []; // 挟めないことが確定 (石が置かれていないマスに到達)
 				if (stone === enemyColor) found.push(pos); // 挟めるかもしれない (相手の石を発見)
 				if (stone === color) return found; // 挟めることが確定 (対となる自分の石を発見)
-
-				[x, y] = nextPos(x, y);
 			}
 		};
 

From ff0a05a2d67f45ec9ff06d50c5be821d559c2528 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 00:10:03 +0900
Subject: [PATCH 135/539] Add unique function (#2644)

---
 src/prelude/array.ts        |  4 ++++
 src/services/note/create.ts | 12 ++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/prelude/array.ts b/src/prelude/array.ts
index a2a6bbd4c6..abef6ca039 100644
--- a/src/prelude/array.ts
+++ b/src/prelude/array.ts
@@ -17,3 +17,7 @@ export function intersperse<T>(sep: T, xs: T[]): T[] {
 export function erase<T>(x: T, xs: T[]): T[] {
 	return xs.filter(y => x !== y);
 }
+
+export function unique<T>(xs: T[]): T[] {
+	return [...new Set(xs)];
+}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 4759497c63..c08836c94b 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -24,7 +24,7 @@ import isQuote from '../../misc/is-quote';
 import { TextElementMention } from '../../mfm/parse/elements/mention';
 import { TextElementHashtag } from '../../mfm/parse/elements/hashtag';
 import { updateNoteStats } from '../update-chart';
-import { erase } from '../../prelude/array';
+import { erase, unique } from '../../prelude/array';
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
@@ -385,7 +385,7 @@ function extractHashtags(tokens: ReturnType<typeof parse>): string[] {
 		.map(t => (t as TextElementHashtag).hashtag)
 		.filter(tag => tag.length <= 100);
 
-	return [...new Set(hashtags)];
+	return unique(hashtags);
 }
 
 function index(note: INote) {
@@ -542,12 +542,12 @@ function incNotesCount(user: IUser) {
 async function extractMentionedUsers(tokens: ReturnType<typeof parse>): Promise<IUser[]> {
 	if (tokens == null) return [];
 
-	const mentionTokens = [...new Set(
+	const mentionTokens = unique(
 		tokens
 			.filter(t => t.type == 'mention') as TextElementMention[]
-	)];
+	);
 
-	const mentionedUsers = [...new Set(
+	const mentionedUsers = unique(
 		erase(null, await Promise.all(mentionTokens.map(async m => {
 			try {
 				return await resolveUser(m.username, m.host);
@@ -555,7 +555,7 @@ async function extractMentionedUsers(tokens: ReturnType<typeof parse>): Promise<
 				return null;
 			}
 		})))
-	)];
+	);
 
 	return mentionedUsers;
 }

From 5cd6a0db165247d1c3349c7bda166d0c2bc0e994 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 00:44:57 +0900
Subject: [PATCH 136/539] Fix typo: serive -> service (#2647)

---
 src/client/app/boot.js                            | 2 +-
 src/client/app/common/scripts/check-for-update.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index dd2cf93a89..f14cebe7d5 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -140,7 +140,7 @@
 		// Random
 		localStorage.setItem('salt', Math.random().toString());
 
-		// Clear cache (serive worker)
+		// Clear cache (service worker)
 		try {
 			navigator.serviceWorker.controller.postMessage('clear');
 
diff --git a/src/client/app/common/scripts/check-for-update.ts b/src/client/app/common/scripts/check-for-update.ts
index 4445eefc39..91b165b45d 100644
--- a/src/client/app/common/scripts/check-for-update.ts
+++ b/src/client/app/common/scripts/check-for-update.ts
@@ -9,7 +9,7 @@ export default async function(mios: MiOS, force = false, silent = false) {
 		localStorage.setItem('should-refresh', 'true');
 		localStorage.setItem('v', newer);
 
-		// Clear cache (serive worker)
+		// Clear cache (service worker)
 		try {
 			if (navigator.serviceWorker.controller) {
 				navigator.serviceWorker.controller.postMessage('clear');

From 10232c5866bdb79dd2d6cbc91d2b8f3827af3ad4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 00:52:13 +0900
Subject: [PATCH 137/539] Fix bug & some refactor

---
 .../app/common/views/widgets/broadcast.vue       | 16 ++++++++--------
 src/client/app/desktop/views/pages/welcome.vue   |  2 +-
 .../app/mobile/views/components/ui.nav.vue       |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index e4e77263e5..c0f97e97c1 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="anltbovirfeutcigvwgmgxipejaeozxi"
-	:data-found="broadcasts.length != 0"
+	:data-found="announcements && announcements.length != 0"
 	:data-melt="props.design == 1"
 	:data-mobile="platform == 'mobile'"
 >
@@ -14,12 +14,12 @@
 		</svg>
 	</div>
 	<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
-	<h1 v-if="!fetching">{{ broadcasts.length == 0 ? '%i18n:@no-broadcasts%' : broadcasts[i].title }}</h1>
+	<h1 v-if="!fetching">{{ announcements.length == 0 ? '%i18n:@no-broadcasts%' : announcements[i].title }}</h1>
 	<p v-if="!fetching">
-		<span v-if="broadcasts.length != 0" v-html="broadcasts[i].text"></span>
-		<template v-if="broadcasts.length == 0">%i18n:@have-a-nice-day%</template>
+		<span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
+		<template v-if="announcements.length == 0">%i18n:@have-a-nice-day%</template>
 	</p>
-	<a v-if="broadcasts.length > 1" @click="next">%i18n:@next% &gt;&gt;</a>
+	<a v-if="announcements.length > 1" @click="next">%i18n:@next% &gt;&gt;</a>
 </div>
 </template>
 
@@ -36,18 +36,18 @@ export default define({
 		return {
 			i: 0,
 			fetching: true,
-			broadcasts: []
+			announcements: []
 		};
 	},
 	mounted() {
 		(this as any).os.getMeta().then(meta => {
-			this.broadcasts = meta.broadcasts;
+			this.announcements = meta.broadcasts;
 			this.fetching = false;
 		});
 	},
 	methods: {
 		next() {
-			if (this.i == this.broadcasts.length - 1) {
+			if (this.i == this.announcements.length - 1) {
 				this.i = 0;
 			} else {
 				this.i++;
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 0138fde273..d55029fb50 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -33,7 +33,7 @@
 
 		<div class="announcements block">
 			<header>%fa:broadcast-tower% %i18n:@announcements%</header>
-			<div>
+			<div v-if="announcements && announcements.length > 0">
 				<div v-for="announcement in announcements">
 					<h1 v-html="announcement.title"></h1>
 					<div v-html="announcement.text"></div>
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 83a8eb4392..c3ae05fef6 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -34,7 +34,7 @@
 					<li @click="dark"><p><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template><span>%i18n:@darkmode%</span></p></li>
 				</ul>
 			</div>
-			<div class="announcements" v-if="announcements.length > 0">
+			<div class="announcements" v-if="announcements && announcements.length > 0">
 				<article v-for="announcement in announcements">
 					<span v-html="announcement.title" class="title"></span>
 					<div v-html="announcement.text"></div>

From 98954cd6d4c0ef25f704bd3df761361f48740ca5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 01:02:31 +0900
Subject: [PATCH 138/539] Trim image

---
 src/client/assets/pointer.png | Bin 237627 -> 280910 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/src/client/assets/pointer.png b/src/client/assets/pointer.png
index 0d03f75d2b91c9d874d656628a97d76c9fb6bd5e..c9aaada5a39a8a02340a7d14e7df465de26df5db 100644
GIT binary patch
literal 280910
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

literal 237627
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


From bf7e19b288c8ffda07e9adc300234b4bfc8c8b15 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 01:18:47 +0900
Subject: [PATCH 139/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 1bcb0ecb20..5100a8efc7 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -28,6 +28,8 @@
 					<span class="divider">|</span>
 					<span class="signin" @click="signin">%i18n:@signin%</span>
 				</p>
+
+				<img src="/assets/pointer.png" alt="" class="char">
 			</div>
 		</div>
 
@@ -247,6 +249,7 @@ root(isDark)
 
 			> div
 				padding 32px
+				min-height 100%
 
 				> h1
 					margin 0
@@ -281,6 +284,17 @@ root(isDark)
 						&:hover
 							color $theme-color
 
+				> .char
+					display block
+					position absolute
+					right 0
+					bottom 0
+					width 180px
+					opacity 0.3
+
+				> *:not(.char)
+					z-index 1
+
 		> .announcements
 			grid-row 2
 			grid-column 1

From d92e9759f39b53ba35dd907b311d529f047e07e9 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 01:20:23 +0900
Subject: [PATCH 140/539] Refactor analog clock widget (#2648)

---
 src/client/app/common/views/widgets/analog-clock.vue | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/client/app/common/views/widgets/analog-clock.vue b/src/client/app/common/views/widgets/analog-clock.vue
index 0de30228b3..04223f0d21 100644
--- a/src/client/app/common/views/widgets/analog-clock.vue
+++ b/src/client/app/common/views/widgets/analog-clock.vue
@@ -1,8 +1,8 @@
 <template>
 <div class="mkw-analog-clock">
-	<mk-widget-container :naked="!(props.design % 2)" :show-header="false">
+	<mk-widget-container :naked="props.style % 2 === 0" :show-header="false">
 		<div class="mkw-analog-clock--body">
-			<mk-analog-clock :dark="$store.state.device.darkmode" :smooth="!(props.design && ~props.design)"/>
+			<mk-analog-clock :dark="$store.state.device.darkmode" :smooth="props.style < 2"/>
 		</div>
 	</mk-widget-container>
 </div>
@@ -13,13 +13,12 @@ import define from '../../../common/define-widget';
 export default define({
 	name: 'analog-clock',
 	props: () => ({
-		design: -1
+		style: 0
 	})
 }).extend({
 	methods: {
 		func() {
-			if (++this.props.design > 2)
-				this.props.design = -1;
+			this.props.style = (this.props.style + 1) % 4;
 			this.save();
 		}
 	}

From 769960f29e53e225761e3e119c6cc90137db9979 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Fri, 7 Sep 2018 02:26:31 +0900
Subject: [PATCH 141/539] Encode fetch URI if needed (#2649)

---
 src/services/drive/upload-from-url.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/services/drive/upload-from-url.ts b/src/services/drive/upload-from-url.ts
index 0cf21ea5a2..35d4ec9883 100644
--- a/src/services/drive/upload-from-url.ts
+++ b/src/services/drive/upload-from-url.ts
@@ -34,8 +34,9 @@ export default async (url: string, user: IUser, folderId: mongodb.ObjectID = nul
 	// write content at URL to temp file
 	await new Promise((res, rej) => {
 		const writable = fs.createWriteStream(path);
+		const requestUrl = URL.parse(url).pathname.match(/[^\u0021-\u00ff]/) ? encodeURI(url) : url;
 		request({
-			url,
+			url: requestUrl,
 			headers: {
 				'User-Agent': config.user_agent
 			}

From c6ff6939a5e9b443085cef7498af226915dfbb7f Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 03:22:55 +0900
Subject: [PATCH 142/539] Add capitalize function (#2651)

---
 src/mfm/parse/core/syntax-highlighter.ts | 4 +++-
 src/prelude/string.ts                    | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)
 create mode 100644 src/prelude/string.ts

diff --git a/src/mfm/parse/core/syntax-highlighter.ts b/src/mfm/parse/core/syntax-highlighter.ts
index 2b13608d2b..c5157ca1d3 100644
--- a/src/mfm/parse/core/syntax-highlighter.ts
+++ b/src/mfm/parse/core/syntax-highlighter.ts
@@ -1,3 +1,5 @@
+import { capitalize } from "../../../prelude/string";
+
 function escape(text: string) {
 	return text
 		.replace(/>/g, '&gt;')
@@ -89,7 +91,7 @@ const _keywords = [
 ];
 
 const keywords = _keywords
-	.concat(_keywords.map(k => k[0].toUpperCase() + k.substr(1)))
+	.concat(_keywords.map(capitalize))
 	.concat(_keywords.map(k => k.toUpperCase()))
 	.sort((a, b) => b.length - a.length);
 
diff --git a/src/prelude/string.ts b/src/prelude/string.ts
new file mode 100644
index 0000000000..2b89304f16
--- /dev/null
+++ b/src/prelude/string.ts
@@ -0,0 +1,3 @@
+export function capitalize(s: string): string {
+	return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
+}

From 7959196dc7d8c6f40c16a020492aae11e6136e44 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Fri, 7 Sep 2018 04:21:04 +0900
Subject: [PATCH 143/539] Add sum function (#2653)

---
 src/client/app/common/views/components/poll.vue         | 3 ++-
 src/client/app/desktop/views/components/note-detail.vue | 5 ++---
 src/client/app/desktop/views/components/notes.note.vue  | 5 ++---
 src/client/app/mobile/views/components/note-detail.vue  | 5 ++---
 src/client/app/mobile/views/components/note.vue         | 5 ++---
 src/prelude/array.ts                                    | 4 ++++
 6 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue
index 660247edbc..4fe51d219b 100644
--- a/src/client/app/common/views/components/poll.vue
+++ b/src/client/app/common/views/components/poll.vue
@@ -21,6 +21,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { sum } from '../../../../../prelude/array';
 export default Vue.extend({
 	props: ['note'],
 	data() {
@@ -33,7 +34,7 @@ export default Vue.extend({
 			return this.note.poll;
 		},
 		total(): number {
-			return this.poll.choices.reduce((a, b) => a + b.votes, 0);
+			return sum(this.poll.choices.map(x => x.votes));
 		},
 		isVoted(): boolean {
 			return this.poll.choices.some(c => c.isVoted);
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index a61a004a85..1e068bd1cd 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -86,6 +86,7 @@ import MkRenoteFormWindow from './renote-form-window.vue';
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './notes.note.sub.vue';
+import { sum } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	components: {
@@ -122,9 +123,7 @@ export default Vue.extend({
 		},
 		reactionsCount(): number {
 			return this.p.reactionCounts
-				? Object.keys(this.p.reactionCounts)
-					.map(key => this.p.reactionCounts[key])
-					.reduce((a, b) => a + b)
+				? sum(Object.values(this.p.reactionCounts))
 				: 0;
 		},
 		title(): string {
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 1d6b2048ba..75d6ebd628 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -78,6 +78,7 @@ import MkRenoteFormWindow from './renote-form-window.vue';
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './notes.note.sub.vue';
+import { sum } from '../../../../../prelude/array';
 
 function focus(el, fn) {
 	const target = fn(el);
@@ -120,9 +121,7 @@ export default Vue.extend({
 
 		reactionsCount(): number {
 			return this.p.reactionCounts
-				? Object.keys(this.p.reactionCounts)
-					.map(key => this.p.reactionCounts[key])
-					.reduce((a, b) => a + b)
+				? sum(Object.values(this.p.reactionCounts))
 				: 0;
 		},
 
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 10ff3fcc09..d48d9a7790 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -85,6 +85,7 @@ import parse from '../../../../../mfm/parse';
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './note.sub.vue';
+import { sum } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	components: {
@@ -123,9 +124,7 @@ export default Vue.extend({
 
 		reactionsCount(): number {
 			return this.p.reactionCounts
-				? Object.keys(this.p.reactionCounts)
-					.map(key => this.p.reactionCounts[key])
-					.reduce((a, b) => a + b)
+				? sum(Object.values(this.p.reactionCounts))
 				: 0;
 		},
 
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 9bd4a83ecb..907e728984 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -70,6 +70,7 @@ import parse from '../../../../../mfm/parse';
 import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './note.sub.vue';
+import { sum } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	components: {
@@ -100,9 +101,7 @@ export default Vue.extend({
 
 		reactionsCount(): number {
 			return this.p.reactionCounts
-				? Object.keys(this.p.reactionCounts)
-					.map(key => this.p.reactionCounts[key])
-					.reduce((a, b) => a + b)
+				? sum(Object.values(this.p.reactionCounts))
 				: 0;
 		},
 
diff --git a/src/prelude/array.ts b/src/prelude/array.ts
index abef6ca039..54f7081712 100644
--- a/src/prelude/array.ts
+++ b/src/prelude/array.ts
@@ -21,3 +21,7 @@ export function erase<T>(x: T, xs: T[]): T[] {
 export function unique<T>(xs: T[]): T[] {
 	return [...new Set(xs)];
 }
+
+export function sum(xs: number[]): number {
+	return xs.reduce((a, b) => a + b, 0);
+}

From acc7797dff5051bb966049bbb22d9650d244d3e4 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 04:22:16 +0900
Subject: [PATCH 144/539] New Crowdin translations (#2615)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)
---
 locales/ca-ES.yml | 5 +++++
 locales/de-DE.yml | 5 +++++
 locales/en-US.yml | 5 +++++
 locales/es-ES.yml | 5 +++++
 locales/fr-FR.yml | 5 +++++
 locales/it-IT.yml | 5 +++++
 locales/ja-KS.yml | 5 +++++
 locales/ko-KR.yml | 5 +++++
 locales/nl-NL.yml | 5 +++++
 locales/no-NO.yml | 5 +++++
 locales/pl-PL.yml | 5 +++++
 locales/pt-PT.yml | 5 +++++
 locales/ru-RU.yml | 5 +++++
 locales/zh-CN.yml | 5 +++++
 14 files changed, 70 insertions(+)

diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml
index a3d8b94fc5..8957c690d9 100644
--- a/locales/ca-ES.yml
+++ b/locales/ca-ES.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index c66c735764..186d195f23 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/en-US.yml b/locales/en-US.yml
index 6bab447039..7716c191d6 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "Logging in..."
   signup-button: "Sign up"
   timeline: "Timeline"
+  announcements: "Announcements"
+  photos: "Recent uploaded"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey storage"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "Post design"
   post-style-standard: "Standard"
   post-style-smart: "Smart"
+  notification-position: "Notification style"
+  notification-position-bottom: "Bottom"
+  notification-position-top: "Top"
   behavior: "Behavior"
   fetch-on-scroll: "Endless loading on scroll"
   disable-via-mobile: "Don't mark the post as 'from mobile'"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index f5fa938a7a..22a8360126 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml
index 7ec48acead..b39db5a6de 100644
--- a/locales/fr-FR.yml
+++ b/locales/fr-FR.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "Se connecter"
   signup-button: "S'inscrire"
   timeline: "Fil d'actualité"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Propulsé par <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Lecteur de Misskey"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "Style de la publication"
   post-style-standard: "Standard"
   post-style-smart: "Intelligent"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "Comportement"
   fetch-on-scroll: "Chargement lors du défilement"
   disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index a3d8b94fc5..8957c690d9 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml
index df77ba62c6..09413b2917 100644
--- a/locales/ja-KS.yml
+++ b/locales/ja-KS.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "サインイン中…"
   signup-button: "サインアップ"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "ドライブ"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "べっぴんさん"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml
index 22acc8b689..9c22dcf50e 100644
--- a/locales/ko-KR.yml
+++ b/locales/ko-KR.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml
index 7bdbdc781d..314e41f3a4 100644
--- a/locales/nl-NL.yml
+++ b/locales/nl-NL.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "Inloggen"
   signup-button: "Registreren"
   timeline: "Tijdlijn"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "Berichtontwerp"
   post-style-standard: "Standaard"
   post-style-smart: "Slim"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "Gedrag"
   fetch-on-scroll: "Ophalen bij scrollen"
   disable-via-mobile: "Zonder 'mobiele berichten'"
diff --git a/locales/no-NO.yml b/locales/no-NO.yml
index 99899cac15..8ea964dcc9 100644
--- a/locales/no-NO.yml
+++ b/locales/no-NO.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml
index d5050a8e6f..b72921d3f9 100644
--- a/locales/pl-PL.yml
+++ b/locales/pl-PL.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "Zaloguj się"
   signup-button: "Zarejestruj się"
   timeline: "Oś czasu"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Oparto o <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Dysk Misskey"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "Styl wpisów"
   post-style-standard: "Standardowy"
   post-style-smart: "Inteligentny"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "Zachowanie"
   fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
   disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml
index 3a764606a5..b1fe356656 100644
--- a/locales/pt-PT.yml
+++ b/locales/pt-PT.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "Timeline"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Desenvolvido por <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Drive Misskey"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml
index 759767f27e..691eebf64c 100644
--- a/locales/ru-RU.yml
+++ b/locales/ru-RU.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index 3376690e52..a9afed5713 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -865,6 +865,8 @@ desktop/views/pages/welcome.vue:
   signin-button: "やってる"
   signup-button: "やる"
   timeline: "タイムライン"
+  announcements: "お知らせ"
+  photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
@@ -1161,6 +1163,9 @@ mobile/views/pages/settings.vue:
   post-style: "投稿の表示スタイル"
   post-style-standard: "標準"
   post-style-smart: "スマート"
+  notification-position: "通知の表示"
+  notification-position-bottom: "下"
+  notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"

From aa31061d90dee10bb11a2d734a5635a9b0fca879 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 7 Sep 2018 04:23:26 +0900
Subject: [PATCH 145/539] fix(package): update node-sass-json-importer to
 version 4.0.1 (#2645)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 811a60814a..71068479dc 100644
--- a/package.json
+++ b/package.json
@@ -161,7 +161,7 @@
 		"nan": "2.11.0",
 		"nested-property": "0.0.7",
 		"node-sass": "4.9.3",
-		"node-sass-json-importer": "4.0.0",
+		"node-sass-json-importer": "4.0.1",
 		"nprogress": "0.2.0",
 		"object-assign-deep": "0.4.0",
 		"on-build-webpack": "0.1.0",

From 6d9716f90eca1ed68b4875659b578abde926c84e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 04:24:08 +0900
Subject: [PATCH 146/539] 8.28.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 71068479dc..4b7431b50e 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.27.0",
-	"clientVersion": "1.0.9378",
+	"version": "8.28.0",
+	"clientVersion": "1.0.9400",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 0b5eec4ca805a7b006c151005115f5042dab0eae Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:32:09 +0900
Subject: [PATCH 147/539] Fix bug

---
 webpack.config.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/webpack.config.ts b/webpack.config.ts
index 341d4c7022..a50d6c40cc 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -196,7 +196,7 @@ module.exports = {
 			}, {
 				loader: 'sass-loader',
 				options: {
-					importer: jsonImporter,
+					importer: jsonImporter(),
 				}
 			}]
 		}, {

From 95ce8dce3d874c0f1a23cad929569039052f214d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:32:18 +0900
Subject: [PATCH 148/539] 8.28.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 4b7431b50e..5b7567e4cc 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.28.0",
+	"version": "8.28.1",
 	"clientVersion": "1.0.9400",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From fa04ac789eba82cef075867ebd0e8b9365c15046 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:37:15 +0900
Subject: [PATCH 149/539] :art:

---
 src/client/app/desktop/views/pages/welcome.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 5100a8efc7..f601bc9016 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -287,8 +287,8 @@ root(isDark)
 				> .char
 					display block
 					position absolute
-					right 0
-					bottom 0
+					right 16px
+					bottom 16px
 					width 180px
 					opacity 0.3
 

From 2b50364ab4f94c1259fb5b5b2df74f5b2e654a90 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:45:13 +0900
Subject: [PATCH 150/539] =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC?=
 =?UTF-8?q?=E5=90=8D=E3=81=AB=E3=82=B3=E3=83=B3=E3=83=88=E3=83=A9=E3=82=B9?=
 =?UTF-8?q?=E3=83=88=E3=82=92=E4=BB=98=E3=81=91=E3=82=8B=E3=83=87=E3=82=B6?=
 =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=81=AE=E3=82=AA=E3=83=B3=E3=82=AA=E3=83=95?=
 =?UTF-8?q?=E3=82=92=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=82=89=E3=82=8C?=
 =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                    | 2 ++
 src/client/app/common/views/components/acct.vue      | 4 ++--
 src/client/app/desktop/views/components/settings.vue | 7 +++++++
 src/client/app/mobile/views/pages/settings.vue       | 8 ++++++++
 src/client/app/store.ts                              | 1 +
 5 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index eaf940ed06..668678e0c8 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -736,6 +736,7 @@ desktop/views/components/settings.vue:
   delete-wallpaper: "壁紙を削除"
   dark-mode: "ダークモード"
   circle-icons: "円形のアイコンを使用"
+  contrasted-acct: "ユーザー名にコントラストを付ける"
   gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
   post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
   suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@@ -1349,6 +1350,7 @@ mobile/views/pages/settings.vue:
   dark-mode: "ダークモード"
   i-am-under-limited-internet: "私は通信を制限されている"
   circle-icons: "円形のアイコンを使用"
+  contrasted-acct: "ユーザー名にコントラストを付ける"
   timeline: "タイムライン"
   show-reply-target: "リプライ先を表示する"
   show-my-renotes: "自分の行ったRenoteを表示する"
diff --git a/src/client/app/common/views/components/acct.vue b/src/client/app/common/views/components/acct.vue
index 2b5efe609c..bd7833f1a9 100644
--- a/src/client/app/common/views/components/acct.vue
+++ b/src/client/app/common/views/components/acct.vue
@@ -1,7 +1,7 @@
 <template>
 <span class="mk-acct">
 	<span class="name">@{{ user.username }}</span>
-	<span class="host" v-if="user.host || detail">@{{ user.host || host }}</span>
+	<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail">@{{ user.host || host }}</span>
 </span>
 </template>
 
@@ -20,6 +20,6 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .mk-acct
-	> .host
+	> .host.fade
 		opacity 0.5
 </style>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 7d6f1d55fb..7cab7ec983 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -44,6 +44,7 @@
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 				<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
+				<mk-switch v-model="$store.state.settings.contrastedAcct" @change="onContrastedAcct" text="%i18n:@contrasted-acct%"/>
 				<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
 				<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
 			</div>
@@ -376,6 +377,12 @@ export default Vue.extend({
 				value: v
 			});
 		},
+		onChangeContrastedAcct(v) {
+			this.$store.dispatch('settings/set', {
+				key: 'contrastedAcct',
+				value: v
+			});
+		},
 		onChangeILikeSushi(v) {
 			this.$store.dispatch('settings/set', {
 				key: 'iLikeSushi',
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 4a148dc9d2..29fe067a08 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -13,6 +13,7 @@
 				<section>
 					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 					<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
+					<ui-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 					<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 					<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
 					<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
@@ -218,6 +219,13 @@ export default Vue.extend({
 			});
 		},
 
+		onChangeContrastedAcct(v) {
+			this.$store.dispatch('settings/set', {
+				key: 'contrastedAcct',
+				value: v
+			});
+		},
+
 		onChangeILikeSushi(v) {
 			this.$store.dispatch('settings/set', {
 				key: 'iLikeSushi',
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 08dd9f9920..16ce78ea9f 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -16,6 +16,7 @@ const defaultSettings = {
 	suggestRecentHashtags: true,
 	showClockOnHeader: true,
 	circleIcons: true,
+	contrastedAcct: true,
 	gradientWindowHeader: false,
 	showReplyTarget: true,
 	showMyRenotes: true,

From 5cbcac713a70e619eb89e5dc7c9f9cfc8cc915e1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:47:19 +0900
Subject: [PATCH 151/539] Fix

---
 locales/ja-JP.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 668678e0c8..0c4825e8c4 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1383,7 +1383,7 @@ mobile/views/pages/settings.vue:
   settings: "設定"
   signout: "サインアウト"
   sound: "サウンド"
-  enableSounds: "サウンドを有効にする"
+  enable-sounds: "サウンドを有効にする"
 
 mobile/views/pages/user.vue:
   follows-you: "フォローされています"

From e955fe1ffd38dd2da91e548748da2577810840f1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 05:47:47 +0900
Subject: [PATCH 152/539] 8.29.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 5b7567e4cc..ab984eef5c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.28.1",
-	"clientVersion": "1.0.9400",
+	"version": "8.29.0",
+	"clientVersion": "1.0.9406",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 106d4cc0d65edb01d3b71b3d91258550cd489825 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 06:04:00 +0900
Subject: [PATCH 153/539] :art:

---
 src/client/app/common/views/widgets/broadcast.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index c0f97e97c1..f2fa720f52 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -126,7 +126,7 @@ root(isDark)
 		margin 0
 		font-size 0.95em
 		font-weight normal
-		color #4078c0
+		color isDark ? #539eff : #4078c0
 
 	> p
 		display block

From 7343e6e2e8e94b2a58943c62c047b5a7c4116e3a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 19:20:50 +0900
Subject: [PATCH 154/539] =?UTF-8?q?=E7=B5=B1=E8=A8=88=E3=81=A7=E7=84=A1?=
 =?UTF-8?q?=E8=A6=96=E3=81=99=E3=82=8B=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5?=
 =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D?=
 =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../views/pages/admin/admin.hashtags.vue      | 41 +++++++++++++++++++
 .../app/desktop/views/pages/admin/admin.vue   |  7 ++++
 src/models/meta.ts                            |  7 ++--
 src/server/api/endpoints/admin/update-meta.ts | 12 +++++-
 src/server/api/endpoints/hashtags/trend.ts    |  7 ++++
 src/server/api/endpoints/meta.ts              |  6 ++-
 6 files changed, 74 insertions(+), 6 deletions(-)
 create mode 100644 src/client/app/desktop/views/pages/admin/admin.hashtags.vue

diff --git a/src/client/app/desktop/views/pages/admin/admin.hashtags.vue b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
new file mode 100644
index 0000000000..c6bf20361f
--- /dev/null
+++ b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
@@ -0,0 +1,41 @@
+<template>
+<div class="jdnqwkzlnxcfftthoybjxrebyolvoucw mk-admin-card">
+	<header>%i18n:@hided-tags%</header>
+	<textarea v-model="hidedTags"></textarea>
+	<button class="ui" @click="save">%i18n:@save%</button>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from "vue";
+
+export default Vue.extend({
+	data() {
+		return {
+			hidedTags: '',
+		};
+	},
+	created() {
+		(this as any).os.getMeta().then(meta => {
+			this.hidedTags = meta.hidedTags.join('\n');
+		});
+	},
+	methods: {
+		save() {
+			(this as any).api('admin/update-meta', {
+				hidedTags: this.hidedTags.split('\n')
+			});
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+@import '~const.styl'
+
+.jdnqwkzlnxcfftthoybjxrebyolvoucw
+	textarea
+		width 100%
+		min-height 300px
+
+</style>
diff --git a/src/client/app/desktop/views/pages/admin/admin.vue b/src/client/app/desktop/views/pages/admin/admin.vue
index a71059c378..510252b447 100644
--- a/src/client/app/desktop/views/pages/admin/admin.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.vue
@@ -5,6 +5,8 @@
 			<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li>
 			<li @click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
 			<li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
+			<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }">%fa:hashtag .fw%%i18n:@hashtags%</li>
+
 			<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</li> -->
 			<!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->
 		</ul>
@@ -17,6 +19,9 @@
 		<div v-show="page == 'announcements'">
 			<x-announcements/>
 		</div>
+		<div v-show="page == 'hashtags'">
+			<x-hashtags/>
+		</div>
 		<div v-if="page == 'users'">
 			<x-suspend-user/>
 			<x-unsuspend-user/>
@@ -33,6 +38,7 @@
 import Vue from "vue";
 import XDashboard from "./admin.dashboard.vue";
 import XAnnouncements from "./admin.announcements.vue";
+import XHashtags from "./admin.hashtags.vue";
 import XSuspendUser from "./admin.suspend-user.vue";
 import XUnsuspendUser from "./admin.unsuspend-user.vue";
 import XVerifyUser from "./admin.verify-user.vue";
@@ -43,6 +49,7 @@ export default Vue.extend({
 	components: {
 		XDashboard,
 		XAnnouncements,
+		XHashtags,
 		XSuspendUser,
 		XUnsuspendUser,
 		XVerifyUser,
diff --git a/src/models/meta.ts b/src/models/meta.ts
index aef0163dfe..4f1977f3b5 100644
--- a/src/models/meta.ts
+++ b/src/models/meta.ts
@@ -4,12 +4,13 @@ const Meta = db.get<IMeta>('meta');
 export default Meta;
 
 export type IMeta = {
-	broadcasts: any[];
-	stats: {
+	broadcasts?: any[];
+	stats?: {
 		notesCount: number;
 		originalNotesCount: number;
 		usersCount: number;
 		originalUsersCount: number;
 	};
-	disableRegistration: boolean;
+	disableRegistration?: boolean;
+	hidedTags?: string[];
 };
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index 10ca15d329..f903628774 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -21,7 +21,13 @@ export const meta = {
 			desc: {
 				'ja-JP': '招待制か否か'
 			}
-		})
+		}),
+
+		hidedTags: $.arr($.str).optional.nullable.note({
+			desc: {
+				'ja-JP': '統計などで無視するハッシュタグ'
+			}
+		}),
 	}
 };
 
@@ -39,6 +45,10 @@ export default (params: any) => new Promise(async (res, rej) => {
 		set.disableRegistration = ps.disableRegistration;
 	}
 
+	if (Array.isArray(ps.hidedTags)) {
+		set.hidedTags = ps.hidedTags;
+	}
+
 	await Meta.update({}, {
 		$set: set
 	}, { upsert: true });
diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts
index e7c08ca9f0..bfa475619c 100644
--- a/src/server/api/endpoints/hashtags/trend.ts
+++ b/src/server/api/endpoints/hashtags/trend.ts
@@ -1,5 +1,6 @@
 import Note from '../../../../models/note';
 import { erase } from '../../../../prelude/array';
+import Meta from '../../../../models/meta';
 
 /*
 トレンドに載るためには「『直近a分間のユニーク投稿数が今からa分前~今からb分前の間のユニーク投稿数のn倍以上』のハッシュタグの上位5位以内に入る」ことが必要
@@ -17,6 +18,9 @@ const max = 5;
  * Get trends of hashtags
  */
 export default () => new Promise(async (res, rej) => {
+	const meta = await Meta.findOne({});
+	const hidedTags = (meta.hidedTags || []).map(t => t.toLowerCase());
+
 	//#region 1. 直近Aの内に投稿されたハッシュタグ(とユーザーのペア)を集計
 	const data = await Note.aggregate([{
 		$match: {
@@ -53,6 +57,9 @@ export default () => new Promise(async (res, rej) => {
 
 	// カウント
 	data.map(x => x._id).forEach(x => {
+		// ブラックリストに登録されているタグなら弾く
+		if (hidedTags.includes(x.tag)) return;
+
 		const i = tags.findIndex(tag => tag.name == x.tag);
 		if (i != -1) {
 			tags[i].count++;
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index b0876eaafd..4472d8d779 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -4,6 +4,7 @@
 import * as os from 'os';
 import config from '../../../config';
 import Meta from '../../../models/meta';
+import { ILocalUser } from '../../../models/user';
 
 const pkg = require('../../../../package.json');
 const client = require('../../../../built/client/meta.json');
@@ -11,7 +12,7 @@ const client = require('../../../../built/client/meta.json');
 /**
  * Show core info
  */
-export default () => new Promise(async (res, rej) => {
+export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
 	const meta: any = (await Meta.findOne()) || {};
 
 	res({
@@ -35,6 +36,7 @@ export default () => new Promise(async (res, rej) => {
 		disableRegistration: meta.disableRegistration,
 		driveCapacityPerLocalUserMb: config.localDriveCapacityMb,
 		recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null,
-		swPublickey: config.sw ? config.sw.public_key : null
+		swPublickey: config.sw ? config.sw.public_key : null,
+		hidedTags: (me && me.isAdmin) ? meta.hidedTags : undefined
 	});
 });

From d70e2a788e64b365b232086ce53a419672e088c9 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Fri, 7 Sep 2018 19:22:14 +0900
Subject: [PATCH 155/539] Add some meta alternate links (#2657)

---
 src/server/web/views/note.pug | 3 +++
 src/server/web/views/user.pug | 7 +++++++
 2 files changed, 10 insertions(+)

diff --git a/src/server/web/views/note.pug b/src/server/web/views/note.pug
index 22f1834059..4f7c3d7777 100644
--- a/src/server/web/views/note.pug
+++ b/src/server/web/views/note.pug
@@ -23,3 +23,6 @@ block meta
 		link(rel='prev' href=`${config.url}/notes/${note.prev}`)
 	if note.next
 		link(rel='next' href=`${config.url}/notes/${note.next}`)
+
+	if !user.host
+		link(rel='alternate' href=url type='application/activity+json')
diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug
index 98a53ab549..63d2f75156 100644
--- a/src/server/web/views/user.pug
+++ b/src/server/web/views/user.pug
@@ -18,3 +18,10 @@ block meta
 	meta(property='og:description' content= user.description)
 	meta(property='og:url'         content= url)
 	meta(property='og:image'       content= img)
+	
+	if !user.host
+		link(rel='alternate' href=`${config.url}/users/${user._id}` type='application/activity+json')
+	if user.uri
+		link(rel='alternate' href=user.uri type='application/activity+json')
+	if user.url
+		link(rel='alternate' href=user.url type='text/html')

From e0deaec695650d22c92512cc2672ba3aade96eed Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 19:23:39 +0900
Subject: [PATCH 156/539] Implement new endpoint

---
 .../api/endpoints/aggregation/hashtags.ts     | 64 +++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 src/server/api/endpoints/aggregation/hashtags.ts

diff --git a/src/server/api/endpoints/aggregation/hashtags.ts b/src/server/api/endpoints/aggregation/hashtags.ts
new file mode 100644
index 0000000000..0daf42427b
--- /dev/null
+++ b/src/server/api/endpoints/aggregation/hashtags.ts
@@ -0,0 +1,64 @@
+import Note from '../../../../models/note';
+import Meta from '../../../../models/meta';
+
+export default () => new Promise(async (res, rej) => {
+	const meta = await Meta.findOne({});
+	const hidedTags = (meta.hidedTags || []).map(t => t.toLowerCase());
+
+	const span = 1000 * 60 * 60 * 24 * 7; // 1週間
+
+	//#region 1. 指定期間の内に投稿されたハッシュタグ(とユーザーのペア)を集計
+	const data = await Note.aggregate([{
+		$match: {
+			createdAt: {
+				$gt: new Date(Date.now() - span)
+			},
+			tagsLower: {
+				$exists: true,
+				$ne: []
+			}
+		}
+	}, {
+		$unwind: '$tagsLower'
+	}, {
+		$group: {
+			_id: { tag: '$tagsLower', userId: '$userId' }
+		}
+	}]) as Array<{
+		_id: {
+			tag: string;
+			userId: any;
+		}
+	}>;
+	//#endregion
+
+	if (data.length == 0) {
+		return res([]);
+	}
+
+	let tags: Array<{
+		name: string;
+		count: number;
+	}> = [];
+
+	// カウント
+	data.map(x => x._id).forEach(x => {
+		// ブラックリストに登録されているタグなら弾く
+		if (hidedTags.includes(x.tag)) return;
+
+		const i = tags.findIndex(tag => tag.name == x.tag);
+		if (i != -1) {
+			tags[i].count++;
+		} else {
+			tags.push({
+				name: x.tag,
+				count: 1
+			});
+		}
+	});
+
+	// タグを人気順に並べ替え
+	tags = tags.sort((a, b) => b.count - a.count);
+
+	res(tags);
+});

From 1917b0339e5fa2ca5fa700fa802200083b0c99d7 Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Fri, 7 Sep 2018 19:24:18 +0900
Subject: [PATCH 157/539] #2652 (#2658)

---
 src/client/app/common/views/components/url-preview.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index e182e7f8cb..f9b8415b5b 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -14,7 +14,7 @@
 			<header>
 				<h1>{{ title }}</h1>
 			</header>
-			<p>{{ description }}</p>
+			<p>{{ description.length > 85 ? description.slice(0, 85) + '…' : description }}</p>
 			<footer>
 				<img class="icon" v-if="icon" :src="icon"/>
 				<p>{{ sitename }}</p>

From 2c0e514fb2dc5c8ac534f163beb0a36b9787c309 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 7 Sep 2018 10:32:06 +0000
Subject: [PATCH 158/539] fix(package): update commander to version 2.18.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index ab984eef5c..82c7c828c3 100644
--- a/package.json
+++ b/package.json
@@ -90,7 +90,7 @@
 		"cafy": "11.3.0",
 		"chalk": "2.4.1",
 		"chart.js": "2.7.2",
-		"commander": "2.17.1",
+		"commander": "2.18.0",
 		"crc-32": "1.2.0",
 		"css-loader": "1.0.0",
 		"dateformat": "3.0.3",

From 8c6856d894b6ae95f1f935eb31857b43e9acff2d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 20:21:25 +0900
Subject: [PATCH 159/539] Improve welcome page

---
 locales/ja-JP.yml                             |  1 +
 package.json                                  |  1 +
 .../app/common/views/components/index.ts      |  2 +
 .../app/common/views/components/tag-cloud.vue | 90 +++++++++++++++++++
 .../app/desktop/views/pages/welcome.vue       | 47 ++++++++--
 5 files changed, 136 insertions(+), 5 deletions(-)
 create mode 100644 src/client/app/common/views/components/tag-cloud.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 0c4825e8c4..3cf8d90e9d 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -994,6 +994,7 @@ desktop/views/pages/welcome.vue:
   announcements: "お知らせ"
   photos: "最近の画像"
   powered-by-misskey: "Powered by <b>Misskey</b>."
+  info: "情報"
 
 desktop/views/pages/drive.vue:
   title: "Misskey Drive"
diff --git a/package.json b/package.json
index ab984eef5c..9b49dfaac4 100644
--- a/package.json
+++ b/package.json
@@ -217,6 +217,7 @@
 		"vue-style-loader": "4.1.2",
 		"vue-template-compiler": "2.5.17",
 		"vuedraggable": "2.16.0",
+		"vuewordcloud": "18.7.11",
 		"vuex": "3.0.1",
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 4700b6269e..75c6086d7c 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import tagCloud from './tag-cloud.vue';
 import trends from './trends.vue';
 import analogClock from './analog-clock.vue';
 import menu from './menu.vue';
@@ -41,6 +42,7 @@ import uiSelect from './ui/select.vue';
 import formButton from './ui/form/button.vue';
 import formRadio from './ui/form/radio.vue';
 
+Vue.component('mk-tag-cloud', tagCloud);
 Vue.component('mk-trends', trends);
 Vue.component('mk-analog-clock', analogClock);
 Vue.component('mk-menu', menu);
diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue
new file mode 100644
index 0000000000..6675ba608e
--- /dev/null
+++ b/src/client/app/common/views/components/tag-cloud.vue
@@ -0,0 +1,90 @@
+<template>
+<div class="jtivnzhfwquxpsfidertopbmwmchmnmo">
+	<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+	<p class="empty" v-else-if="tags.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
+	<div v-else>
+		<vue-word-cloud
+				:words="tags.map(x => [x.name, x.count])"
+				:color="color"
+				font-family="Roboto">
+			<template slot-scope="{word, text, weight}">
+				<div style="cursor: pointer;" :title="weight">
+					{{ text }}
+				</div>
+			</template>
+		</vue-word-cloud>
+	</div>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import * as VueWordCloud from 'vuewordcloud';
+
+export default Vue.extend({
+	components: {
+		[VueWordCloud.name]: VueWordCloud
+	},
+	data() {
+		return {
+			tags: [],
+			fetching: true,
+			clock: null
+		};
+	},
+	mounted() {
+		this.fetch();
+		this.clock = setInterval(this.fetch, 1000 * 60);
+	},
+	beforeDestroy() {
+		clearInterval(this.clock);
+	},
+	methods: {
+		fetch() {
+			(this as any).api('aggregation/hashtags').then(tags => {
+				this.tags = tags;
+				this.fetching = false;
+			});
+		},
+		color([, weight]) {
+			const peak = Math.max.apply(null, this.tags.map(x => x.count));
+			const w = weight / peak;
+
+			if (w == 1) {
+				return this.$store.state.device.darkmode ? '#ff4e69' : '#ff4e69';
+			} else if (w > 0.5) {
+				return this.$store.state.device.darkmode ? '#3bc4c7' : '#3bc4c7';
+			} else {
+				return this.$store.state.device.darkmode ? '#fff' : '#555';
+			}
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+root(isDark)
+	height 100%
+	width 100%
+
+	> .fetching
+	> .empty
+		margin 0
+		padding 16px
+		text-align center
+		color #aaa
+
+		> [data-fa]
+			margin-right 4px
+
+	> div
+		height 100%
+		width 100%
+
+.jtivnzhfwquxpsfidertopbmwmchmnmo[data-darkmode]
+	root(true)
+
+.jtivnzhfwquxpsfidertopbmwmchmnmo:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index f601bc9016..549d9175f3 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -50,6 +50,12 @@
 			</div>
 		</div>
 
+		<div class="tag-cloud block">
+			<div>
+				<mk-tag-cloud/>
+			</div>
+		</div>
+
 		<div class="nav block">
 			<div>
 				<mk-nav class="nav"/>
@@ -69,6 +75,16 @@
 					<mk-welcome-timeline class="tl" :max="20"/>
 				</div>
 			</div>
+
+			<div class="info block">
+				<header>%fa:info-circle% %i18n:@info%</header>
+				<div>
+					<div v-if="meta" class="body">
+						<p>Version: <b>{{ meta.version }}</b></p>
+						<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+					</div>
+				</div>
+			</div>
 		</div>
 	</div>
 
@@ -92,6 +108,7 @@ import { concat } from '../../../../../prelude/array';
 export default Vue.extend({
 	data() {
 		return {
+			meta: null,
 			stats: null,
 			copyright,
 			host,
@@ -104,6 +121,7 @@ export default Vue.extend({
 
 	created() {
 		(this as any).os.getMeta().then(meta => {
+			this.meta = meta;
 			this.name = meta.name;
 			this.description = meta.description;
 			this.announcements = meta.broadcasts;
@@ -210,13 +228,12 @@ root(isDark)
 
 	> .body
 		display grid
-		grid-template-rows 1fr 1fr 64px
+		grid-template-rows 1fr 1fr 256px 64px
 		grid-template-columns 1fr 1fr 350px
 		gap 16px
 		width 100%
 		max-width 1200px
-		height 100vh
-		min-height 950px
+		height 1200px
 		margin 0 auto
 		padding 64px
 
@@ -328,17 +345,25 @@ root(isDark)
 					background-position center center
 					background-size cover
 
+		> .tag-cloud
+			grid-row 3
+			grid-column 1 / 3
+
+			> div
+				height 256px
+				padding 32px
+
 		> .nav
 			display flex
 			justify-content center
 			align-items center
-			grid-row 3
+			grid-row 4
 			grid-column 1 / 3
 			font-size 14px
 
 		> .side
 			display grid
-			grid-row 1 / 4
+			grid-row 1 / 5
 			grid-column 3
 			grid-template-rows 1fr 350px
 			grid-template-columns 1fr
@@ -354,6 +379,18 @@ root(isDark)
 				grid-column 1
 				padding 8px
 
+			> .info
+				grid-row 3
+				grid-column 1
+
+				> div
+					padding 16px
+
+					> .body
+						> p
+							display block
+							margin 0
+
 .mk-welcome[data-darkmode]
 	root(true)
 

From dac7387a7f1d2737db46b770877a33aa05fe011c Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 7 Sep 2018 20:22:04 +0900
Subject: [PATCH 160/539] fix(package): update minio to version 7.0.1 (#2655)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 9b49dfaac4..4874e873dc 100644
--- a/package.json
+++ b/package.json
@@ -151,7 +151,7 @@
 		"lodash.assign": "4.2.0",
 		"mecab-async": "0.1.2",
 		"merge-options": "1.0.1",
-		"minio": "7.0.0",
+		"minio": "7.0.1",
 		"mkdirp": "0.5.1",
 		"mocha": "5.2.0",
 		"moji": "0.5.1",

From d9fe9cc5df7d3b7964a303544dd3dbbdf1cf5dd7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 20:23:46 +0900
Subject: [PATCH 161/539] =?UTF-8?q?=E8=BF=94=E3=81=99=E3=82=BF=E3=82=B0?=
 =?UTF-8?q?=E3=81=AE=E6=95=B0=E3=82=92=E5=88=B6=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/endpoints/aggregation/hashtags.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/server/api/endpoints/aggregation/hashtags.ts b/src/server/api/endpoints/aggregation/hashtags.ts
index 0daf42427b..c5aacd89cd 100644
--- a/src/server/api/endpoints/aggregation/hashtags.ts
+++ b/src/server/api/endpoints/aggregation/hashtags.ts
@@ -60,5 +60,7 @@ export default () => new Promise(async (res, rej) => {
 	// タグを人気順に並べ替え
 	tags = tags.sort((a, b) => b.count - a.count);
 
+	tags = tags.slice(0, 30);
+
 	res(tags);
 });

From 9e3abb9989e52682a5471a8773ee1007c51b0ef9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 20:41:12 +0900
Subject: [PATCH 162/539] Improve welcome page

---
 src/client/app/mobile/views/pages/welcome.vue | 32 +++++++++++--------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 7446cc700f..f5014d585f 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -15,7 +15,7 @@
 			<mk-welcome-timeline/>
 		</div>
 		<div class="hashtags">
-			<router-link v-for="tag in tags" :key="tag" :to="`/tags/${ tag }`" :title="tag">#{{ tag }}</router-link>
+			<mk-tag-cloud/>
 		</div>
 		<div class="photos">
 			<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
@@ -30,6 +30,10 @@
 				<div v-html="announcement.text"></div>
 			</article>
 		</div>
+		<div class="info" v-if="meta">
+			<p>Version: <b>{{ meta.version }}</b></p>
+			<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+		</div>
 		<footer>
 			<small>{{ copyright }}</small>
 		</footer>
@@ -39,25 +43,25 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { apiUrl, copyright, host } from '../../../config';
+import { copyright, host } from '../../../config';
 import { concat } from '../../../../../prelude/array';
 
 export default Vue.extend({
 	data() {
 		return {
-			apiUrl,
+			meta: null,
 			copyright,
 			stats: null,
 			host,
 			name: 'Misskey',
 			description: '',
-			tags: [],
 			photos: [],
 			announcements: []
 		};
 	},
 	created() {
 		(this as any).os.getMeta().then(meta => {
+			this.meta = meta;
 			this.name = meta.name;
 			this.description = meta.description;
 			this.announcements = meta.broadcasts;
@@ -67,10 +71,6 @@ export default Vue.extend({
 			this.stats = stats;
 		});
 
-		(this as any).api('hashtags/trend').then(stats => {
-			this.tags = stats.map(x => x.tag);
-		});
-
 		const image = [
 			'image/jpeg',
 			'image/png',
@@ -165,12 +165,8 @@ root(isDark)
 				-webkit-overflow-scrolling touch
 
 		> .hashtags
-			padding 16px 0
-			border solid 2px #ddd
-			border-radius 8px
-
-			> *
-				margin 0 16px
+			padding 0 8px
+			height 200px
 
 		> .photos
 			display grid
@@ -210,6 +206,14 @@ root(isDark)
 				> .title
 					font-weight bold
 
+		> .info
+			padding 16px 0
+			border solid 2px #ddd
+			border-radius 8px
+
+			> *
+				margin 0 16px
+
 		> footer
 			text-align center
 			color #444

From 19e1f996a6b1aef8148d4489199d65573dbacdfe Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 21:10:31 +0900
Subject: [PATCH 163/539] Fix bug

---
 src/client/app/desktop/views/components/settings.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 7cab7ec983..d800ccfe11 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -44,7 +44,7 @@
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 				<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
-				<mk-switch v-model="$store.state.settings.contrastedAcct" @change="onContrastedAcct" text="%i18n:@contrasted-acct%"/>
+				<mk-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct" text="%i18n:@contrasted-acct%"/>
 				<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
 				<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
 			</div>

From efaaa76185ec7ee39e855d90bdcdb8a4d13f0207 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 21:13:15 +0900
Subject: [PATCH 164/539] Improve note visibility settings

Closes #2312
Closes #2313
---
 locales/ja-JP.yml                             | 16 +++++++++++
 .../views/components/visibility-chooser.vue   |  6 +++--
 .../desktop/views/components/post-form.vue    |  2 +-
 .../app/desktop/views/components/settings.vue | 27 +++++++++++++++++++
 .../app/mobile/views/components/post-form.vue |  2 +-
 .../app/mobile/views/pages/settings.vue       | 27 +++++++++++++++++++
 src/client/app/store.ts                       |  2 ++
 7 files changed, 78 insertions(+), 4 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 3cf8d90e9d..07d8e7f48c 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -73,6 +73,16 @@ common:
     rip: "RIP"
     pudding: "Pudding"
 
+  note-visibility:
+    public: "公開"
+    home: "ホーム"
+    home-desc: "ホームタイムラインにのみ公開"
+    followers: "フォロワー"
+    followers-desc: "自分のフォロワーにのみ公開"
+    specified: "ダイレクト"
+    specified-desc: "指定したユーザーにのみ公開"
+    private: "非公開"
+
   note-placeholders:
     a: "今どうしてる?"
     b: "何かありましたか?"
@@ -724,6 +734,9 @@ desktop/views/components/settings.vue:
   behaviour: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
+  note-visibility: "投稿の公開範囲"
+  default-note-visibility: "デフォルトの公開範囲"
+  remember-note-visibility: "投稿の公開範囲を記憶する"
   auto-popout: "ウィンドウの自動ポップアウト"
   auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
   advanced: "詳細設定"
@@ -1365,6 +1378,9 @@ mobile/views/pages/settings.vue:
   notification-position-top: "上"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
+  note-visibility: "投稿の公開範囲"
+  default-note-visibility: "デフォルトの公開範囲"
+  remember-note-visibility: "投稿の公開範囲を記憶する"
   disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
   load-raw-images: "添付された画像を高画質で表示する"
   load-remote-media: "リモートサーバーのメディアを表示する"
diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index 4691604e57..7d90b3520c 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -47,7 +47,7 @@ export default Vue.extend({
 	props: ['source', 'compact'],
 	data() {
 		return {
-			v: this.$store.state.device.visibility || 'public'
+			v: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility
 		}
 	},
 	mounted() {
@@ -97,7 +97,9 @@ export default Vue.extend({
 	},
 	methods: {
 		choose(visibility) {
-			this.$store.commit('device/setVisibility', visibility);
+			if (this.$store.state.settings.rememberNoteVisibility) {
+				this.$store.commit('device/setVisibility', visibility);
+			}
 			this.$emit('chosen', visibility);
 			this.$destroy();
 		},
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 65dc9eb9c2..b2f0954d97 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -100,7 +100,7 @@ export default Vue.extend({
 			useCw: false,
 			cw: null,
 			geo: null,
-			visibility: this.$store.state.device.visibility || 'public',
+			visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility,
 			visibleUsers: [],
 			autocomplete: null,
 			draghover: false,
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index d800ccfe11..3998adf601 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -26,6 +26,22 @@
 			<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
 				<span>%i18n:@auto-popout-desc%</span>
 			</mk-switch>
+
+			<section>
+				<header>%i18n:@note-visibility%</header>
+				<mk-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
+				<section>
+					<header>%i18n:@default-note-visibility%</header>
+					<ui-select v-model="defaultNoteVisibility">
+						<option value="public">%i18n:common.note-visibility.public%</option>
+						<option value="home">%i18n:common.note-visibility.home%</option>
+						<option value="followers">%i18n:common.note-visibility.followers%</option>
+						<option value="specified">%i18n:common.note-visibility.specified%</option>
+						<option value="private">%i18n:common.note-visibility.private%</option>
+					</ui-select>
+				</section>
+			</section>
+
 			<details>
 				<summary>%i18n:@advanced%</summary>
 				<mk-switch v-model="apiViaStream" text="%i18n:@api-via-stream%">
@@ -239,6 +255,11 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
 		},
 
+		defaultNoteVisibility: {
+			get() { return this.$store.state.settings.defaultNoteVisibility; },
+			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
+		},
+
 		autoPopout: {
 			get() { return this.$store.state.device.autoPopout; },
 			set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
@@ -312,6 +333,12 @@ export default Vue.extend({
 				value: v
 			});
 		},
+		onChangeRememberNoteVisibility(v) {
+			this.$store.dispatch('settings/set', {
+				key: 'rememberNoteVisibility',
+				value: v
+			});
+		},
 		onChangeAutoWatch(v) {
 			(this as any).api('i/update', {
 				autoWatch: v
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 8107c1f3a7..dcb2f16fa4 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -95,7 +95,7 @@ export default Vue.extend({
 			files: [],
 			poll: false,
 			geo: null,
-			visibility: this.$store.state.device.visibility || 'public',
+			visibility: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility,
 			visibleUsers: [],
 			useCw: false,
 			cw: null,
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 29fe067a08..a078929016 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -53,6 +53,21 @@
 					<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
 					<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
 				</section>
+
+				<section>
+					<header>%i18n:@note-visibility%</header>
+					<ui-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
+					<section>
+						<header>%i18n:@default-note-visibility%</header>
+						<ui-select v-model="defaultNoteVisibility">
+							<option value="public">%i18n:common.note-visibility.public%</option>
+							<option value="home">%i18n:common.note-visibility.home%</option>
+							<option value="followers">%i18n:common.note-visibility.followers%</option>
+							<option value="specified">%i18n:common.note-visibility.specified%</option>
+							<option value="private">%i18n:common.note-visibility.private%</option>
+						</ui-select>
+					</section>
+				</section>
 			</ui-card>
 
 			<ui-card>
@@ -161,6 +176,11 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
 		},
 
+		defaultNoteVisibility: {
+			get() { return this.$store.state.settings.defaultNoteVisibility; },
+			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
+		},
+
 		lightmode: {
 			get() { return this.$store.state.device.lightmode; },
 			set(value) { this.$store.commit('device/set', { key: 'lightmode', value }); }
@@ -198,6 +218,13 @@ export default Vue.extend({
 			});
 		},
 
+		onChangeRememberNoteVisibility(v) {
+			this.$store.dispatch('settings/set', {
+				key: 'rememberNoteVisibility',
+				value: v
+			});
+		},
+
 		onChangeDisableViaMobile(v) {
 			this.$store.dispatch('settings/set', {
 				key: 'disableViaMobile',
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 16ce78ea9f..22de9b5587 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -26,6 +26,8 @@ const defaultSettings = {
 	disableViaMobile: false,
 	memo: null,
 	iLikeSushi: false,
+	rememberNoteVisibility: false,
+	defaultNoteVisibility: 'public',
 	games: {
 		reversi: {
 			showBoardLabels: false,

From e7180d529aeb6603871c0107709dcbb586633c02 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 7 Sep 2018 21:14:27 +0900
Subject: [PATCH 165/539] 8.30.0

---
 package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/package.json b/package.json
index 35b9386191..b123d20798 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.29.0",
-	"clientVersion": "1.0.9406",
+	"version": "8.30.0",
+	"clientVersion": "1.0.9481",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,
@@ -90,7 +90,7 @@
 		"cafy": "11.3.0",
 		"chalk": "2.4.1",
 		"chart.js": "2.7.2",
-		"commander": "2.18.0",
+		"commander": "2.17.1",
 		"crc-32": "1.2.0",
 		"css-loader": "1.0.0",
 		"dateformat": "3.0.3",

From 39e44948361760c9686e359bd3901efda83a1c96 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 01:31:50 +0900
Subject: [PATCH 166/539] :art:

---
 src/client/app/common/views/components/tag-cloud.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue
index 6675ba608e..6eb82bb711 100644
--- a/src/client/app/common/views/components/tag-cloud.vue
+++ b/src/client/app/common/views/components/tag-cloud.vue
@@ -6,6 +6,7 @@
 		<vue-word-cloud
 				:words="tags.map(x => [x.name, x.count])"
 				:color="color"
+				:spacing="0.25"
 				font-family="Roboto">
 			<template slot-scope="{word, text, weight}">
 				<div style="cursor: pointer;" :title="weight">

From 1c84c0828ef87ca70dfec1f57aee533b099098ea Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 01:46:01 +0900
Subject: [PATCH 167/539] =?UTF-8?q?=E8=89=AF=E3=81=84=E6=84=9F=E3=81=98?=
 =?UTF-8?q?=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/views/components/tag-cloud.vue | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue
index 6eb82bb711..5f2cc5276a 100644
--- a/src/client/app/common/views/components/tag-cloud.vue
+++ b/src/client/app/common/views/components/tag-cloud.vue
@@ -4,10 +4,9 @@
 	<p class="empty" v-else-if="tags.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
 	<div v-else>
 		<vue-word-cloud
-				:words="tags.map(x => [x.name, x.count])"
+				:words="tags.slice(0, 20).map(x => [x.name, x.count])"
 				:color="color"
-				:spacing="0.25"
-				font-family="Roboto">
+				:spacing="1">
 			<template slot-scope="{word, text, weight}">
 				<div style="cursor: pointer;" :title="weight">
 					{{ text }}
@@ -51,7 +50,7 @@ export default Vue.extend({
 			const peak = Math.max.apply(null, this.tags.map(x => x.count));
 			const w = weight / peak;
 
-			if (w == 1) {
+			if (w > 0.9) {
 				return this.$store.state.device.darkmode ? '#ff4e69' : '#ff4e69';
 			} else if (w > 0.5) {
 				return this.$store.state.device.darkmode ? '#3bc4c7' : '#3bc4c7';

From 2824d8a5b6d4232c12accea2f74d0b8f9e877764 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 04:54:11 +0900
Subject: [PATCH 168/539] Add animation

---
 .../views/components/welcome-timeline.vue     | 129 ++++++++++--------
 1 file changed, 70 insertions(+), 59 deletions(-)

diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index b427721d37..965ec78559 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -1,22 +1,24 @@
 <template>
 <div class="mk-welcome-timeline">
-	<div v-for="note in notes">
-		<mk-avatar class="avatar" :user="note.user" target="_blank"/>
-		<div class="body">
-			<header>
-				<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
-				<span class="username">@{{ note.user | acct }}</span>
-				<div class="info">
-					<router-link class="created-at" :to="note | notePage">
-						<mk-time :time="note.createdAt"/>
-					</router-link>
+	<transition-group name="ldzpakcixzickvggyixyrhqwjaefknon" tag="div">
+		<div v-for="note in notes" :key="note.id">
+			<mk-avatar class="avatar" :user="note.user" target="_blank"/>
+			<div class="body">
+				<header>
+					<router-link class="name" :to="note.user | userPage" v-user-preview="note.user.id">{{ note.user | userName }}</router-link>
+					<span class="username">@{{ note.user | acct }}</span>
+					<div class="info">
+						<router-link class="created-at" :to="note | notePage">
+							<mk-time :time="note.createdAt"/>
+						</router-link>
+					</div>
+				</header>
+				<div class="text">
+					<misskey-flavored-markdown v-if="note.text" :text="note.text"/>
 				</div>
-			</header>
-			<div class="text">
-				<misskey-flavored-markdown v-if="note.text" :text="note.text"/>
 			</div>
 		</div>
-	</div>
+	</transition-group>
 </div>
 </template>
 
@@ -83,64 +85,73 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
+.ldzpakcixzickvggyixyrhqwjaefknon-enter
+.ldzpakcixzickvggyixyrhqwjaefknon-leave-to
+	opacity 0
+	transform translateY(-30px)
+
 root(isDark)
 	background isDark ? #282C37 : #fff
 
 	> div
-		padding 16px
-		overflow-wrap break-word
-		font-size .9em
-		color isDark ? #fff : #4C4C4C
-		border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
+		> *
+			transition transform .3s ease, opacity .3s ease
 
-		&:after
-			content ""
-			display block
-			clear both
+		> div
+			padding 16px
+			overflow-wrap break-word
+			font-size .9em
+			color isDark ? #fff : #4C4C4C
+			border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
 
-		> .avatar
-			display block
-			float left
-			position -webkit-sticky
-			position sticky
-			top 16px
-			width 42px
-			height 42px
-			border-radius 6px
+			&:after
+				content ""
+				display block
+				clear both
 
-		> .body
-			float right
-			width calc(100% - 42px)
-			padding-left 12px
+			> .avatar
+				display block
+				float left
+				position -webkit-sticky
+				position sticky
+				top 16px
+				width 42px
+				height 42px
+				border-radius 6px
 
-			> header
-				display flex
-				align-items center
-				margin-bottom 4px
-				white-space nowrap
+			> .body
+				float right
+				width calc(100% - 42px)
+				padding-left 12px
 
-				> .name
-					display block
-					margin 0 .5em 0 0
-					padding 0
-					overflow hidden
-					font-weight bold
-					text-overflow ellipsis
-					color isDark ? #fff : #627079
+				> header
+					display flex
+					align-items center
+					margin-bottom 4px
+					white-space nowrap
 
-				> .username
-					margin 0 .5em 0 0
-					color isDark ? #606984 : #ccc
+					> .name
+						display block
+						margin 0 .5em 0 0
+						padding 0
+						overflow hidden
+						font-weight bold
+						text-overflow ellipsis
+						color isDark ? #fff : #627079
 
-				> .info
-					margin-left auto
-					font-size 0.9em
+					> .username
+						margin 0 .5em 0 0
+						color isDark ? #606984 : #ccc
 
-					> .created-at
-						color isDark ? #606984 : #c0c0c0
+					> .info
+						margin-left auto
+						font-size 0.9em
 
-			> .text
-				text-align left
+						> .created-at
+							color isDark ? #606984 : #c0c0c0
+
+				> .text
+					text-align left
 
 .mk-welcome-timeline[data-darkmode]
 	root(true)

From ef624977770c4d4b501a0e167804e69752c9ca44 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sat, 8 Sep 2018 05:24:55 +0900
Subject: [PATCH 169/539] =?UTF-8?q?ActivityPub=20Outbox=E3=81=AE=E4=BF=AE?=
 =?UTF-8?q?=E6=AD=A3=E3=81=A8activity=20id=E3=81=AEURL=E3=82=92=E5=AE=9F?=
 =?UTF-8?q?=E8=A3=85=20=20(#2662)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix Outbox structure

* Implement activity endpoint

* Use in instead of or

* Use in, addition
---
 src/remote/activitypub/renderer/announce.ts |  2 +-
 src/server/activitypub.ts                   | 18 +++++++++++-
 src/server/activitypub/outbox.ts            | 31 +++++++++++++--------
 3 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/src/remote/activitypub/renderer/announce.ts b/src/remote/activitypub/renderer/announce.ts
index f6276ade04..18e23cc336 100644
--- a/src/remote/activitypub/renderer/announce.ts
+++ b/src/remote/activitypub/renderer/announce.ts
@@ -5,7 +5,7 @@ export default (object: any, note: INote) => {
 	const attributedTo = `${config.url}/users/${note.userId}`;
 
 	return {
-		id: `${config.url}/notes/${note._id}`,
+		id: `${config.url}/notes/${note._id}/activity`,
 		actor: `${config.url}/users/${note.userId}`,
 		type: 'Announce',
 		published: note.createdAt.toISOString(),
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index f04f9e91e9..3d346693d8 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -10,7 +10,7 @@ import User, { isLocalUser, ILocalUser, IUser } from '../models/user';
 import renderNote from '../remote/activitypub/renderer/note';
 import renderKey from '../remote/activitypub/renderer/key';
 import renderPerson from '../remote/activitypub/renderer/person';
-import Outbox from './activitypub/outbox';
+import Outbox, { packActivity } from './activitypub/outbox';
 import Followers from './activitypub/followers';
 import Following from './activitypub/following';
 
@@ -77,6 +77,22 @@ router.get('/notes/:note', async (ctx, next) => {
 	setResponseType(ctx);
 });
 
+// note activity
+router.get('/notes/:note/activity', async ctx => {
+	const note = await Note.findOne({
+		_id: new mongo.ObjectID(ctx.params.note),
+		visibility: { $in: ['public', 'home'] }
+	});
+
+	if (note === null) {
+		ctx.status = 404;
+		return;
+	}
+
+	ctx.body = pack(await packActivity(note));
+	setResponseType(ctx);
+});
+
 // outbox
 router.get('/users/:user/outbox', Outbox);
 
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index a5e762eea8..9a4c881774 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -8,8 +8,10 @@ import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-c
 import renderOrderedCollectionPage from '../../remote/activitypub/renderer/ordered-collection-page';
 import { setResponseType } from '../activitypub';
 
-import Note from '../../models/note';
+import Note, { INote } from '../../models/note';
 import renderNote from '../../remote/activitypub/renderer/note';
+import renderCreate from '../../remote/activitypub/renderer/create';
+import renderAnnounce from '../../remote/activitypub/renderer/announce';
 import { countIf } from '../../prelude/array';
 
 export default async (ctx: Router.IRouterContext) => {
@@ -53,15 +55,7 @@ export default async (ctx: Router.IRouterContext) => {
 
 		const query = {
 			userId: user._id,
-			$and: [{
-				$or: [ { visibility: 'public' }, { visibility: 'home' } ]
-			}, { // exclude renote, but include quote
-				$or: [{
-					text: { $ne: null }
-				}, {
-					fileIds: { $ne: [] }
-				}]
-			}]
+			visibility: { $in: ['public', 'home'] }
 		} as any;
 
 		if (sinceId) {
@@ -85,10 +79,10 @@ export default async (ctx: Router.IRouterContext) => {
 
 		if (sinceId) notes.reverse();
 
-		const renderedNotes = await Promise.all(notes.map(note => renderNote(note, false)));
+		const activities = await Promise.all(notes.map(note => packActivity(note)));
 		const rendered = renderOrderedCollectionPage(
 			`${partOf}?page=true${sinceId ? `&since_id=${sinceId}` : ''}${untilId ? `&until_id=${untilId}` : ''}`,
-			user.notesCount, renderedNotes, partOf,
+			user.notesCount, activities, partOf,
 			notes.length > 0 ? `${partOf}?page=true&since_id=${notes[0]._id}` : null,
 			notes.length > 0 ? `${partOf}?page=true&until_id=${notes[notes.length - 1]._id}` : null
 		);
@@ -105,3 +99,16 @@ export default async (ctx: Router.IRouterContext) => {
 		setResponseType(ctx);
 	}
 };
+
+/**
+ * Pack Create<Note> or Announce Activity
+ * @param note Note
+ */
+export async function packActivity(note: INote): Promise<object> {
+	if (note.renoteId && note.text == null) {
+		const renote = await Note.findOne(note.renoteId);
+		return renderAnnounce(renote.uri ? renote.uri : `${config.url}/notes/${renote._id}`, note);
+	}
+
+	return renderCreate(await renderNote(note, false), note);
+}

From 11f25ea2e7ac2b094e4bb329e2ba6acf376f97a8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 06:44:34 +0900
Subject: [PATCH 170/539] 8.31.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index b123d20798..a3e7786226 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.30.0",
-	"clientVersion": "1.0.9481",
+	"version": "8.31.0",
+	"clientVersion": "1.0.9486",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 380cf0de6912000bf5fb18876dc910ce8b9a0e63 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 15:11:12 +0900
Subject: [PATCH 171/539] Improve welcome page

---
 assets/about/drive.png                        | Bin 0 -> 112977 bytes
 assets/about/post.png                         | Bin 0 -> 352793 bytes
 assets/about/reaction.png                     | Bin 0 -> 24621 bytes
 assets/about/ui.png                           | Bin 0 -> 128212 bytes
 locales/ja-JP.yml                             |  13 +
 .../app/desktop/views/pages/welcome.vue       | 468 +++++++++++-------
 6 files changed, 295 insertions(+), 186 deletions(-)
 create mode 100644 assets/about/drive.png
 create mode 100644 assets/about/post.png
 create mode 100644 assets/about/reaction.png
 create mode 100644 assets/about/ui.png

diff --git a/assets/about/drive.png b/assets/about/drive.png
new file mode 100644
index 0000000000000000000000000000000000000000..c35de433a837dfaab37058b4ed5ddde697611f8c
GIT binary patch
literal 112977
zcmb5Vb9CiP*DV~Y)3I%KY}<A^=(uBBJGRlWZQEwYwylnxeEXdDInTJ~z4xClW9*Sp
z**m-HSGCrfbIr9XOi^CqD;y3S2nfhmDM?Xf5D;(_5D-vn7%<>p@Z`pGfxkc<l_i8h
zswVMHfCC6qAvqxsklL6pZw8RSF|3{BcSjHqg#N!?pu@H$#vmY{g;JtIs%}5dGoigy
z)jl35b0v|db#<N93L>hkb=#MDs7PpXi1ck?W@RL8=R8{-&+gEKuh?=6LdXhGW^sv;
zxR=LY*SYqvBy@YvKepH=Z{2yb9jBf%9j-u+#yd?fCA$!5N^(9*EVN%o6JEf!K<Ar0
z9ugEzBVu{#)PFyh4b-fZuZ{TWiM3H?&xh55qVPNyI#h#6pz#osdc@puzDTW+yi;0&
zLy4n)8Z$1&bfV|npEpXxzTV%Seq;JD4N^RExaN-K_o>or`6hs0q9S+%0L&g$XE}(8
z4W_YK@_)WLDu?%HWZ=bj+r1k{0j%YG3VH4D2gh#`%3o05SA&Ghvn#h1#6QX3R|#`_
z9N<?^{tPF4#Z&DV>Du9Duqp0Xei)`O<mH;v!<x}pct!&pI1OwQe)<|byIih6-!JKr
z#+Yn$xZj4MQc9{R`p`huQUf2j1?AKA6V>^n<{BW3<oqJ}2k_hT-jdL>`yus6Z97!p
zYT%19;JuI1-qeaD`#|8Bvf~ETnY)_s_48!-nIS3S2qlNmVz4axL2%yvLx8JYUgfKA
zj2`a+z5ZNv^$bJx2}3e;)+<A1g<iKuE*R`kxqSaS(bjk9hueO_0zK-_6XDm-`S*Q=
zppr?<4i$~ePp9_+TA#P6$#Ta8!s=UwPd`LM6~*oXB6di0RYjrqrTf=QcF6ngQX=;E
zRP=$O9Dg{PlFzmtSt80UAw?fM&=g;}5A86a_foWf-c0&4+V*n-C!~MJrwetSP)lF0
zf?|Gk^^_LwRH5iU-~0EM>&E&oqX8%RdjRPy1P7e?KLhl6Na|3ze+H_GnEx#3|HnUm
z>N$VBHM50uSzA2)^!efI4Z7v?xv``Nt?I4av84g+{cIw5!BIHaMbq$p?j?B9jBe7!
zJ)gyes`xt5OQ<*gyiu9}+L%&SjnFt8133@S&^s#^xtMwIUA4u<^>Qw;w)|T1Ue&mw
z@%a9@#m)iz#G1>pMo3fCJ!s<=KF?{n$l7XJ&noJ$w=;0!iQE9c#$tu%)9D9&F~N(+
zqsf=k>81*@oQL)){@VqiE$^doh=t1kZm|y-3p)BXI2PyZ^KHs9W`M#z@C0Iv=9;$v
zDoWuCclb~X-v9luElI<jwfDy3me(F|mk~>@RuLl3mcyt6POJWBQ}2D~ZrYoWo-^T$
zz0flO9VF!BgP$s;BipfwwyO=Lj&Fpz`|5L#K7Y1!i3O~+Ra8WhN^e)a-|v@rTrbHi
zm!2_yzLj?ml?%L0?RwZk8?t$a2s!J$)3AGMYu^?!@6?}E1K1A+b3T{&-qpTgB>ir7
z6ME-Ddy{#QxT$_4A2h8DmGiNS%ig?IQL?n8MNpDV8U4f^f=G@NIz@zHbcVJ%rI*2;
zw>?d+h4pC;_+<FlbAKrpa(KC=dP=@SJjs41e{U*7dBA@&5W8e|?&@zaog%>V&*t7T
z5Qc?4!^4|?h$#ndkksAyGT8?z`?js;v=4;Qj+YFUs;kByh7-d1jT?rOsan_uh@UqC
z4)>N5X>8Wk)-d9zD0o1_{m^_dv4Z=ceTX?dseVafEV-=O)|(Y5Yv0qG1-ZK>^v?iv
zAzv){kM0m^Y&A9YbOq$JRRbW?!9KE}--l~$VFOMt;WQs}J_R4>3^<fQUQ|_8V@(~Y
z^y+^``Pe4t=~D~H=QiD9+~oMb5NaT$x21dky|SJ*=y&KkTiCG4EaZ1+%wEzh$Chk>
zQ8aJOt(qI*EOCqD+sFHB`|t*EiDbZ|bglo_RJj@(Mk4Tx$FBK^tN!J&FVO*Tr#{+3
zR;M<=Whidwf}RoF5sq|`-_eB1eKe!I&7iNZ-BBw2pYyxUq%XOtw;XS*EutM2^#?&>
zdor`bWY`?Q5ev8;`Q>%~=?(9Q-}NqpW{$gDt)<{`wEQlGF`H3gT?k!Q_h3!E+Knsj
z<!;W-{CYbVS6a2Ir>!fh^F6EGXzjEzUETC@#lEJa=0TA<(s#0|l!lsNR6<rwEUvkU
zk!TxJS1lFMC>X2H7BBuLybka8fUPX9=?;f{NQS=e=m`?EP8I!XbKsA6uG-SZ#$UX-
z0o(#JuOj81-%J$$ib&2JuYVtvuk%%2goDe$#YUT>%Ic{xLF#TFA5n3~IleYW^){BA
z&4Y_RgfBQ*gSCv7{R{zw@x=z1Dp(!b{sov(E(Uf%2}utGH)#7j9u3*=KzNv+t}iba
z+KWH0)}%^cs>-Q9!pdco8ja4{#_HZbv{<j;r35&*L*lrcYI<z@WEr1I>xGmub=67a
z7i@jedMUQih|7Rs&Y2jF{vccQ|2&LMG4OPReG??N)jD=+qa&>x#86Q92G>XN<o*tO
zZxk4CEQpNNMx(D|pyDg3+P4laIe0w~`4}M(Y_WOJ{?riZFfYChv#wUZr$#|=7u1q_
z?;D}Hamhi7yxW`A5;5kN5?{yPGm%i`Z(cFKfK!bjDgyu{9EERhfh;5q627B83~-dV
zcCBq@TPPmrZxt8p|Bn@78rw{5HCHz1E7;q3tbBBS_iV1vy?{UmB@KVLg5o}3@4|rx
zod;3#Wo)w54Rc_W09?ukf-2gDdZ~%=kHC(AIgk|i^D4)MbZ|r|wsRO+3SAQT%SAc=
z0x*);l+X!i{zysx6`hj3^m5V8b{_!C{=S}~Y5IC4fQ)K&vlb%<k@7aw3h|$VcaCWe
zgocEyJyFQ}_h~N`z*wqSbG375pqYTB_ek~R++|ueTS?P>8zEu@eGy7)b!FjNZ}&6;
z9(@lqiI98=<d46OTPqju<m1h0o&?<C=Ju;U%cB)EieD4}IsMdftQ?Vmie}^+!)P_1
zDvsuB0Pd+YH;-@9+sD>$QBGTw|MLIkIX#&`Hz*xFZ=y5r!M_O&=gnTNnG{ik)d!tl
zuC+!tRMb{VN=WY{WiW+?i<??)hTMl35=M;&Eg}+egX|G~f`aiU08!{EJsi3z3a%S^
znVqDN4Ak0ZGCV5t*_#xFgzib$GG+$6K8L0BBz&4@ZgH;ojxUJ)ZS;lP94G%PB+%mo
zie57M0eYnNvGM$Z>*Bv5Efjqn-EYP9g(?Zeaxj9e9O0ux5oZQr=z)F$MnWXwNdKm7
zVy70{DGI@bY6DdGOCd+qTn<*)l6NuJpGA`he<SjJw%WfVh9KTHLa5)m>1sl)!32%O
z;pT)OxgGeJkkU3;4kAJ?M(FonKgTE6;a-GBH#cyR!EcC|%z^+tvL#>@v7YiEM14#-
z^bQiIn6<D$fmN}kT&hp6HDPFZm4qpwJS?c|sj2$@a*X0v=b!ZK&JjQhK%dW+__rTX
zdYTEMjKH>tOoL+gOrQRGsPNW?;fuX0x|mW30p$x7O2}N(Ks_9p*o;Pjh#hteg_iWw
zpN10$DS-?zliY@9BEr>2{Zmp8D~Vhp40Rq9pFOt_)ROxHqH*#vQjzfx#ORv?+yID>
z1LVke)PKSdB*y>*`aGe`zn6k}F}2*mWU}{CaQ?e;9|2Venh2rCY$=+J>KpBK9I7D*
z@Uh*|FbZr}V<X*EK~oe%ec#qI1Iq=8w+RxFWQE`n;=tq-Vd|bamgiS>!bEB&uZ$=-
zf#m01kEW&h|FV1`C=>GUgF&7T7b^`k6Hu4LcOYdTQXs*zu2qn#plo)MEzsn^SnVf7
zMeLcYC{Hj&46lpKN~|!3B(e>QeY5_Rx}>DAv=32sAcq`FH}}+TT!<0Xj*@8TDuSE_
zOu?B=z>hLg>?v$nK?x$u?o!AK?o=2}XG|c>e|di6T)Qu)tsQK!GXe?(6k&u8!wzxV
z9Qdf;Uz>ajL6CgO3Q|2e0vLO+A$(&QzKwv;#q|R>1qcj4(}2J8)oOtB2T_p>$6}}p
zMcjymz5|H?5f4mwqabGs35Q`PMqIyMa`{=5{mMZduAi`#0>y<az|sr4ELtVib8wpH
zEpx2)r@m>8swL3}1+uoZeWf{2$k`RL!V^=jDG*hfC<6j>|3a&I2$DdU*x-vl&OSe?
zbdMmXC>Aqg+P<;12>eY?X>c1#px;lNQyC;3Jq_U;h=Xn1#O6kId@e5-bJI^>xvq9O
z7(qs9N$Z{sYP^>)IB_WuO30LHl-3PMXdr|C%<-3b{@(~nlv|muK?KR`2Y}&2@&!S^
z*yu#&g}@T#B7({Qr2&)AP3nREQ<C=$+C9<uawC!e$t%Z<!5t;U&A5jaMi5Hv7-9hY
z)f@;TGDPU2C|V?ZPvu(ah$I(IRA4F~@{lQlvr}?ZaJR&7`^6<?(%0+ubpSWG79HIN
zTi8yxF7l2wDj>W1Upw;k7?cqm!?;3wZ)~{{!F?Ls0483jXXsvveDGC}CD2bXCAl8F
zCy;j<A_Fu@7^<-Vx&~Q!8dln(49*@#P^f0P<FcpPU@opdWOc2KspL}}4S{C~B|$`h
zomk`spn7^fSu(%U9V*Ajb@qvC1y}a}Tm!!^qQ@hnUm%DekW}m+T|#jC(!g92DO|Gu
zN;XbFQHEI-rd5O~iv<<%3y~DquR`hTq3=O1FbhpgbRD7)Ktz@lrtBfwk0B@}CjS6w
zsk|SS@PtU=J~9xN0T{LDu?h)xTUtg~TKWc<EQExYmwzcQlP;rqAmonyuF^uf?chAq
zMGjx)N&O_(_P-6difWuVrZ5zgPxA4o*z|Hkwj@+g!8`Mb8$|Ws;9L+@K<SrfcOl}9
znRS&YY#WIV7y{`$7%)~)E5aI(iPXSSONMSEpBLuQI0@ejuUf*g$7%UXberESPuhYh
z2yhh5tlT#a-m{V0={CACTqwE=No`j7<I_GArGn9GU|s+n$^S2={%=_0u$H6{h!Wl&
z{j@@OQvRN$-QdIFehDQ^!Yg{og1&ztOy@2Obq>O{uz-eaEJP>mO97$d%Y6J5+eyYP
zC@?o;ofeE3nUQ2UP``ll&3hS5U*Ip>osFrYHm_LO(oE3sp{nL&FdCNLtcsFk7cKBq
z1x+rGc%aMG=+#COg1jGA{&%29H{p72<$1i^OabDlKFk}0z6H`F<1@e?Gb1s%p44&+
z!{H2u;w>;3I{X1FJ{CGO2fYWT(HH&tP_D8i1eTf+CL<7F7pk@YuCN$O*_<XQX*WE>
zT@Wf1j-?7(FdaURQqrcG?{2Dflb!(+iA`c%MN?V6tl_S2By^b8xwg30poFXQQaM`W
zefIP}$TwZS9h?Fr(MG`ZaAV@H(`~2K-)J|pLsW!?x=SP&S<md^_uN{%nLU5uW>9dm
z#qpy%weYI0{yn)K?tlj7;md5MsnY_z4<QbEmcvok58HbjyDmjTI|`&N4%6s3C~hy0
z%c5g5;H6^5rg}tTxrBxSjL1f4SVuwbyA`e#@{TO_mMXjD;fqTc2Mb9@s>z3m80S?~
z>zMx#tAQe${Ox3t&wulEdK^3OMIksce?MeSh+{Mi<MSzn>OUXRaII4iPekhh!ggvV
z?(_&!#I5CljMMP5P*<+UFe^xTeZ-NHL|@W!;HZ0G9s-bSV8ualNeVK@r8aHn;}1XN
zVJL}3WD&v;o7ERM2rFz$t*mHlE$A(+zLi!pl+#U=jQmJwC1oQQTdo^xB#v6`RO8g_
zsLW;VZo3pzle_Lsn+-p$`)6x`#)u1<eDlA_mXKr!0tS*5*h=ggBjX>)ke>YY^NVdt
zh}d?~9-@L0F<y7B7D9C-@PMcuCMpOGWDsFS1Y}rLD`EIC*z2cj81f#{yBHK;4E1``
z<U5Bh(qqLQ**c2r7g+fMX=PznX>P@}JgvE^s;8>=E4kLQT%_45ovw+-)mzD4-d##v
z&Hb{sE@NmFT<*Tm`D-Cju}Gs>h{fZ7QCYyUJ?j4vlwTjLfRWGU=wShfPIwg~mL-pI
zs83K3;9Wv+STsPM*c>4!Bl#}sFT9P6LxN}_6y6j{i3FZcSRhD#qmOVM`YdMECz!)J
zfNI4(Gh=t-MmqbYm!exLn=v(OOG4{(4F@slz~p=*(L?{LXahU_(Z&V6*b`^`ad9DO
zVc{1CD?vpiEhWE0$+?}Hf#X3}T71-hoo#9rXd=oVQg@y;C)KK#NcXvMH$}a{;pHXo
zB42-T&}s!MAM_um?JTyXSKL2pS`ySJ2}~sM+f;k4s@;1j-v{oCR9BT`wY6PV-Zv83
zRHW878eBgFkLb#UwQH-rMyEK&*ab->jLBDUxp~RlUvGS+bkJ5v#^?I(z3a91Y&+@o
zys@+e_`Ki%DiarvTi%Zw99v!iXfF?IwsD3{`$(zPT`yzVFF|Dt-EZ*&f@WekB==%o
zpL}3mtpfgFNu)hpIsYL74_g*M=lP2X0(pQt7mqK)!sa78s38m&G595@k8f=Fm&aJl
zuOI>X!eUg!lA?^E=WvvGA~+-pu`t(UL9k~?jKT(;k4qYg{=C5LeV;m!{4*tIBNvCo
z`ZyEsY9pzgZV}C@eo$oldo^BNyP-I@tD>>0q>%m7&Pd8p#U!9*s<WfCw&O+7K<vAX
z*vsM_noVcUauV5>e*hAYQ1w6H^iE*aHXARX>1Y<1XOmcE7HF_^vAP~|$L5;m_+c>8
zo>|qgq2(OYc#7QiCROz&5G1Ducz@^6^YJ;{Pdz+5B$bH969C{@LEJsB(i-<DLljSD
z3vA8L2ZG?`oklQp2}<8&`oT^pxxL(-L`Ngcg2Q=JehO6k9>CNvPyrQ%ztU7t*`9py
ztH(W@(?NVmHnm;b>m;<R@zrK>$E!nN1{{kz4NWbCv<<^-2G&+q_FH1pCk9#{0!Bmw
z1QR7vJ@6-tQf^?%d|ucm6W%fm^;ldU4M_T1b0%QsI9t|NKjAYLe%|FtQAJyKeCPDA
z=w@iOuPJ!9DJh_mE<~SEMaBDMX0;<}tn;3{9pTV+vo)A*wUs7H-OAzQ@q?pV3RATi
zC=Ps(z3?qNMb-Y%+Q`j4En8FdBxJGi@Ub?T-&`C#QDfkOBVasQH=^!Z(&7&;^@^;1
zi_xE3sqT7xX}{`zeRx%M9c!{)W5tQuu$dYeSq5sLi<R2VRx9zz$r8-^MNzmM9=rr0
z{eG+WXG`rm^sG{Ha$?~q#&BQ0BqSs}UaU1+ER?ZXE)wZ>dfe9<4Fg3&An67@+Z0>E
z|832wI<2WPuj-mpTh-9j)smZA&{&$+np;tr+fn+%%PuLslMk3~5tCtY3ft`a$_t7?
z)84?)<ihDg1a#^PFvdCT&p==&#xnZLagrT_Gm=;Zq8$LNxSjK0FMlg!%B}VtZ(SKl
zSjKpGKiR3#5>;O)8hMJSc*<#eI={w^H6_h94b>eE#lNif-NXaa?&{Uf@b9)7gv*(W
zif#36b~5IZL$l`-JWJeguAi8MvycnkP7jgCKxY9UvVUDb|6yIy_Cv!Z*-QH=X{=GA
zdjYMnXr5pJ10Ucw;og(zN~n7SqJ3SXcum+_G^gkFc)&rzUMc+@mZnat(xa1r`Y9}r
z>X&q*!+~_dXrPybgoKL=dr7Ft_e7b(+2dogR-KQRv+8_^N<%}#+1c6HJSjs%5@jlS
z`l`0JwDr(7r01%c>Tyih-W#@deaLSTzTQIrVbHp5wimhYJX(n84U0*v3rX|rXbbb0
zO{__cZ0Zdhsss-o9`x(0I#K}UgXvy>Agf<cdljN72w$HU63l$0+aaP+MW!M79f;-?
z&=d;sNE9Rm4?jk{9)N`$DbGqmVC@|;jH{4s6)g2}^w5tAN-?W8T>C<b?`%D6ah5iw
z6^+O3)zDN}`C+F$VGz5%6Ci<uh<3GBH&nUOwyN3UY9jRV(m_}5&|JyiB9LFliu!Fq
zM`KpgGpE9BD>uC3pR^dr48Ttx_2&c<pM6-=KPEJp#S?04uM0>zUtlj@$VX44CboX-
zeE;yJeg(801FH57)_e|$H~uo-)3vMamz%X)(<wqOhyD3dm7aW5N_isk=ec49LZI7|
z>-oIjYv_49pD))YP%7-kmUMP@c68v8hY|~en7duBa~V$`nPz*76D;V4dMzC<9YnNa
zJ!}0)`B%7f!QNx1`2J|E`~7>0nrlr<3#+T`;)BSqSHz`cLdz<P&z)49^>gn%WFc}S
z<zJ7cnidG??DM}soCZ93H`gSi?h8vG#d2YDvHcYTV?ktLNaF$>-YP^mPv*lY?)3CL
zx4~+|)+7Ai-$d7ElzjFjok=OYo)opUomDL9YN#!*4kIgR#~!YJuh+U9Q4D`n{E}N(
zp<94XJ43`P`_1J<Rb6D`<2~m$R5bSTa<jTRdwL4~U)1UZ3i9{Evsb-E?FB0uDbfu2
z(gf4zn+qPNq(A~4d~wCdbCPDesio)GO@8$QYFYKJ=0c#J{B8bd%lmo4bqk!X>sk(x
zgeP@`jwGHkr0Y~(m{_!AMB^?%5}nz&cpfsm;hp1VP&d+xjzJc599dsa@ox=tQ;hQ4
z%gDE{M@~0rxczDOtmBG_CL5>o{=f0npzBV{BDB)IY>TaKZR*5_rUV%!3kyqk1!p$L
zZq|!}nU%pTK&NxiiD2V6c|F_EE2l9)^@$Q+k&gyyJ#OF;$RPrz$$$ZaD{v~q!Vi|W
zw;+R6f>BBeaiHLIzcx6Uw2|)Xfkaxl77op6Izl6UX(hj=Vq$$|6G{1pzP+Wll8E!-
z&JcLW87*#_46e2`Zn_K(PI$WZ*eZ^Uwnapm#RG>r=09@QKLSGcmvj`zkDuS#*B!RS
zOjoj+rb_$ft}d)uj_{@UZr<1LiiTVIir0U|tjQ4UMPw5#@0Vt!D8H|kwVhbvZfa@V
z&J3lsuBG+4G>TqY$gg{AHa2f$%za!n2l~7NivZgKR~#q60@p3ja(%7`F(EiZVcwq*
zx?T~m0ztOX0^L+I1$;i%TOBtOP|aZvei+~IrHBxZ62S{Q!tYdzF|LvXpzOyHUvEx|
zh6xGqi6X*KyiVIo29q9(!!gm$QpQyu1X1gAft`PW`w#opoi|hwPGqMKU$i)!N@Ft_
zOP?$5wmw?UTaOeWe;t#lLr~w3vz_`yFj7(W+xG6m3(hasXwzEiV@(W%GzVoHmT8{}
z4+csw00a+3)&E@$FikuyA`OF8c%>7uIW0i#2aDTVGI&fSL1~QhL4y@X8N<Q4l)RvZ
zHlKK)mb_1*q82|lt@G82I~;ovvzg-;o=ugtCFB>3=0*b1uEN5K*3yE;swX=+dl7RN
zk(r^>4mNV^tT*eXe-Ym;ln=_8tJSrFst$Qw7HK7<uKL`M@hf?sPw$D=+oSH!hmpsv
zxmU}ii>mbO%_e=%Vce`TjfC=|qJ@t3T=${yvSa_bh`AX0)!7;=N9(>z(w8@uw)2GG
z3YFE!{G_b`3PI%Q-L<P;ybuKZ)mBH-pFe-9si}#Hi2(}{CMM)J&<J>(UQc$Oo}S*`
z-UbFcS$v+7&p_zZ*3t?O4_~a()z;P3RaW+=fP{pUlaq6Hb~Xz_5zXRqEXvI_7*C=L
zUGMf02&ST=6LZW<OhlW{<AR%k>pez2NRb8BTqM7QOiWCK3ib2`K;Pcp@^Et_DXOan
z`{Cf?#`%RuL?HW`+irF7k&=QZ<A{n?JqOYL>xheg7;u=~g~5uqI$S~%%4NT7^4NM)
z#Y9Xkx3RlE4!y6eeQ|WL(cJsdbvKuCT*xiwKQ443zvWibk<-B0-qhAonw#M}9)?g5
zRV*KV?vL_EMZ_CcxsR_PcD)GfaT`g}2`9&~?xbM3?D@%_F(FiLv+T5PmTx#_p^31R
z-=(0c@mb$9{c1zrOdjUkSfZcF-cr?B!jo=@4>XvE1S+Ffb2z<>_9o)NW@5FeiPKR+
z#boCC@U&mzbS-8PAF>vo%c<ilK6^uxYC}^ZJA0zK8ioe`vPOgL+(%~lEqmc=!HoQ1
z2EL8?Cb#3tBv8M<U;A4f?}kpVT2lYeRdLMc^?42sa2}q@<ae!VD!h0rRk_Ia9yCc}
zQ7hiM+aEH`RNTjl*-|T?;IgXb#cXaQYb@$d)9!9My-TZ$-uF-X1-&|_-Sz#uN92Zz
z*inNH5xe)t^HFPStA6xEI>#-qEh`RJbiGz3e7|JjY)1#LzG9jNd-_+k($Z2Q0!Ab^
zvHTg%O!-!wXyMKu3^09d&S%s8;pnu+%-Bf72M)v_Ab}L+8r6#@PRB`kR77dYrLyw!
zE}VEU;^jue(ZsVCE_1Bb&1;~_zAW%*iHV6RDWNFFW8>qlSDR6-mEY^3PzAG(2^&ZB
zotUHYC1T=VmAlRW25_3uAg})Zf0wuD)6~cr#ph;&kjD>$#3sN08Ev<fp#Oo@>BMBp
z%!z##ZOm@zEuEH`$!=odrkXdZ|AW=Gi<j8`{giE#zFEF}rOVOM-auY0wI%;e(-PfX
zQsNTP&nlX*oX1<4tjxvUGVw{6;%bBFivQB+zBtAc`^;G7b#y2RL6t4*+>9I0@bPD-
zFTU=VoE#V1!m}DW^jP?p7(#1cT>rIhfbx7IY3+H|`*3(eDrX`Y)1-=L&9$th0hP_a
zYImr)m)qBAqCI!BME>i1y~gJ?SdPF`Xp>&RA<Txx+>&ZDyOG*k#vxuV{pVsu9R<Pi
zfyH`vBeT)CUmqV(1yS47V?+3FLb2%bKWXw-fZWn4ZS|u178OJ2s^*5rX+$;uYhC5R
zzJ_TR=j|ZJq_>IA$|%Q0dy7am_Lo(;mHW%^y>iPb=9PtVM0{P(8gJ8$lXr=3tvK!W
zlkM6HBfY{TR>zfJi|dD9fZ+lvwy>+~V;~GQDk^G(s1o>7TFT}2M_)o>c%|MHk&xeO
ze+0RJ3?%5{;^JsBQ>3f36gIAe+vymInMz`<sfpd885UHZ0$xbE$8@`<(Q+v-1enGw
zE~>LaAM1l1e<cfKWDOaapmd6;2@i*hM9Ad#e%T*QAfnlyffEL?K;G+?3##go{YwLO
zrTR-{DW}=&y|wLp?yW#PJT@#exILoRV~m+CYn%-n7_sw~U51K@;=nna%zC}1y!|ci
z=;Ssq8x)b@AH}Yn#1Ii0kvu#+FdQUdr4!d?v{#n*-j3T*T~Sd<Z-J_3|K0UXvwt*t
zNQE+OD$4@$8sxhof*TlDCLgtp7Pos@VeZ9t@5^p|ar#sS1TI@+Gp6l|O-c3E9H1bt
zvheaQ?4iC`TTpj@2%X#9=9|FG568DZy-h>2i!b2NG7rBnFS*=^+MDux^;MjAx&qeJ
z(JK{7*BiNf_AF$q=Bw~6R}mv{D`D6h7nAX<D=SJzDtS^6o98h&miC(#O*zy}*;EgV
zKK3;LJO5zDwyAZqk{$Ku-^o&D*B#DAu2R|V2)^}1wvW%p>s7h};PF6Xi}3Z(lfU^P
zpa9QgH1!#GEb<_mVSN=X3E*}xTD|3PuH9A1?eLoWgx{Fd5#3_Fu$VU|yTbMUu~&A^
zu41zWX^6T43o%KAO(G10vOGdj={M@pCmG4$k?hB0pNoZ~Y@bVpyD#MX6MLC^;LM`k
zZcn%RTh85#|04I9R`s0c4;()`USATiuXp0go|eh8Cl^Oi{N$L%la33*ER|JuN%Ao!
z_3)4h@|8>Sl0v#47uVR6RL0TAlf}fv$muhh$qen6tG?pa&o*Cebk<goS*oR31FIev
z+8Wk6$!!MK(sF8}y*GVH;@6pA*_k}TO>WuTGfppVbFC~P3K>@1E^S=Z##gB-a>WV_
zzO@L1o89i^{FEFA$1`;gO=*s%(HT5z>znFgIAB@a(Tka<B?5Cwt_@;dxq{wm03&B5
zN4e43B$49Pvndx=HOwp8mH4#wNk_Y@rl#;bBevZnmuvO~#C4Z}*D)%zCRVkcs7mrE
zIuko@6)Eq8C$^p;LO?ph|471jG(bVvCjak#0nZxqP@7M-mjDj4@uI4VBk3tF+U^Ft
zCl9efji%FT{*}!?4Y7|{jYs6#lOft#S!gu;o1P9zy&R|;YSon`-gNiV>6VsTTdJSe
zNkz}?s~9%65hI*gDc+NbOZH03z+Rj7OU$BwX#ko2)Ld-thp+WTQ(hci*UACH7+rQ<
ztTg^i$GiRgNg-m`@beifw*oJAO{_`=>?wjWwsP5^R<kr}>fuG$>eR{CiPT27ZR?$D
z!20{>)W(UulBGIVla2JAxs20O9a*vU-m04CY;%5D4N+&;L(k~mZqp^pUv6bnX-QRC
zL8sMhE#_!6TDmt;tk8tV=b`_|Usd8}Vq}D12FxRd=87%Sab<*L0-JsHBoH++`PDs7
z&A!e81MARf-;l_l1P<+5I)Y1sI*0m2HSK5#_1c=UhS#~|M6J<odk(je%2`}n|HVCB
zh-I3XMsvfjCOrQ6b>*#juaeTneY=R3+RSrn#QzDV49eBAUhXHm<b*!VGNp5j^0)_R
zX3Z13h96PX9F{J#c7o3gFMa*`cX)~f`piy(JJl<gCk>zeKA}P(;ym~1dwpcgIe(6Z
zawtO3dkwQ~28<9GE$weGiYIoRW+&O2&}j!HlfN^hc#Z!#gEO4V76rn&xOv@2RdtJ&
z9-CIWW4l$q+|30?dc>7_;g-!v*Nn0oss<og@!FUCQ>y6+R(nCEueUb34EC~2BObA{
zwhVAsl!mQ6W_nSU-rY&>;F(~hkxrZ+Fvf*5Q1nHk#{ps)6AjpM($nTTBW~?KVdCSt
zSgc~&Rd2QlCSCsh=H$GDJYt_oDJ}w29&j-c!~dPr_M?tGBDq{mi^q1ZbUxeb?s_b7
z-nm@8TDRWe;-z7q46s2XG1P=E=Fa0%T&-6>mU?cmSbblidvL>f9%nF)72$p#o@ks*
zN*-4GC3vHKF&UUR*IKK+Jg|wqx@s&DNKUQp{vbbJZ9O%Xm@7q{pj1#tLnAM|`e|X|
z%E5-m=}}Nt#BF(&l=!<dT|13tB)=^!;F)r*d@9TAX;*f<74@rW3`c0p5qH{TwwaIz
zMuBtD;qs^mz9|kuc7-k9v!j&-=lbUS>Y^{aS3%|Z$W9ySM93OYA=Mh!>Ri6t>RNN!
z@wm!#6{@+#_@;Q;px&-uS1T^`w*AR5B*6~?hV2jYIRqoP4;k!En(A8yqPIO=u*lJn
z$+6P`Fzj+H_`yi}{)pd)L1|R;9l!!lVPII0$-<?-xGzW>F={R(&7~5EPW`iZVW0Kn
zX=|t`!dvD^230SG?<l`{E0xLoW<Z0oGtlW~Ke@Q;?WP>{huh6H6C&@^l=c-C;FGj@
z>v6l%_0#e$A93S(`@MP7`zR`g-|Hv^+NS;SGM&J4U+;0l@s{rs=Y4+fkt9Gkaout0
znCWrr;VIvB<GmV}@S45#Y*LBJ=dcv|vip%xfgf;1iujIdo$ayP6*9c;2Tv{0JQd^Z
z_8YvpUxCk_L7D*YC)zX{0J6b<z09Y;>%l?sXTZo+;C<iQjQJsz38wvQ5|>im4JA`Q
zl#;L;T8_Zu&qM80bnDe+Iuo}vBWh%XJfmN6b_*i;XNUJw;I#tp-8TL)M!tU5v31|m
zu#~p!w%@CbPy%MQ54?3}=6Xa}u0o_gMG6f?Oc|!08$4yi_E8pgz|0JyG?H&q3R!S}
zhLXb(J}KiZ<xHxZOH3$V_n&1)1%W5vcI1xIqGmtP^$(r_Wfho>s<W?LOIWudY4ze*
zE?=20@U1p{%DG-CXl%(kKgFA#Tt0d_t#*v8dT*^hAON4V54)q2dFG>qw$;2(A8B=5
zxH6d5RgvrJq#Nqh8!N&WHb-^1=dWif(rHVoO*W<GQ)cHQ++JmE7n(-HrADUwJdcA*
zdOok2Pn<Hc?ZsYqPX9wl|J(L+A%5SMSkS!XaTR7?-Nkt?;_kKIq40C+-OT3q4b`Gy
zERAYJKS_W79tPc)n9wke)O#g+B|-+xZD|)%E4@xz&(-L!qvaaQE*Hx!4$fn3Uuj*g
zHVTwWGouR%jMK-hSGw%$)rp5C-h$ai<$GH^g1k4%3h2%>s`Xke`pekT*^4e$8qN2L
z*c|hcWWQ$P=0>h0G*-4T*H>}#efEsqb(Y?LZIy^dThcJix+t+Kp{}S}RoIjkYzm2p
zIh7BMd7jL$-~x2yzH4q=C&*FCv-MLdJpZ@}WZc~o=zvOyMHMQ^-_(1%7bvrQ_^`1r
ze+&tcK{SrfKK+lp&7fRw>TNiWizZDzSPPL(MX6wu@s>u-!6^t4?R%rgN&+qon1PT0
zgY%ie<h+Z)4{vq{91`}8@R40lP9u_c|3tx7d~!^%_r~X5#|W9*Mf*lyK4@Lz)_@VS
zdg`(~yN-cr?ehKJf3O+;ldF@{V7=qHe(Q7F8f0!DdAOU^{%t_x$G}!MrJl#b4km%;
zc2LNr*X89aMRcocAGm8w`&Dl;L7VLx_@~F^We5eo!)FBICg0^I69b>u)$QZf?VEQ@
z$IEgj1F!EY^bfp%{?}oFr$4kYB)+VzXRV$D9?vrplzh=NiTPY*1etdb7Bd(93<BW*
zf|Nhg`PKZ<o744JT$f$1KisxUm$F+QgI)<ep5ve?B72ERl!7*6iOFN+04Sv4azD^{
zB>v3JWr;zF<e)Q`czcZ{xJC^^5V-H7%iaKF(f7hP<k7$xr<bv(@@btyTXSjmv%N0N
zfB)IhAP_-?$j5u%6IJvt%{yJ;7&0uQ>h-d#GrL*8vv-Z@#GF9(wTUw%N{mT;s(Dmi
ze;lw>*tmUrN0fJy%;*UWVZ2PJ7TD7cj#vUJXUmmr1NLhcd(BJ8GOnyh<1XxDuIx0k
z=?mCVZG4SGzo8sm5~$02<L6|LnpbbM__*k(pRH*h2&L#a<JH}q?){=G$?x08%2;Sl
zAJo~57n=4L3F*x&s>^N7tgOhiD@Q5Lazg)B9RDee9xvF0L>!q;x_O>IQ5)%HeeAs2
zPG+-QO_*OzWU^&5pJ-Hlf4r2)21!A~;hQCw!5mEt|NaF-+stEY^6Ph=MdM4I=AS`E
zV&M^abmH~w-9+P7MTu}xqgK;q1+)noTJS@1XX?ciD;X{pXNL>4@%ZI)%I;}$_Qe&t
z2^|2n@P1<6KW}p}o$oIpjsmL<0HBgvq=v9@sasW6cTPG1t&nAA!Kb69rlR>H3ET>7
z&Ns<d8YJh|bPYt7jL*HUbWe2eYKX$=j3c+CF1{kTE&emEQ|>R;@UiZG<@4kxT#OvA
zqn<pmyZvY7(-!_4<MOwUcK**HaiIE|ZU7@_ONN4N7%w3m$>`wLEAna>`|>Ijtoq!q
z->Fa0nEAzL#xHJ{uYiy;7`}86-W%=UPl}aGeE<uW98`$1WsKUFIMw)6Z9m#biiWJ_
zm!utmV*4op@E9Na^DleZ;Ouhl7r&&cJKx?KG_pLs`%n|IJa_Mp2(mxUjaahWorYLq
ze!C?-&7@B8vA(B<#AQF@Aq+-xh;c=}p<eL{97Ywt1xXTmTAugMWxE?wFz?0k^X{b%
zZ{o?cdE8CZ)^I#w+t%0;u@VEDK+!FW1#YKt6%s_8&Ms7}z+!}+)2HGnB;Vz{012{!
zzw>tjRI&$T75ynjww(sP$8B~{izC0LUVm#tA5NoxV3>42bd;Qd1takB#AE(Y8lYgw
z_BMN&JHEJX9*U#&wO1m^YH6km8;0mm+cmlSPsC4sNf<E2mCv;1{hDpg>)i1SaUGVF
zK&d5<Z_DN0a4&jWi%N%2sU4GTae)-&wN{IIF&y1Yc){s#r}@fMfG@EcgKx<*Gvjiz
zyn~AWR~jJT-FLQ!KMa(gqVaix6W?T|6-EEjdbd!Z7B<jpE_I#4$4%H%_%rLb_Y@8%
zbg{aOPj*|g={-z#BV9MM(DCszn>;pfZM*9ArBdPy`E_gDR_Yjov^Xv{Vt(Q1s=qAq
zX{#Uow9?BwWjbx(?j$B*_BdO#hVRFU63>)xHrqidRK~<iZt<MDoJW^(p=|zXy*j2w
ztC<uLCRGD#(=20WS21ebcC}Lcc|R7hbFD;BT*Eb3KS^GpcR=-fiiVcDqLNQjM_tp7
zsJex-zJs;+P?5Oi<orb4UgBBG-V&`ws$<8g=zjkM1M4@0+l>)wq@;er(-?TQkbDj~
zBkGILp;`J>yK@dXFgYg*y3-dUNICJ@Pj_PI<lLF#a@+(wZip7HpCbKsncUs?*8D?D
zVZ3b;)KdmR8Y~Kx2%X{tLmHrOs1I!}W3%HF{WgKHBmb_5!9mVX<f!H3zj@54y)HmZ
z1}4(ILTLy<uK6avg-@XzjmAQzM!{1>X4;S*CC^tQH7YJsX>bR}mK+QcF*<qTzW7&s
z=i_)N{fjcWkBv|9zCzqw`TTkK%~9<A=W=Z(ZahCPd5|n{aHOB)K!y~3Jc%}$E`fo#
zbW6shE51-bmF^cEf<_RrE`=UV5>-+#b#m`WPSU<omk#w1(N_^)!xINJELd^cS)`!j
zxg{h}vphI$65U7#=7wc-Lt~jfv`r<nE{YE!rmqDu#u1%yyX&!e7<(SY67qg`6zr5i
z1q#X$n;m?fJdg5gYXXPo?PxzDSTKueF!C-8nYqCjwdd*M=us%QGwI|(Q_XZ$TP(Oz
zD{Zmqe*hVObe1*ICFjzzeHSdhOIPW0J=AW$9&0mTX5Oo7=Qy><Hk$CgEg%2mP4W!$
zBBYyl_2Id8af&-lKwwk&Z7^(+L7~YT@V0D<KP(^s0ONPPTYfge=j3(2*)LTome1yo
znjiim<c?m02l`Lj^`@9(1s^vzF*8Y0lY@G=8ZP`ThIq%_jdr!dtKDVaAa0YDr~NLO
ze!`;Jv)RKs<d>up*27U2{?PC^Ab0mZE1T~GR!nso;kJLpmT1-xMb`cC2(URQo1dRo
zBlKyoo9r+locggXEA8T@GXq=OF?T3=LpGvDIPoKvies5m9Rt^PI-Stle)j@(sJq*3
zvo7?2yD*+fTh-#%U;v`bUNqm@*w`0K#9z&X7+dfN!u|pRTOTW}qys$^Pv<NB#gh$v
zM3fBd&wxlsouGN2DOd`Q3>fw}cz6I9I~!XfvXyXAn}vWow9tS0@)m-O<}4G6zkP35
zZYS3nZ^OrcMsy&_e(C-x47DBkNy9!$XMyLhny6kG&0($y4%-roU@$Q9yNolFRTcxI
zFj|KmF+wqT7<czKeZpqZ8Qu!I)vSZKY@{kNc%MktZzOW1(?2jKn*P*7$Mb1A-1XYF
z4yEYph6&mTPAptjnErB@uStI>vpvu<?#9YdW3hQIPl6&2CsW^*`Z~nQx%h*M;x+5j
zIocosWEi<2^D{YGtSF2_@jH5lP8CTQwT$s#w(qD!Q=;ZbuWbE!nJnHXX2wn`g+&I4
z&@GjAWxVCyDs^1yt6^;g!@9$kyO%}r#+L#yLmr}pDIP>n6NzF@cBXku!7bJ1FbbQ|
ze^xcybB|GxhQJr1Y0{aWovnB(@9rotKyrDbh>!Uk>s6p2LfWFXuk6(nkUNgVZhDQ|
zT?1?Gs-Fw?yTR28^Im|4%kk(J25tl&K*#fXEva4>1V$sk9xv7CNFkHQ`Qvw3y<XNU
zN~$B}R5lmj@I2M=2NJjQ!}$t}>0}1?!TZEUJ!Nz@Bva-w=Nu>@k2m~D>0B|A;3fcq
zILjAJR1;1ZHjG#pUKC7{ky;3TUw{|z*0Q`zo0!cLLY+DEZF*oWYME>FDToHfI*ueB
z?WJE*pa70(gfu`&F-QbhyLxjE%*8v+AZ{GVX%$fT`D*#MO#EL~&c<zV*+D)l`u2rM
zmUvJ=tRFLEaLUc{gH~lT^JXahGO?j~^L6@AI=-}lWy{^C*T2yI`gCdY&G^#);7p@J
z^Q5M5HShwL{Y3TU*vx#nF7Qc{uEzYRs*+ZD$(x(U;j*vfkw0yiCxNq=R6VJrJ_W1Y
z`@8YFL_OwI7UrdW>w&#;LKybrOXSQ{RA$?80wTs#j7AB`USW2ySO><#q}RmkTfmB`
zJgbjq-Nm@$g`W4!^@Ijx*VFm2>5-@vw@=d3mcbmh?V({Uthq?%Q{bf!L^_4M+sWLD
z<EH!7hFj2Y5<6qt1i~+X82~d3)n_ZRh$dwYZx75L2@;WtJm&%=Gk>&wQ4*f76K-<c
zy+{JskZ~Z@Zk^x6Q8Ue?BNs)7&5U-P?4i;(&u=b3DL=U2-_v{u!oK(Bkaz0$26nc0
zQFTrfphjwKB2|7TD36h36vM^Gsh2UWvAkn1TqH2KHbXLZS-uB5(hk;J3SuCiA&udG
z>Iry^bU*Hb9$tT)pNpBux}ABw>TKLkSdmXdp~{b9xnT#lo%`Yf&i`cHgPa~`#5%xR
z9)!P%;y1Sf39dZQGtyHcOhC;=)(AsNVJ!vAY?#ZD!V0?bq#fr_yb<W<CD%c2w)^FS
z_&y4Z<b)Lt_H11=QfMsPv52~Gkc>1x2kBbe8w@t*w?ni#sYn`91c)eo&_*D9t)#|?
z8>yJ@EmUmo;2cEx`}DvCW3}XAEOF;^($4NZunEd**nQV=crx>X^Kr10VG@t)UhH=C
zDhBW|5qG=QkUjj_&Tq?g|NXV~A^P@WSbzucLR)}O+0AKxcosdEoz3|=IO?e9lELru
z7MUWkYJYeac551)#Xn>JFkj0;xu$?`%VQ6JEQkf>CKL)mB)kk3Bng|D6F2}AztFG;
za^99}ji_v`t;vH5VCNSXff^!-bm(1}B&(mI3;_&D3|0XdlyH_T6m?uP_%#ysNowE@
z67@|11n9@85d~RGXD2?>NUX?we3c}Y`Q_C<=D(r9huddG`)V>g`WM5On20bHtVTF<
ztMhfP2))d^%`XgHM!6f~r1{OJRtu?L9S`XMpL?zK$>ItrOqPqgR3ZJ;c9GJBTEJeI
z*+QB8ygZUTW0p<r0#=%beXEr=lQl|0dc6+OS~DqOf7xP|?^H>@XjBmtPCHCy9Q$`S
zGcgb4?X}D+Cxp76M=4#SJrAM^9Wg||MIpqz8SnH-$?$u7JV;d2r?nH?+Kyir8A+T)
zH>hTxo4xF=*H-iMAoyHAkKSfya=LzSUa#CrOl4RG!188t({*jaLg6B3AD4tEIh=+N
zHh~KuJAknO+o(gW9Q@;|EomyvIThD5)wi4&|0BAd_6b;SWiY8w{2Ck>OvR=>bJ5gg
z$09ua9NNzcA0_T$*xtg`7a}6f$yh!`wzbUVxWPhT6m1=tIAoLt^A8)HHVmQnbKs)7
zQl+z5-EC4N_;T=3i;msqC@^BF2|mVD)r|xdl6$%&K9Hy=b{K{oZcvpy_!LQCCfl#S
zM3X9-uOi2#Eb9_7BcHD0(Mc*~q+NxQR5L2|(6G?J^UI-iCf61lpo<wJXGGxf^zllF
zG<q@!yO);-lw=vg<RhI6IL$Gw<?6IlsAS3p(=2x4zeTPMP^wf6%SMW<n(W3?mCuF3
zpVczbqwcZS+pr)E(j>M_zz9l5V&S3WqnDBdNzPCvlewJX1EB*;_j*))%-|^(mSoV)
zmQi|uViy8nfEK{<`**0^fKqI+F4WcjpgHMagOV6eR7z`e*mVdav&eNt9Lg(CuU9N3
zMRAOuS#umJ12WjRP2t%v+p=Q`$y~m2YcpE;QR{#7npV`}uqiyA>y^}7PuBv>ql>LJ
zXKi<}gWS{A-T1n%XB_HFiyG<#I-Nh|<ZWz}uKiwugOe8f#RdltObQ2IZ*Lsy5Y&<|
z504h{xiwvKj<@}8;yb|ae>oSrLnG{Cm|m{Cwlo!1HC5Ht)^>EfP3MXLi_$~{#yB`Q
zio$>uYhY0t1fgJLY00Q%EF&Z1^z`)n{Jhiik;Dpk{chiSdq3nTN4MRD_~y?}|1oID
z>*Li{i@g!BC~jjzA3QQLBFF^=EOd*Jaf@mbp}`@C)%g2^?GxXCJ062lLyb*MNeHT|
zV@NY9I0a#`4htTC4N6T-4HbeqXm`D$r=jT!6AUGG><_fGv~0HBitY#2xWKgerC(D2
zogbUCY<e0UzD6X856ZB~^cl|AiDoKyIw=jvpqh5wjd?0DrD5B4O4zHHD*M%#vuwSx
zetQ@^A)NZ6Fm2(?D^tE;p|7H;sp;g@pktoK>aCt9-efd2^ov#lSQ$l4)(;I;CmUgn
ztG%{lx0*kW?C4L(VV}@Kd!Ae`wB)FKAhR!DBx6V(z4SS`f6T+2h|%fdCHc9&Z|<s)
z_BNtz+s$nIgG2<_1;y_DSoHqvIWBVpyr^VWQfX#WVj(bVcX(c_*IzVesx_5`A$Q3Y
zr#BYhC%uoY<GB`N3lGhkThrKDS6J$=uVUmV=51syqJoY0pGIZpo$SWB;?6jvY$Rm#
zQubpyFw45ypRWofyGIltpj5CxRD*?o$BA>Ir_}LJjE(B%?J+iE+Adxeb*Exre_#G{
zBtohHGpZ;2hP%Aa21|thAx%b)^V{uF3ENn;BRDx7-+!g|)Y>CJB)3s4H6j0N79+(1
zNyUDp&E_sj<ipkn#fF&C9BB;ipB`{TexTO)xFz6zV_d%y*)8{z#iV`(d-2rHK_2tW
zY3_##Lh|52?J8aoq3jAiYwd)M7};q1dWJq~Ii5V!fus}{H8Rf~4pXQo@y!U4b4x{)
zab|y|qx)}{Vn}Oim&Kn(Qj{MQBM~f8%sd+uA!~uuTsl+|Ag1+36!1kCc69?4Dzs#&
zRs<0fB5S<gt_-=LWtf!PWf(Z`IH|Aa2Vh~0VVXl8V+@B0v15KMUk)US@@yOv^063C
z4s-;dDrQ+6@M(F5r#dQiBs@Z?v?y*WjV$yJ?r0RWP6z5B)xmX(0J9MJEdJ*Jg+@Xi
z3)kf@5fNs%64&t7dmI<*NjZron1{)#iLkuGjupK*QzMdF-2y(Y;%)u(EqLtFwKz^`
zjpZ85>N3*to+e{(zf@CC<yV^QWy*L`ndY9qw{op;jgF2I#6Tm}yIg32AU#KMWgS(j
z(|)*GHLv-}`4bUQFfbshX*b)LU=97OCnqPb{f3K-3<}r#IdSj7*Csr4;smA$!bH_e
z9BcXha<5gnXvXSaJ3STr71x)UQ>W1a{R8xC$!fDLAr*88Q~>CPq2f(~;}dDLKANGZ
zECV??<OFi?A*Uz^za%4VERwhoeDKg4hxIB1pbsKe2$sZz8GDrkQL9fXmpBcN#|3_W
zKffUR?-ru}UMR}CUJOC~0l+`$Baf>;qKDN(!$8OAbQ5}-=iqm9pXIUbtk<8lWD$5X
zewh6;qEXzz=YG0IIEm=#GRD(WBwC8*lYgxN<%5rciuy~Me1gjqz$ie&WN=Z$Rt`)$
z!sJ=!IyObIzuoQDgchKeo5|NWxHP6}W0Ak=8w?a#pDk6%Z8kW6J#g4y0o-H^j10oU
zMi}lJ4JmX!r%J`hdV2PSWdBx>Wn4{3WRucvw*5V}sjZo)r=z2&4#+7hYpCj~ySLjo
zVUd{1I^*>Gzyfw}nj%K<&v^{JO51}e006?UE5!0PY<{UD+E5Pl%~xynT$Wo&eg5$F
zGAh<m`A?`!&}leu;D6r@5w50xOLtPCko(c(bW-eiMB|LJ+D^W1g$Uv=7=Y{5>;+Iq
z*B^L$)s}#nzNUaI6ryP^u`e;W_qd8k1R|vmUK=WVYDQwxQd-84k54mfQ@Amy%WUhP
zEhE%1WRMh*k1a#g!+=pcptkFf#+pI1i4+j_ef=k0wPGz34ZZ9rgZc`_sqT0w8rK06
z(M@-_oY7DuHjm5s+w-l!$J1WW7fkSU&MXWo62uiejA}XmjnMhm<w?ulfiD<_(HsHn
zk_4<hHR8t87(qbK1YS<~J}Fujn-{jc{<DdT&0oaGG4^Ak!<T>11{qxWngiJiqkWEM
zna&Uu8aoK%9BnwA^Y_@#pYEi!eqp&*VGSZeYYPo>mgslt>7dI4EAt(?AuPKP`K~uk
zJygdDd!sC4*~>pMr@)3Xki})cpjorj%4eo3<ltkC=pWE!<UBr9Qzj!oN#=egszNKn
zL%;qH<s5xHx$y3}TQSWB6=k>G)KOP&GM&oG<Z<2o%o2?1>+4%x)%pX<>>CgtA0GgX
zNCI9bBxP@3t4af@P*7ZqN-y*b>~StDFP|Z!qpR%b=qN0Nqyi5H@<?c+{K`r?4h{}l
z+AjuJki3ERK&^|B$`DDxhK(2{<QM}YfPV&7`OX(vDJw3{4@K1gja5jau&@xzdoUdR
z7#sAs638b*_Ltm|_0-gY7-eDIMdS6J2dOwAh<DH!rDUPrbMWLWEG+8k>zPC{FefqP
z7!?A64b}*^5(zIa9!MzSl*Iw#Kt$}_XOePoX{j;o{QtOm>!3EnuIslg(n68q4#k37
za4W?fio3hJQz%dz3Iunz;_j}&-3b(T2wwE0@AEz9eDC=)GnvWEJ-O~{@3q(Z?euy-
zrT-<eT?Y<eRCPfo_|GR1xxVxHYxU<H?0(Fr=);2eoyVh_kNf{kyfg6M4#G3Ys%I2%
zU%6hcQuOy<*cx_HiIbpHqhF8_zR!O1qP$IpSy?cLzR#4|M5SA#TBX$?!JOQpqG!WZ
z+2H(CdvSnMwvbM%ojXlqJtn)Yn#~xw-rzCRcxuCKt8He`a@mPgHU2AFm0vdw@ug;Q
zUx3dI%0R}HN>rs#%_?WDypq(g>Ty28ux9Y1i@lJ#FcBwF%}gy+X0vGTX!47Y*KNkR
zef*>a`eQ&TJJ(-%(m$C8mY-wxV{vy*FPlqvv)jWt0JcW8>&_*%=YIy*{^Q-aptxCM
zpX_{`;8)T2X9A*SOKd>^a1NX+aH#N5^Zs<X?hl!U@76Y}UB)IE&*Vg?lpS20hA?5a
zi#OZ{@0Z}2m8SXpUo0{s?SyHB(Ckd2xrEn#o8aAHmTE;qir|7>NeL0RVk^ZWF0+E0
zo@izPKE>^#_a6sP*DXaJg!QfFDZ~r7PiV&dSpj`SrzweQLqzjY64DHe_7@ov<6zT;
zVfayyn6**6SLMh{DTJW3i2;Qx{@3fN1z#6YdQNecxAj7~)_MEYL<X;mm%gE<BOE#T
zkFa~_<RzaY9I&6!;f+!E52`e_H(z4OyG;vkXz^fR7~;6tCqVO?d?e*0tWpGmg5fJJ
zrcoQu^a+0W!QN(LEEasN>53+#2jNM^p=rjC5hAbV3jNrW<JLw=c*Qd1MYu$NKa>e(
z)lzH1m(Ew35)&H6CnlO;pC5*?-?<xKUSf$$K(l^96lED>?8QyKyrrQ~0HfIgr_d6!
z!i#KygSkz}fDqB@EOSmFUFJ+f_ID{Dm6IO=u+kMK(&_aAK5V{=ljoHJ-~Ouz1Dr2<
z&?Vj~zY+e1@a=QMCSrkPJ0_8bYkgzmJM~Zg*9S_(6ew!6!XfSTNch6aQ6i1-xuUNN
z6a|)2jql%XKgA2<AWt)mNbAgjNGCG+L+N*v6y6|g=V8^0FkRA$MQ9U?q#%J~bA|q4
zV8Y%IgC>*^;!-zbVQD6z;hes!{mFO|1yl785-nY1AL@Fw@`)=xJNS3y{PS`Am%za6
z4e8xwhdi(XC6W?a)pNPPCiNrm9THYqO{|PSg@+!=(G5S3m-l4;ghW+Y+(Jep^>=%W
zk*TaM3&-c<(o$0OY4T{Ha7zW#mSg5FGAqAnQ@x?Ef34<W+I$%nmdVV57f7R(Ai#hW
zC-Nm;d8Rji8yivE3YP*q<mBmlnT8LSz5c0g-CpHB&3JT-*Y~qP|LAP@^L{PGP7J~A
z*%Ysu6;F2A;(`L$Xw%JO@MUHu5QN!`|N6wEsjZ|1uR+RaZ^`HSBsQv8Q+g^=9UdF+
z5gLCF3^X}y2-QJbn1{ItI=voS6C(0R5~<VwPiir8ZYwylo-kTB*YK1JvW;!<b#v3-
zn`~DyNTi$;jqV;!70Pg@=f}~q8<bFgITSC-7ydrshq!AyQt1r+JFG1woa*Nfp<!>U
za*jfC`Pc27HRsA#3>V+8*@<LBy|n^`vn*Am<YjWum0h=D$N}pV5QAQ-kN5}#QIXOh
z`fns?;m>hGD~AQT%;yPH>g_<D%w?miB<c{!(tPZCRR;|vX}(NBC2B^l7A$$@pk*)t
zv!U$$KqvLnv?Lh<tKjvN==M;I|LgOeiHQjo78WNV%urkVxjOJO1iqG+F>t*fiDD$S
z4e(`EZ1^)G-y54)3I~rcxv!T6Yh(+{o0!h=NB}#po~QuW)w8zu`OYc|X34<vZ=zWH
zkTGt)?Ul4WFhRiBY*-!M<RTYHGLFg>3N}`wFlh|dIf+B$3Umh$E^D%954ZLcX=liz
ze(C$#E`NeWESiFp9~*8Ymc*@GPk&K<`bCvuKNv-M!QPyhZ?KdViS0AZc_vd(A2lS8
zvRHKKV<<Csa%=D5^%uvV-(k|>5hmB4Z8Eakz|XNnthkY|`i`2Hmlps)v=uvhE+{Ih
z)T}Xvm30#NY&0|$>#c4a@;(AtV`F1XI*mC-umFj-W`p&7=l93ozkkDA#*x0-+AA>I
z@%Hw1JP4#-sjKzvTeaOP*Uz_EtjtE(KM+#jurA0j`Jl;^aHhhf1RvOV#3JaG74~B2
zF=MbBJ^?>`)hK|)BE(3aA6N5YiAAVTo?``mOJ&Dq$4W5)KaD&?rKHI(ccu(3|9`S!
zUy`_7>cd&yE|QPCMFo^+%sjKFq(-|mEG(s2bGdw3wnvU^@-Hm~z<S2U;a4{BF+Oam
zX>TI);Wp1~8rT+8Q@1cqw3te#T{Kgn-_>JSh&wcrH0oA*ydXIw=A*39rtHbSo6^Oa
z<n|40#jsTn4z{vFi_ytn#5-N;w2O8by;TLwJ1x4fbPDjB@8nml{q5C3mroTu>!?Qh
zh`ABLDNzS@?y0Eb=RR8lX(Z@qwstkQmz0#3l>e@;E!r})qt;c@^DAlGnmfF$+vlIi
z5Zt>_^a#tgqOR(>Zrc{4^b!R4*5|)0#Yx;->WDu6@lH8Gg*jzjBXxRNbnCu6ER}E%
zV>`2(G%WGtcZZ#SKDfSNGk%Br(<&CU%AN`5H%&FOflU1w1y<tE5FjgkOi=np*kLHa
zOMoCz<N^`eiV@}Ksp|vSlVU=pSn7u7%SU#eoMfm#Yt0n$u_I&j%Dd=67(YN0!BjEM
zocT0=9lbbOMT)Na{fys-&6>IMuu|vCM@>5;rb<^C(FPfEuJq#t>a5j6%vpJG7O2Lu
zIag1;^)HzE{1tKvVacptS4Vy5LR9>M%F6xd?uPNBOwEGrqkYZs_^(_fQ$HpZpmDft
zJaDvMFHL<u$w=|iJ+%aon0~}qCKZ!H2z3u_)&L(iF6kkrtJrvi$BcdZWjIsed9azO
z(6-+5?(l?J&?cTuq<y?l6f1P~LmOxeKtDY~@9N644bnahZ<ieB<1C-ul&awqMAQI*
z&wyKuKg=M~&M!*C{jAjK>%ETJvAX+p?ybI$^}~O?SAksI2!!m_O6B~*lVbQwo)dIm
zKv>x$UOLMI0sR#U(%?q5vUmaMEp_^(CKS9XW+SXGF9B%kWep`IAC6JCwCc=JFT(c!
z!s@}n!NKzKauR;`9P7nOJ*fcsfq{YhJ|kdiBTQzH^YimFGc)t{=39AJF)}j3Wslty
zM=?G;{Kn*M%cpS6YiT9yKrkxNrw|8B|1bYz)BHauAdl&Aq}oM@r;vbpgWKqYJOe07
zg7byWst!ph&M6MVi5-&BVCb~8ChmfTU5gM&X^_TsH|`a=kt*acbL~}!7t*%o8!_7G
zy^9<=i<S9Vr^zWk)u^}NcS{@+KYLxGbz-7hx#saSVYA}CI4|fgsty+sqj`(AS*@~l
zhyCKiT(r%)4R@6`J`IuI`4SOXw!lL;U6TO&DU^FJ`n$*SeGA(;O&aD&DWN2&+IfCY
zZ`Jvui}S5T-!g*Mqbzc_;(PiCS@fhgx%9tftgT05NNrwX3{`Y&5;y*vAj0cxlJ<Su
zlfir5`Kli%;=5jW*CEgNW!<PQ^6~|R=`BJ51(_$hR(ufKG6B2w`d5lLL)v7$rygx?
z@$d~B(UkeN-Qk>V)ZuUTkVg>BRJgQJ;wW9|fXUp2GAE7N6q2^Snd`w#;KWHSzO8wO
zA!p>lpwAs5!8kJ|;yhHs5e2C4+1t-b>j3SPQ|_~_50vODt0x{tf<`Tmr><p82p_J$
zp_A#SOP)U|+N~el%)3U5T($%9GMN|Oe{AdKL@nmzl|LBwNz37gOj-mpDpOZXA@OmR
z#p$SirS13u`2@FlwcM5(zVlY+2Ti*0W&?3yz4e$ve2@7ov>oppKVROV8tf)QoGx=^
z)vOzcKX%n=c0U;|P(Z|PJ{AO%KrZ^w6*G98dVeCt({!2FeB-bqM?bVww=m;SmyoX`
zeC=bY`i_2R7=n}C5GRlp8|upH<tcgj_T>+GW{M<=SND)J_Bj4Dd!Lo2F!%zPrsg?1
zfbSY9KnN^vLMkrgO-+pCs*|PjLvl#g(IOa-vQj{!G|9zsThJUVH73?Blb2kLGGF+*
zItI}u=quwD9&+T<&S)PHLQYNbklCW-%HZ+pml%U?2|WM1oY>21KPcCIvTGDi38sZ3
zve`?p{AdEQq*j=JtVc^haK?1_=B2py?<Bpx;d&dhvbuVFd>jYMGL%+UR+eFP!Fz1=
zhr{gXqM>Ny6(uEK!GHQfV@UWHV0qeqy_abY%)eeQE^T9T97ienDO_O+K6K~UoK}qK
z0bZ3n27`@xC%r#g@qcwS9Co{qN5_|PuhIDU8D-BE%NZ(ae%MV$gvX%QZuvK1aYK)k
zpw02{UC=-R?PAyM?TqyKWExK6$!@6&<i#?p4_s-Gn3i^;pj89p6YjL1H6JvOR6Z1n
zmRrimilddEBP?fFXpP3z@y)Z+87zukZG4xGxdUXk6F1*3!qIWJ{iQ@SBp~#>vO1{e
zGuez06Xual>h*o%>YOE;pfsz>%q(ySlmKe?TVHU+NJo~vqeNgzR3&}GrKXyUW&2xz
z>PsEJrrYN5v_$u8%`fxrPiubVXT#Il#ydvJkmZthtQh8eGurR54Eau;rxX8cME|()
z>1ylaw#D~rDA8>35Ev8eFcT2U(JnGh*UcaiI=xeU<XPt-^lAAG6);vfXW+Yld)=}b
zke>(6VMwSunrmeTo+?0UOd=F)$o)>Tn~VqEfq(>;HNK}ZPCL&`wSKuGA=Rh>1U%4G
zpImW^nl-&TfQPH@Gxa#|ii6162ltS}ZQ<Jjn5y0v9@<IdlZZ}v3%AD<VqIIS7dDl$
zS>RxmH8EVH)%8%9kYtRQsZpnnla^szIcdpBFTiW(x)a_=f2N5GjoJbS+KwS>Tf162
zeqeo<K|q3djcf5iW6Ft8pP6%r!K!esfMXeBlE`+G{_|(iTdBBqFw^34p?NXFSaIG>
z_#QkCUa>h{{;c`CSKcu`a^XG}W#_tbY3y`l6r8Gpr03^JS3mi$g^%Z5*|D?DPTT#-
z9%5org|$1T(54VuclEW@epsh!W0cUo-p!A~Rg6@c;*^5WHn5k|-d4cm9;!AL*5q%g
z&WhwNQ?28bKEG!OPsFmM1(C>Acg)GaIBEav2qDK$@3Z#E(`Dg_3e4Pw*RG!Bq8Z??
zH|LrV8-lvmjGWb02gWsNO`%IP`P8?oOz>g4&S6%V<%a7pHmhPY)Kx2EWq$qW{4w1y
zCy$^l$%TM7IlLwv9?uSEtbBcBX~*12gJ)u3WOaP_0~-5_>Pmn54~dDQ0bb**63h%l
zhO*k0Z#H5mCxSM0cfL;g>cVUB_KhnEd^Xs}NwsJ26O`<=(0aXmZdp2s;1KuZC7h@~
zYozW2GR33gODE0tui2zCZ=;4q*)9jA!UW7I(7PPNP{PIV>7d0QL=n}7AISoQhbeCs
zL2o{UzF_+AO_u)eerSHAA)7fY<z>Qlq}N_6(b}W>c(DqWbPJWJFsNreS-;yKpr%if
zU^KF8*Ou)7e(%{q|AM4JU(``&y0S{fulMweiAcS$5Kvr1P2W(qQ0YQN!<1Z#M?)LG
zSpG5QgNC)7)iKES7e{KKb{(Ca&jT~WXc7Nfnn77bqiV+asU96~9caFF^GeKr(h1Ga
zPI12b=|Prp4Xtxv@v>6Cj$%Eeh*qO(R_3x_YxKZt>4UeW=ZQ5?RsUd1FQkfS9ylN;
z?zG#pwFTEgUHEsLiIYaL0fRJfb;V{gsZVXZ;{7qvsP(bzZ<|O4v^@=VoCJ-%#H4-f
zWK&YwF=qPVwd|(kX3N*J-oU8mzlY+%ZU3*BN1P5x`&%SO9~lweSREC+leg}^!jz)R
zhr^&TgWMrcRwm#7ULcdob!C|n;xz-Mz$foM`ePNddgM-lBF~Y5*evQ*&YFV6MlZqC
zG)R=G-62oi&~L+&*o%xSJ-38MHB)CcCV<eS31(7Z9pw~>icnG_UDz>vOO`N%=@9V^
z=tQVcVVr<82tSvmXU?~5Esx1fY9w}Dg~fqvlb05Md>T&pWjbx-NH1fhM=Yh_T*B|t
z=sp8I$^WwFa+yqgOshbXd7D$aiFe{tY0eIS-|l8<E=pmXp3y!ijlAlq(a@Vu*baK&
z#+4Y62rh*m>p!7b9TQ&*5Y{k#H{2bbRIS;ENq|#qx?@RQNMV9<MVatN7BflQij6yn
z8f+`AbhNI-gO?F_$4p{U`+5uc=iqMkm%WEkDeg|{CYiPCEn#|xY%+7h>Z!maRG{x8
z$Jhr6xOl@qy8w0TJu_V4%HnON^4_-R;hzb2_HVZA5C@Ci=W8O69DkA?=sjf0K=U<v
zyIyNOSZYKpF&H8w$o$I<IS?*Wr(EVE$t3UAxEvKzN_l&5Lrq2y8yhkfUSIQ;Rq<T^
z5K#*}9FqzWR(W8LaU}a{($O+CA7Je0P0whwZ6FSZ?JtuI>rBqU{sHpAVez9wu>>Nm
z)PT4&o|XVyl@ZcO9uCItVQ`vObU=7M39u|@UMv6R1Q_j>8xReDhp*L=syLOBf8!b$
zt~TQiXUBetM&dB*7^qauwk1eE(bluZY^LiR8JkmVV)ed=X<lpFvTb2_m`MN;$j<eV
z>03sSTWjeYN6(+y*wI~>y;MU3hDy8f{~zAO|EE!GhcHDZ4UB8ygMp3mR$#REO-9>C
zQBkhNlvaNN&93mom}4T+1<$d1tYUttDEOK{#uV|i;{~#rl{)XhBCHFI(KZ3{?VI1M
zqf23t1W2`!z1T^fXQ9vT@02BcLzNjBSc4lAF%772J(E&Y)Jh#(`N_oJ$k4FjFUV;&
zEM!3JzF1&%C*KUMsd@GF+e-o04R+vhS=sldkGj<rBBnB>D(G}LUkwT_w+&<$GO)bk
zB`Kk0E~6LM_vO;iV<sh~XA<(v$*V0XZ?CQ|f0Me<*I+TxkSXZDGncv$FC<WW^=g^<
zN>1W?;wk!A(;81wF%-i^W@lq*QyQF3I6`<Nb7UP+Mt}8x9Y)gj*MR-3@3%dngTAef
z0lyj#G)HKs?l(1nKpaX4C@xj)GZhI-Z@?l2Q>j)?3<`XXIj8o-n-$g-Ccd}3#z^IV
z>REw?08>@n`m`9eE2xb2?_Jlg6u|?A)#-(R;D`mf3ceO`N_H!?df|cL8!nPT1ad2$
z!nL%|#ajWKGQOSOD%jQo`%d1UqSB_1;X9HvOd7+Y=2>P|FjY(3H0KrQm8QfrP5Mgv
zclYi;xb!-U+P+(g1eMu6z?-yZydw&qRsSXf)$v5jk68GPANQBl?jpMf&35L;pla0E
z&K%K+HWQ1V0XkzCOf;fDpGx^nDsQ@QAoj7EMS-&4`llsAo1C3a(Vp?Z-&sOx8)alb
z!)WZV>@?C~?~{|-{I!G7Y|BL<)uqX73Y!V3{}U93hH)85ScH7P(@QeL4>9KbI2vxS
zX93SDRvsS1eg&n7`+&q#UkwbIjVRgqjwYUEs^vvu!X1cX*|s9f&Ib6h(#sHCjx8_7
zS7TKkI4}ZbM8BV^4P3F6XHCgR2<`p)R$aATUJ~lPV$SNKOi3oaY)q$*ur{s3R-$SW
zj?prXn{Sa!xU@@XojOlmNaBo@{1u7b5bJp6hu#OS)O#t^2iIZP^i?>+zdfMGcWYdP
zc>9}5U{;MzR1_vu-6v06YECoR>QJ11Q~<7tc;B*nCs=CCKvB|rgE1!$9>GMVHZbDP
zH8G1{P>lIJE??Z%e8xwtq_T001SZnicp}`eD+??(hLy_qM@sGCxEtw)3Nl7LX*+S*
z|CCE%+lTG{J;_qoX!%0U1t6DbrJ$qxKGe!-Mc3A7H?dUXw*H$VTDg%?o6o}OzP#ll
z2&9rvK?(V5`3K}^6=4yqV3NhjBI3w%SL6U`G!yKbw$3-2e`wHgx7X0Ni`;gtXL1AA
zmQ;(Wt?X5_(`Xeb7nMsv+Wo$pyPp+B$wgD%Ow?5Ad)(cZz4F>01XV?OdS0GRc6i<O
zYoT{?-TjTBgoLyE(XvZwdsZ;aZz?!dZB&~N-H!D>t%35sKVC)9kD?L(W~{_^0LDfC
zQFD6_wxg-W)>Uoos;_N^4Y!tEw!Re4!fZ7>be&`1NjcWPUr4+{v7CmKHexD2J#G+@
z{$GP-moKUEIu+_^?o?j*$(c|d{Fw2bnNls@lHoK{&WNTo&oarJc-!GAaMW}zJ0GVx
zH@=7%#U?^iV3B}C(7K^}cw1mSL{Emw!8N5^x_%&E)u{#<u&^@&mp-=Tv1<#ARHb?I
z&D1;@a)Ov_$!OmJlAhyNT`*0sj8b6Alp{Fd<D{wcMEUxu6hY8(+&*(&)aMR|4IhDR
z!IVAGv;br#!!@!wld6LM9i(>3MjOvji=$eu)3iif>_~v6naBqI-9&UqrC^GuZ|9Ug
z#+;v_{LOwPjS9jPud|aP6yK{Y$e2l$#rQQ^Px#PQ29<@gg%dYM$zhh>ig&k0b8X8+
z##Mwy=hLSO9jd~l{?xr*Z6BUpC8HGpy3NHBC#i7in5FuRFX6uCwjrovW7_2jcI$0K
z%S+M7r<t<i!_Ya)rt;F#81RFSBC_%8R@HyRY-{MRfCW(uaaY6lR4wBbI42UdYQ(tQ
zU--w{`>d~~%2imXO8*wX4`THISS$pTe3die41Vpk>x{NBwl_!fO~hqbdW;g=H!w)A
zjoa;-NiYXGjqoP_ayiya#*~lJML91(XqrzIsbfxzgM0oFkVoqykX>M?i!4YYx@_7m
zX`;yG#M~hs`}W5V842bzMG)|ehg^JwhK52^nVC*lRy>yhl8*&K5do3fX(b2VP*rE~
zJR;MbMgSd0@imCig0cIDN=pY41e304HJdP#d-vv+iOoaf@ixj1fvbAjJ<_Xd#OGX2
zq|vdA+aMEsMVQJntB^WD2nT{wbyCP5m-hmt)~mU{KC=IlJYiuzvj5%ux$Z$KGUkov
z@VP5=($gETy6ag?_Rlh58OefKb5YL>-?N#L<tx0p_MBK*i}8=~HYFrFjkDP74p!y-
zywuz-777dYJpuk%MC+wshK2Gpveb*);y<w4+RHOzuD^V#8Rs>Kn_bmfdt^}FMx$bb
zm4yO29e)1H({QW7BZka(L$;4BjpG4Y+Vq9}>MU8vYirzWTPQrOoyW-gr?EmF{o7ZK
zwf6N!YqymornXx4x(H;TbKT`A8n${8P7+Q~>@Zq!@67XX?7oN8RfIFU%N;hZ+2SIZ
zfLklc5>@Z4gUM`+kkb36Cbie5rk@7)7N_-##Q*?RfB(P{llf)3t9RB6GJV}@j&TB@
zm{*zLcpYgX(jmpQE+G`gb*y<P1Rh_)tJEt@jh67xOEWcy4HB8CMhzaY28qm-Bi2)$
zS!33Oz;K96uzu@pE3ge^6DNK&r$)R-#y&MlEB5QSbb$p!b1;xzLP3&H4+$AS(Su!T
zTyI`1J^=7+B9K<IrMRr_F|TgcEL3B#7r9HhagPSYr3pgmnU%q^sM6-qtIccJE#I0P
z(Qw$4BlJXQ#8`oav!5*FqGpGP;LCc<6STHqK$aZ&Q3CM~R|lwQ(RcfPOpu|tcBQ8P
z-U?7$z`UudYMz-_pjYY|VVSY%4}k)SP_Aigy!_~?t1VgFyoOP;g=+ZGK+jnbY9i@2
z)U8Uu`?6}6aAtE1YI!+!HoAJd#PK7HjYPxx=Uc_UFZQ;r=bev5irHsSPg}0G(Nrq)
zlP#OJOwynpOfavRNNt3o@`~~tAwBUMBg1^0R!8UapI_f7$7QUQhw+rU272da=@m8l
z{Wdcvx<`;1Ek<<b-B-s?;UPzA&nx~p;C#vm*C6JAHblGC21o2oQl}{yTF2Z#Ibf_f
z{SoX;E)7S4u~ttRY@Q)Qu2q_wM3927Qybu7LsE+P=9BT5?>j@;3w-c8;A^^87-#jL
zuVleiorA5KvMkdxvOPvlM~dCj-h6~Ky{)^qs?n-#Vphm1DY*E}QWj~0S-*iF*|g6y
zX$DE?3ILAM&;-Gd+M%~WV{!t04C~V6>pjaP<paMB5vcd8R|EqE!?)t=aebnC1wx&f
z-3q|d-zI<R{Djv5DroIXalTC-_BbAHy87o*{=d$he$>M{t5dgpRcMqq?@p11=nEU2
z>rTHuw<2im!T215<%S5z=GxByN-w&`e>y5$R6Jw9-t80x=zI5#K3DmdPHrZ9Z(Jx3
zPbE`R>L;$<gG{d@K^QDDA&N;+8OtVf30ViH5BrZXX>$%sqXz}&H(1{2SyLuUu%GB8
z1lo#B=3+gfX7OCKhLh*Bp6yH#86b67i5v(G218zK59}s`f2Cn>#wt}wNpw*W+$axU
zB#U%N6wy2o+!}vCB)Q4kk#OKU8u;Yuwq5Wwrdvy{-zzvO4c~dYKXy7#RPxtH5>95*
z>-$(Dnx9b__<SdcS$+Db9ahG)zwKckWuhd@vibnGJx>l7E!@n*)#2on0BH$1;dp&f
zz%3ykn`z3O<4##_zCIGkv&^u3GpJMPVU6{0KMBRZ?|6~AujnUA`U$LTSN#_i4n}C3
z1qr$@bei=&JbSfy*ssGIj*PFV_~kf?gBU3E+5El6*2G8q9msX$BKu6-%)J+HPs?Uz
zlEi5|LGd4*XUfWCG%EFT+0!*Db+)D4C$&f)A%O=aVwoalZ@35$LRaJpEA?Bv*N;fF
z+Hl1N*6ywg_{q|FpDIiH2HU-_;vLp*PtrZ2{a<TJKW2IJKmCm{2C#rST0h&HC(sXC
z%bK28wcQrjLTbGqZ^!Zi+h?|5b;HTl^XK9xID{WmtntnBrS*>f;hrDN>FF89SSCi7
znrsaACY}Pn!^ZUrS$xj7x<jv@x%BS25A{>;F9W@<gt9ngD|>_%GWn8bSOFK&)1~aZ
z(LXR#wal<LY^flGY>}(k(dJDO3ZX>0Y>1%|&MM)1Qk-Okd-;iS?^3`!^*L&RY;l*G
zU{spV*xj<`>fRVb1s=3J3zj%ULH1bkTk&5|X%y?lj!2NKzeqSFj~=iRbV%96B<Ps*
zuP>lQPM1cpGiprL3?JA6QL{_1TydetZd<o5V=8@gtQM(mH6WeJT57<QGF?^FKGv3P
z4Tja=u5@c*J0nPi>e8B^V#ZNBUw*Bq;*S|2xv+&wxC3o9o3^ku^Z;8ub=tm$M=R(n
zLj@mGmD-GQosNwwSk*Tn0-d`h5s>^#2Ka7nNBttBxnksJj7PdCig~^h=T|=<{epE<
zgiz$UYl$w}0J2ewEN6C1?N&TbbX{|~d9m7%&UaXl{b7Ac%$}#?dPa6q;OZm+>@cMs
zVl<AcZC@>xy1Z-76@fX2t8a$G0Z_NvQ?1vtF;CbzcH6Nr?mUkSSL}@XFr~8{ZJQAg
z&9Rz?qWd#Evf%=`OdhppTDvc*7nl~apwk<rTA!E*<${iSXUJRBNaCkhvKJS4W~xoG
zDWKYE5D)}I=sBmtafK&%)V%p7`iI#f!qtpq%=Ld44>VCL1&Y{&-<`EZz}np?-TJu5
zsc9udE=0O_<!E9ODz{=Qxj-kjH*|G&Em=tUw#smDo#A2{<_dNNYPiByTP6+l!^*(t
zcY-8uui2cGQH=7iu8TAy7OIJZWlhagIcV7H=*#3I)e!*;{U*(<iDq$WX%?7Cgw1Ar
z-gJD)L`gqR9mBuM?tlUR4i{|I!i(pBvI!T)9NuGF$LE=|`$YsnXAh23B<In76t?{-
z2yo|F(8cN5%J#!?*>lgb*Ay*(AIBFn?ylK8GIpO0j{J=Z2R(Lk`>ymjueSYRyvGgT
zZA2T*b=S?|+otGq{)fc3+~dvHw;n7V+v}Z8?Yx`W=Qmx?dOuN{x7WKio*)JiUGo;#
zM1l^f%mjks*U>5ukPGjwo+|X_vxd>i%*$jO!0XKsSVLFPYpTHkzWF@1lu93Hjr=B<
z$MxViSG1@HWTcOt4Ip5vc)f8zY3G^>s!Ru7w9>&<W;-8l(mmU!%y@(yj8^)4b#H1s
zpr-!xeeIcLZgYRw_4kJ}>bG=GT`a+QPjbi!yogp2f!U-8xb%pf?p48Ir645-DG7Np
zR@0+y@+x%vOYc|ms+$fYnXaA#+zQBji)d&UG4Lrd_D_|JnBpZ<pEx~?1apx0?85~c
z5%1`gX%w7IjxM!2t!L@2Mqaw0sU_HJH}Prz*2l)c!$`NR<1bI3R<E2%V}k8sSZy(h
zjQit7l-=Q>qau3q>-rQiLPkb*SMQf)BD6xWPYrS6Oin8;Cn3Fj8Yn*4DVW}9pGHL4
zwwqhiB=|HUe<x4+ePa#-U9ofbkig^1>se6MgrD^wXkRGeyH};}5pdoIX-`qrwO&ms
z$If*nt=?|6>1;JQD?L$7wc5d-wA$*ibN%shfMhGx>+y{=e9Fjg8Cb0an_6u;z6P}C
zZDl+MYYn`27FH-$Xo^3T_j~j=+kK_v(rebozk3=ZV5e!nR@PMgnQHMvo_-`}mlLrq
z%a>fC&)TiM`Tg+cSixyP-E5wDJ!1N_sYMi*f<kFxJ@H)LpIwRfVLv&SG!Y7cJRB0q
zs!Tsja0y7fotk1r?OaFHd`&aF0<<;F9qCO_N8d6K3jfX-AQIX{&+p5rmMKi)$&|0y
zt>0uq`HjbldS2Go;l*Sz<!mmfn11qZ@3WtoV(d{SRL0#Z&@5LuEU^}<EKJ@|T8L)1
zMsJd!Loy+SrC9-Dv!=xwV3l|u9B}PkIKe!>iY0H~(nCJGf(dJw5C=*R?W}R|G7TeU
zR^^;++9$Fs9jQu|JTr5+mMgqTr~2qCtf53MQF08lV+tdN+{f@0Au99)Eg<!gG32y-
zIWFyeLsc~G-GYJ)03_vup|J{lki2htLeewKnO*Da%i~ZC85tH<ovoIpNc+sG0_Lli
zh%A#W_HkIf<8(%l`HA`jILv*jJgAX%>%CCGo1Vu}@+~fl;&7KV{I;yd<LIcgt(%O|
zC`^d>l>!>7n`(QKzG=Pxh@&;k<49L1?~7)6+Zg~JqXAp;r+~Yc@NwP0m8&T7_kUO7
zvthi<7&SF-h#IG8{${hKE5RE3>(|0`oO+wG$*=7-ZLH*+1_^Bvq$qZM8<<Q-n8>y=
zEaesR_C$PHwOwbjxxjgrn2BA{Osm^x&RoI1fzAtWfFJ&2WGS$H)o^QT+*e>*_0m3b
zldEQ{RLe6IH#vA0l?&Pypx$F&-BzEW1NKo>Z$nuU<Hs(SmFG{;-cw;>Uo_R}ZGP+c
z=ZE+N6M`k6FpQ`V9525C)NO}tnHW;}M-gfIiI?v$Z~-Mz9BX^H<qi?L|1<2fk$u~^
zo4Vgi_I)pYKRfO2-lWcf?D6m*8E^f0=JIhUc>Qwh=}*je=bP^i8yxO`Dz<SAd?t00
zWBi_apz&Fm4-1)!(Op;J(i*>ft?z|4@O_8UH8!}m_lEW$kIHjlLwirBSxu6Hb(_o5
z;T{4Fn<0`yotHgL-fKLaizU$HDB=yD9T!2#XjFomK+~O{v42?Z@VQF&tHGdj03y%z
zV6yiw&zd2r>EUbATjT6p7JcAOB7|G6v;P=Y6~VsBYkF@AE=i`&hke_0&U2dkS8^07
zON&+e&K?xxzv-A^dVMu4WuN-F#VgPBn!#A7|B0h~KYIHSh0Gs(0qu|sv&uHwence^
zI(UG>-hopV!~I#J2B&OKiCL7evg^foSV&(?BbQtLfbC&`G=DJETe98szCZhK;fpBQ
zG5<9f(wFs-<cmIV%MA9o3;wM#m;kS3b$%~f-CJ&T5;c0sI!))cU9P_EerXRfdmpPs
zm{`rB-O30|YFg$^O0up;q8~_8lje7~buFy;MEnE;4Z><Kl^GC<x{M=ll=^6Sp^^$D
zy_jv;{d`=Hc~*>}p}wzyh5K<^(R}@SDq$L3fzWR;lJbmH=rRk>-uL8YHQVPn3yBQ!
zI5VWEU?5=BsM=pt_`B5TGF9m}It5mgblJ%<SB3nfW{s7K_pdN{e&F57*h-uIV^Y+K
zpkYx5ug@E4M<p$CFV#>KG}zk=`PO1@_k2CM1uGRa^YjZVx_FZGCCFGsPPKl(bb$cn
zmWun_Nm)S{vHk)=`;My=pL1ARx{S7|VV1wy3!!kf8n<jUq+Q%M9?Q;2=ZzwuSbtRe
zTcTmCwP$JuTI7@;zT$V{N?lvWk_0(hST`2smjxjpsC<#KPzi|V$hhBard1>EmKrxC
z1=L0MhDq(>A{6Cf^)u}wA@cGBDQwM0DOk;0Yho>ln>A>!qkWEyiulDjq2eryGI78&
zs%#RWo@}bhg9;7QZ|!B>z|T6EqW8+b|1e|Bsq;gA3&u&;FE>g}i$T?x)Te*-Y%$ia
z2lQHUkJ4!+m^+n2RXFj|EfdN#O9R6}${5<hrP~8TUaaZH`2zJJDmDm-Ve<BZ-Abcn
zu7L`pM68OX(q?(l>UcH^d#=(b$}$C5NwTnoUM)@p6{Kk24s=5N^CNv_@3&)w(44)m
zrzNxfU;e@(zY|y1;H^S|$%u0aOjmP0NN>NRd*R)kC?oO9crO8Jf`sp5Tn?M&wpJTt
zgaE&1m>;EFkGfNNrVz&<{`8v;d~k4bodTyt6Z^Z#rShotH+(Rgvmv1&#mD->9d-Sl
zrNls4MJQ|xA-}3dZ_++NQ4C)g7p<g{O@ElGeFn$*Tr&bhzYtz7Fee}E4mnJr2Kc2W
zWfj->SvRr(9V0mx3MH5)=u2+YQ^OMjJuUV7cu^1|$G(Djq9&}`DYaP@%h*R~85gFF
zzOqHIA66)r$&0RX;_4rEtQT_CA`x2i774FjXUvZAUDNicM%Rx?(P^f~;noBA;%ev^
z1IMg2eyqyrW`t;$!&={hFWtV3w~lZ`XutcUQ#B0<4yIBvdLxBO-e1-c{f{?|bV&>%
zdC|w;+(GcV%Bq;fcY5<0tniZE{*(P5U{a?ya@qiKoz?TgF8SH6-%KOA`RF&1BwFWb
zHusawNkdbI>vLBYk>BLSv7`a7>GhP&tJATY2TIp1*`mJ7tlA=k<G`U$0;R)cI5EEp
z-}7b)qfau5kju6oby1)D`f@bn*=(vp1FaPr5kML8^qfr@y5=)rAZg&f9L7-9`F91Q
z$$;%TNjS)X&~yIcEnFpm)87()=EtFa;U+;o!)qouNj+Z2;qCxRW+KmH9RHT>qtQ@3
z|G&|T`dnKpqZ0aF%cwytWZzF=s4RS*^1B~I-YCs~X1ad09z~>Ab-M0!3v=J%b69s9
zI2;Nc6!|4@5c64@4)6A{ka2j<88{FCE$6~U?MVeJ`x}BnP}*#-_248n{Ff_UiFu9;
z;2c_EegJ-!*C8Rq=ys3I@g{UwWN|9GkC}+mb?QKexy|J|M<-N|%Xv7*D8H)J>|(bs
z#DMqV_h@CC-zI9%;|A-=CDE(jVJvx&#2UxJAU`w7_x-|ri5n94o1Ap!j;AC@kOV3*
zhwTLp<%`qbgH>jtn+t<8&+FP%($144e^h+0{U6i$FV4rP&yo<wQl9KwI7xIO&sn$U
z(AOIlQ6B@o=KVtM5M4iygX)dH<b?kS4uijL2>7{m#s(8`N?}QN-G<%{KY42_C3`h-
zXyqx9F=oMN{&uqDz)X8|(;xqzeEGuhX<Lw5ukDD$GAp7kXFF?XfUV+hQFAWp1Nm^7
z?dxSWmaaBN?a~SGMg^PoI)lckpyNRYb-2eD_M1V;Vl<zNc_Z{rpz#<(K3S&o>@2%I
z(cSI$DnI9QhHL>gmqYgR5c!OBRww(X1nLO7NV9Xs_;eMn<pq14_)eeoiBkedn|!}b
zlN}^8xq;ng67qD?4(iR=3d|ds39N;aazQ_tq#xTzY$?w1e1(*Me?-SV8wHQCjBFS*
z-yPJ1%v!7{WLXQkJzSK|GSMh-kqAvo5&w`k1l$k*5q11eMBWo7g&kuNu}m>;%PAP^
zp)oHPZZmcRBJX8i%!BlN6=*m|yO{y!W%V5n<3(~?vMIE6tENzV+L&;KqW+34_sEC^
zf>VhRlWE7#NSPDNk=(&nKQ)6yVFO{p4CEjcb4LJkk{_)_?-q*Ef~k{aBd4?}kQILS
z&l?WMc5(%W*=ewP;eD@kG$#`K^b8m`UzDa8Q<!Fxp2=c?H6d+Kj!_0c8kS_4TD6sY
ztQ$Uv9nHL4BA=%!eN8-G%gQI5E+R_+P4~_iwa2*^i}y_az|O&^X5KWjlSGr!$3)rz
zDN0m9#`q0i3c(;M)MKn0R<ge>xkgLPh$vp;vB{i>vve;Tx0f&QPE~mGhXC7^f_93Z
zEjR*~OeT#O<=8ZpO8B@|LK!*Out2bV-W-7m%0Mh}&cE<B@SjEMu(UYq9j_p?A4^f_
z`MT}A)242j7%g<v%)_UDL%y%L?e3$2cH1apGt*XaXXsW2fV~VCT~Hg2sE-dNFnzcC
zEh%Mo!6$(P%GB))+#WcNX*RS5re#AHFI)R`Ch*DnRzBXEI`kQiE6Zb=!j1<M_Pj|s
z&!<_LO9clE_skOH2fZ-y6;r@$I-?zS&SSMaxCbr4<~kf^iaEqe>KZA_oj=`K_Cb{L
zjRS<<m1!?iN7_aCl&4@0N|7uKm0JGsGpaNJQ7Z1iSUmqRA+WJ*+);}-AK%)ZIec+u
zqg9U!B6F0x`1FL>LZL|}{Rl?TY(3314~g6)m6)?Vr`=+N!LrK{Pg9c9Z+YE!+p0*?
zh>(1X3?Nh8*U=6K=Z?Y}=0-ka&E!BQOQ#X8rcF6_K;btA4SqpsE+@&B<EHG^m$cTO
z@_sTrE_-7wF8jlOoX%M?J}dfV{QU6tlh-rm-x>@|-@IA$*0^kQ(KnX`$X*3IpS&<7
z#2|R{)6-6u{fECy42bzxr~Nu_XthZmPjnxrRfb|3GkJU-JRhO)L&p<-N<O!~K9Zy0
z?F!4ww%|i@YL{+PRyE?rh6WNo*OJ1*U0B2u1~9$3xf$2z<l=%+B-GT^Da3hQVP5_j
z_`~3^48Ts;XTSgWAwAh177IHZNTzJ0vZqExMJms5yc5NoZ8k_*g0EBN>Lw%M5Yf)3
zw`*gk;&KJEkN6$Os5>0cP+I`?LmN~e{)gM<CW}dOP^>I9NSGXS{QmaIXG34(?#y3&
zGGOuNZMy^}U%AF4Ik}+3&s%IJq>duRVFT}<y6ZI84xm^gOmNCnR{W#hi;~o9Do7Yz
zhM9l@sY7ID+d<Gfy4iJVoLumQVCITTI)<N0&_3ZO1aSB_CN_)G=dSa&q~h34?Nk;e
z%i(uf%X9J$9|K6)P;6(iF42mMXV(}1)Af9fswpB7kt|}@za6=P=SkNO$pu51ps7b6
zeIVz~3_7AdyVA_@ZtRyyS??J1mK`hUN$yAezkvmlSmfW&P!FFKr6=E0eJ4#qxz~`I
zTov_RBUyP=myTg0?>Iv}g=$Xfn^5H*eCiN%22-2(T&J#>Y~D|Oxs&paI+(ty5@c>^
z)!6t$E_n9wlviQqN=>@Tiu}7p=*!J1DO`5)wXev`aqbj^C-S|hkI+orBpkUQ8OouT
zhE&Y-GfPLSWY<fs#?Na)Kk#Nvr&+VqzvWw~w)Dg6CN&3cfFO2iGq*G%328O)>Be!J
zEzH6{(@r(v&S^~_6=J}abJlb2>D69Wd$8>ejtV|ABLyezQS}X_vIVtXN=T!|*ym&M
zolg@pyWy7|y!;*~(gtlz&mF-vuio~9(J}Hwe}@xtVXyh4>BUWd0nX>f{f(B#-I()q
zj>qZ4$SgmLzjf!K9jpvTg^Jq%ri6~xuY3%H_1~;}gd7%&&b2zek4~I?_qlYrl!=^m
z0eYC9u4g8r`i(G-Z8Qn7G!<C73{E`N!nM`j<-)5iizE2d0$q?V<6v)k+$-M0;NaBI
zRcpm80pF+QdqCheP5M(6`MtO;1$V}Oq7nZ>duBp0LJv!2EM1p#vx<`jtxLlZK2F0r
zy>I1q$TRQU;0QVM2WUDLaWivfm+QULB^apaQ>3Cle^~{tpz`&U@6!e8<>#0*1orx{
zOXuzm;5i<j$^?m))`8>bQ+W`u$}li@7vOOi-k0K^ATn8~vU^|0*qbGJLM7L13G+pL
z_X>A$kO`@wTM)WpLIO@2gq#ws%&ey0R?uRl`al``=maf1YURiR+n+0RvOBxLbmkDH
zAxFaC(LC3bgg_<xd3@Uh>FOi+hKM*5?5{B}XOL}5I`S+lU)0v<hYY?Bk|2r5$0^>z
z5Djkwv&wGT9B!B#YnVKoTFB?~PV-a4mWqgeDNX{UiRJ)2iV)?#Vw>;E6**%SzU>Bt
z_GAY;hY7Lt6|TIM<I(yFBR>cg50Uzu2%kI52;Xh^3vC{zT4bei{KXluHr0$z#NcL{
zE?*h>9UudcF#E%yE*vTV{6U0;=a94OEn~G;pO91g0SPy$F|dHKKG?`AtD!m}u_;BX
zB3OeUg@*~p%&-7g-@#n2I(SjZoxm)H+j+|dL9V&cwK*gr51!ggB_&vsvTJUbi5uw5
zUTjP(K~h+aED@w;XPlUj!|Gy5F`HuIy5QNt3Gwluku$;Aj;@b5@vYTN%(%OAH42&C
z`b0Ny+<*G*gaTDiQkJFYl!qh}HcwvWsrzKML%~WWn3+>Ic$E4<ki_E8d_oR}0r7xD
zS~Cw^d`V5eCj1z(%cly9UMJiHd23U)=no|P8=uD(rmp7Z-f=eI%lFrrB;u-@>|(A<
zZ=qjkS?NMv6<I!a7xS~e`})TFvtfY98`PfyJV>GUb2PDUD|^Z5sOZ44QXG=>##7+<
zg6x0!CDw%4rdZ0s)#2ih5X3h!vR8kK9&Uf{iHcXa9jcME(SK2_;%O^;I_R9aeSU9!
zDQk0=&}5Ow-8h%j#2s<YaGp0jwbP#q0%7{v!XhMF21u{~sAiX+;1{Xk^S;lMta36k
z$bZ*UV4QN@P)eaEZ>R%u=C*I#)+I>z`M-+mb)eX#+y@@O4j|lAHOv&gTAIR3+jaOE
z6l+5TVxR`;h<JA{J=RK6gW5!?@~J?%nBYuIFdQcM6r>+S{axbvMDVx6@CG%=MwCia
zgj(Y+>8T=gXC({NgIUw0Lj_u;0u51vLZ_+3E+-+m+&9PsbaCB5K0jY745}c>G9rjF
z%!e#3?a4dz4p(K~(l3}4e{~eWu>l|kAE}UQ-1j6i?C@$DpD8C;uL05rmaePCi$R!R
zy_6O)XT31fSTX1ELeQv>Oyv=t^JzC}(3Flp60Myp8Tcj_^e0)W@|c`}?W^-TH3&nH
z+W(xqrM;>^gGD;q59Ieu_53LH;$6Bk(h2Ii1EHML{k0GR+vS4ZGb6PyaKKvx9JBIK
z?LfZ>I+<m4yLFf9&D3>K?W|1c-^ox_!NEU<L>+EiEx&yxJ;ZU=K?l!wP(43H?ECqY
z?3jncFWxSE1Ct2$gZQb8!SkTb<Xd9zWw%KfosQxkLG6050sMn1SvIy5+dAJ#yjGBD
zATBxct?j#bOO(MB_|yrp!*TTp9E$B-U<2CU=ya~_n5KZd47x0sL|griUkCv05XX?+
z-XUX2ns}n3P_A50YLS$7Vi~``$X0CU^ByZ8I`i5Md8GN}=X(?#)8Ti_&OVU2i6!K1
zI8xkQR185Qx-+_Nj-eRz$3%4|WOtj$XWtXz{(e>f(^(DrSDh~#Pgdhya$;?5S89D0
z7uF9~?@keEPML-g*m2a8az7y|<PrzB)!v%z?-!o02e~@9tDn6DMs@JlI^UV@pANiY
z{369`3Vj7|!FVGF{yR*6U|DH29bB%*S;a&?roT=&@tK@${dViDU`sE(Jf*W|B@F1t
z*Bk=FSfzG1szj~6dEbnId>ju>-YAJSf)AJuVH`{IFrlOGt;!fI6zxhsZr?BfN32Ah
zVvIEol_>r)@rjyq$jXcJK`dqYag=GZ;=}xmrwKO2fWvuP{hKr~m#B!u!&B=zo#JW$
zRhmf;pSC{b%NthMBum?VktQu4lPU80R|&k$lJh!<2cYzaRqWfP=U|TelygtXCMr<d
z4wm-DD~Fqr9!G*-Nl;ImHe%!FjZ7~R0MzLS2uD%mZ}m$?t6Mb-=&~F{qg~{Q^hg{L
zv#~t{JKMOnvtb4UiZKez94#^Bowmds!@3k1jpKvV`5Awk@=a7G^TL*~4;<lc;92V&
zVpbL0S)9Xg$l0_1R1IxHc5{?!tIHiQ@z6BKc<uFw8XX!9jJV(q^|=HThhhp~x2*o0
z%Q6)oOfogrvkv|uW1>(^qeEPZ>l4v)_J>3oZK4Osej&A&T-h-_*pxH706vm7`j3P<
zz2_91%@yk}(~sE&xS&Ll+QBSa#N84mS&Z%VK2yUCOH3m}Ok3s{_T^I<r#vL@zGjHW
z`-50-kFX(|Qv9FGDme8F5=Od3g?Z6(dBGZaiq1{oe*_4?rJhi+&QoW)$Kow9(^aXo
zCOuWzPpS@{zt|*2$mz}S(Fi~BhP+hUhkW`Nmklv6dxH7+w9O(M3-bDhd0cVzgFYJX
z^fecFVk490&sTzul7>+~a$XnX4gs0zk`!f3*OjBGXRPCu<W3?IZJi^=4>28s|3}E6
z=X#3(3;)Q-%CZB2Kz8=G?_seYSkCTiXi`$r)03}qv(KG9NHSvO<ir+6$6A5yXQ<R`
zgC&4qI~L+t=;?n~REVPh57=S3@P^eUhxcAN;SQTB#c!~1aB$v4QiiT7klIyQIcVxQ
zJJuAN+8@F82B4~BRIu=NdGp__5oM`3R6bw!sSP#F!JtzT?eA~ff@^-*zu^JBUwvzj
zM#2Xhc5uaFi7PduSy@>zsFyFbxD@MGy=S#ss_xl_Hm{#uUth!6E5<99fsJ^y{genG
z@5y_~{}$Y7ge!N6Q-0e%=)MIOuRcC^9cnY%Nu;?k*QEDVu-aDCTNh*I>bL&0ebP12
z;`VPE5oWIoknGER)#SLKkHD0FH@@_Fn+PK6M-mRIg2iD{LHiGfY!p;Gw_gNV&gWge
zc71sk5qX8wO-^Nfw{J7uJQZYq{t9%oKks1))^~R}f1yOYCUBIFfe4DeP#n5w4O9E0
zp0e}QPujsMeB{%=&Qe{E)E#8Vhj(Hzqh|@%#6lM<k0RbeOUIYwAlb^}RsSjKj@K`a
zQ=FizrW;~cgGt%!gL(gzoUSg~Lw0i0Za5I>-F53u(iG|49loQ3)T@86uCs<z_A0gD
z3w6s*V=Sph==EQV7}>M4<@4;^<h4crsSnb_B)Q*1g0I_|3-&jBZd&pr&&xy~^jGum
zG6f$6rpjLH1mAbi5?tt?A4B4Fp}LcA`yTH8%AV_g_X*X9(Cmavk$T)7_*ht;PYa4x
zkvM8qO?ARicbub~vR9m&VR@qvk^v72V*?aryalmmJWMSoM@2<h&Iz2yfA}Te90ib8
zp3FWTy(H_pNyiL%|AeeETtCFhR-SM_jT~n~|2vJFXCUTHZJU_^VdB(=HS;vZ>$TCt
zmOcHN*;;Eo0`~lg_?3K#)}(Fmj_G?dtFcxdvyzQ|o!@rEoN403S0^t0%@gLkUd@3q
zFQZ5-QzhlTHF0RYk6rW1<w1YbxwrWdQ%on<Q>TUlF}vGbe%1QrH40P@j>Yd{v#f5Y
z{R?{cb$_~SwvW&y%r)>vj%DH(!K2Z=2|M1JklBJsyigh!4TZ9a{7SvqJZw`o(W2c_
z3o4}9hTlt7k{0<w^_xCy89VDKcvATE*O*}XtjEb3?6Mje8((g)xVyd9^SP{bKN(%h
zOi#^fxcg?plybNPMHJ%2u;ueED7yL%V4d~9v7h}9fbeH1Q#QYU=Sm44NY}ay{CVmt
zH53iGn3}~6o11r<FTp1}U&$~H{>u4WwqtvYv|@r;!v%@$!7Mzfgs0EhsS0#&LthOG
zrEQ_-rff$U$p93_!3BGsOvP&K+NIKOQ9#;T{fodFLK26BR5if+!aYnku9lEw37cf<
z6pF$mODJ7RlW3~=L|Dwb=oBJac`#K3OIiJaJQ^+>xFQ^Q46=MKuGyoWF50be?Zvcn
z<;dr1C8p0}^Ylar1&d1(m~0)2)z2f#jF=3jZp~c_m^oh{3dicq(MyEPhO>(u*dd~x
zcW|30`jE-bgco_{fSPO8$vb=2PJknfNZ~nOvEDF{#)i5quDTLJ)iSowA%~~9E$i3{
z3?`X_wCWW%tN=Vw8fZ7*DAWK5gG5yw_a=jeyQqojh7TJS^?eQtlOf(Vh<)0$We`&(
zB=`I~{@eeDr?ZTT@{QKMl7a#%-5>(e(v5^7pn!CDcQbT{G)Q+hLk~T4cgQf*3?L0d
zcfRvKXPuW%EIu*ondiRuzV@}RpHO8U@2p(*H)(reS`c;s1|i}_OMv#qr_5_|cihkc
zB8R4dGS;ZeLuJbL;chmrTBHBgoQM1EWH;_Rk>>W0rB^EvbHCQLZ9*o=3OQw&Bpm9#
z2P=G%po6`wmy2O-Q`7VShiU}J|4rGFwr>qIu-+VD=}p~jEl#2fa{h{<`?)$SvR3H5
zn`=>E1Yzz478(8%i3fbpsxA_KFGWRfP8;jopAq8dYTWd#V*H1jYe>rb()@<Obb-@%
zw68{3KN`A*(vE-l%`wGujs+_X-~A%Fk`wCx<})^TWidMU$z=a`Zd_f`m;`l|4Ls8R
z>1xYXr_RxOnTkwe`pn|b?B=V^kx|YqZb1{{&IJEsDbTp)3#4tbT||+aw&W4Yo;0ot
zARiVbsU`T_yXCxyaF=*HZq6;!d*8%IwuK$~K~T{1a(})I-3*miT=f-(bwK<tbZm*u
z3bo4VkL>KY6FthEO5iw@mz*$iEk=c00bQ4klgP8avF6;2l)H&>U@kbr{Rp_pL0o<B
zyqDr2rtK@n3KXoV_?L+c@W_T8&mx(0=x;wlL$F?CcJp-8oK<?3_4>pkC6@O^QdC>W
z{H%$I3Gv+js4pMwu-+$RI%eZN@~=Ngu0OxzTZNSlO@Qy=LTec_!S)^N^$DrhT}Krx
zHRPVRwKkYIt=k+@)nuP<+I~2+w8C)!`a%~ePYaJO)0fS9LLR2i2M)XbtGucD_stUi
z&trK97&sJMC$sAsxFmjd@UA#2M+7Li`uU!)@7Z||r15OFYk;W>*y=t=5c|7xw}Y{I
zA>Ne_z@^|a?uKI;xFeELt8d1N{i**xGb7!=4ymgz3`BRs$nTIs{w%qD>)CeCV|Du;
z2mi*&lHUSdnC4;YGrWd^$D=<lzxjgP8E)VJ20qvN<C3@?6iXeGd_JpqTF{3aXRu)C
z$5mI8IIeCzKI0nr?p-dtp@^Pq_3FMvs`#5>EYc64<9Q7|F|_PFmN&i=2H{43KHV;F
z1=k=yK>QC(_}}BO?;Kr-1i!*#DxSOJV0-apmOFiyZ(TOigkB^(YfFBq`l7q_2h}aM
zCuY7ilIzoB;qX<!=3{DXC;0g{t#9@B5d#dpFDGXQoarp@=ANy8N_7wfzxBVoOx3$@
z4qU(?`CN5O2)O84m;Jx7B&^;DoyKYmg2N1yR#eL5tJ2Nho}7@YVO@r6YP9;z5g8`x
z0;8hkf6K<pKYEO0o)><>iGsJ74ed83d6Y}$^CDAP3Pbh(<UN0qY*S^|H~^kvwF!=y
z0z~icME}9>cN!evH`51&LqFTC#v5ni6v2o^{%66X?C{cYU(2)q3VFEJ)9%H$e-;CQ
zxjDZ6w-=79<1&3Af^{^d3)}syO4Hij`%4$12Xg@1)kNIV9n)%9{k!o^eGm$?k=ur&
zwJ+qM2~3LAQxg7wZ(A2{J+(ZIGupdoxH$j-{i7zZH=kLN!_-Q%{m@lL8|ruAeF+8s
zSGHacGeiG5#8ec&fIr!$4-9(NjbO9C%kQ}_aX5a>7Gtem^RG&1vWU=Ngp$LeH+h8%
z82>`<SA#P;B}XaU=FhY&{R$&D=1QfZC<9OY+@m@<V4kv59W%SaijG}!rB-$ZCk@70
zfvKsG1nTZfKBiAG3ZGx9^m9}#nnswPqN8C8sWX-h<aRf3%8k;Ls0YV3{8n6S`8qB?
zK{6n}n?*HTVBCjaK2W!9#vIO*lPs-NuZf%enmJ`=iG-;zs!rx#T0fe8h3R`&zSFI>
zv?2j~h;_YiW3;@26{jo?HQt-q*XC@cN?gcgu5#k4+CM3kw*r(7)1Mn9UR0+4Lf2K9
z#$r|vo9m(Av6QqKK7Oh|Ph2sIBx>Yj|0n6o`c`goH^9I)5~mxjQmYTpRb2Dh*$Cc)
zJ{<R7Mw2HJ_Se_fN6e;8K-#*p_ug{Qa<J%7I%UC`58RTeGyTp`5_^u1&TbCrLd}Wb
za^{RynSjPbt4uPERK=3ufT7(lZHUNjLf76n5htn03vYH4i1KSpbd+)qp{O)M97XZV
z3yn_~QURR0%0ct&#R#uSE8ba>A3c%BG}C!5lR#yX)cy1=FTU~N??~x`ju@$dda(YB
z#7xn$vrgvBaFPW<%oxN*jT4>OgL_!fnVo`i3e=Ek<pJ_UIv@TiYf^3y!{ZlzC1_Vd
z^K&BRm6YiU`(-(+zmBGKw_cjl!dSm*XV(evj`v$D_Aes!a#$g69djgqo%>*Sf2JnW
zL8GQ-Vg#f?p>QzhbwT`oO2yB0Y2>aKlX#5JpV4vFElTIizK>8%i5rB$*e$OcR^~}Q
zt{1e;jYR<KBq=?;)%X5N)ccBnkdW4YcRK&SWI`2nb#*nhE%){wsl~-bBzO-50tFQP
z7h$;F9f*pQM8q)+>%6azkTQtlAd;*%gT0lUoJ>;@9sQ<1H8u4f;|gYnQsZ;GmCAV9
z)wUgsfcxdRpL`w9aY!-sdp?C7e}SF*noeFD?ZN$9*6;C}{7ZYOw+A^oA149sU5aR#
zpV>9TvjnDNR$M+jgh>5-<2gNxWPd3I5%la#<q|uMc*jNN{ki5WY3X?#UPO!QKlyX|
z8Heu@2h6_tC(~Q^3$5$T&ym{nKeRR19qaQ{QgCd_(<aluI)4(lrKCF+U3N3UVUve~
z*5)-vbKZE_Gd3rUR8l2jZ*rF`cA+o%MP@CAxl`Ye`j5n?-oZcnbze?hl0Vo!=l{EV
z<JUwzn{RTDOTGZuZSj-Jq4<2ZDAt#|@B42~RQd~{^PI|`nYe4pGu>SBoXZliYw&t&
zVDJ#~!1W~2!$GrI{ag*doGMt^p*0y8rk&E`^0A#Vnz|t6t-daE@|6|=j11R-zsG)S
z<sT=8Tbyuz+5_~tJUW~dr{a<V_NJX4!=ne1`V}y~uuQ6mP<W5j?tFaqP;j1e$uAtb
zqBymMC;Yp^@jjYepSm8{dqcYHPzw#-?U}lyy3?&OlF9vsX9@E^aY3~w0Sxd?>3Jfc
zUHbeA9Vjr;57Ak9&xi3{ro%3e;UcSm;RbMcG!EsJ^6u~g(gU4<t$EGv)wiFtD%|{$
z(L03|uNnJFt@2NzNRz0yyQ)U&0z}nzrA^JGsh@fNHJu6aSk4i%*ekl;k$?8+oE)`>
zHOZS56$uH6FeI!ah#;K;d`9WoEWA!r3O@JMLk3+|<4Kv+neKCiD#(I+i#o3JbgC3~
zH>5J>;OR9eiZ2#Io!fLWk{*@o&2QUVl}0QU?X!(Q?i$4Uu=Jj&7dfq9t^*W(p0kTj
zZ-z=t5Zjle?MN3~1FB<cYja+Q>-X)>!;Ric;ilv9N!?~&a@;wWhU?88#K?r~)Z{ob
zE3{2mRFs8V)aAH(T=f3T#og>^f@vu?A-R>s1-`8(ykHM&^qLFHZf~ZjVzLre2OO&Y
zn@PNU3U{SpL{WTJalm>$No*Y%VG*4y`nze`Goq8#$P~(5ge`<;qF~N8LXat!Nuiyc
z_v_?TyL2+cy5ZyU08c0<Bd44`rCkmOXhNx-I8%jCmDxmLrh?K*nQtk}`ZIm{CHv@_
z<d=?~Z{)fVj|SzPyq{Dla_=_ev5Qv;Savs=8duCX8EB*D+M}5z3SG!{d5FrHMvUe7
zEVGqCKghm?a}=h0TPoZk+5SE~BUB38Xsl&-S_W~BRLeV&XuO&sYK>l~M3}!R0%fwv
zX3>x2%NqX^DH(uhrhhL6j8L*f6Diii%u<}+SzDMUagP5nZTLu^DUwBcIwAt@?NlY|
zDH3EIY2=ixS=;0+u{8N3u`{c!{4<4Ma(A0;B&f$u{R}%>$4p_KL^Nqp*#E-NnY)_~
zNNLf(UNw_1Ca<|YD{oTBIQ#Brz4#Gd4@3B6CVV#aR<QPX4Q2D0$)Jd%<3#f7*Zx2B
zKRy(G(2T90#bBZ9jKqR|bs?*-jOfM>eg6W#nxwSYmaE|{+iV;!Y_t$!2-=&-(q6%1
zcm8wp!QqrBDbJKbh>pCpX>zXC!6rnOfqlmK$LH6aL^>k>rcnee0}J%(kP8KC##<BW
zFCiwZk^Efl+@B`;4RveDY*94!m_SRPkRe`Z(|p`JMNATOPXv@*E5qRjRZ8Xx62Brk
zR3e*6k!;<0cKbQLI=KXIG|+qrmy;zS(y0=y=YX-%=9WY$gGn%_O&P&FhQbDh_7Cj?
zxk8=Ndm97lhw||gTZUfGnSZ9nz;|>cg2*j@x{zHg4qBGP(gxDMs~r#mc?tD=keL`a
zR;+;Rm7oQ#-##ls(Qs*!#IJ&-XkPftq7uX-S<JL=d>&A7W!@;Sp^Pd8Nuf}$VI&py
zcV%L3eflbgA<4!R?x?Auag9v=qqK6c*)8J`o=I^(xnZ2#)+&c95NekeHz{g8B3@Td
z<vRKcyZ^gZS?~iFUoM}+-6Asm-evwm=?xC>LJl%t2s=`dymOJlc=^e}+FFvZ`n_^e
zb8~YrlBh~PvdZ)-oR^n((>>|<!tcK$S(Fs%`-mHRdP*gK_L|6E&~=%jToCiv$rBFO
zy@c{=M7N$fm{fNhB}iy|`Mg$ffB*QHpR*wLuy8;P-gmf;Yq?q{uO>Zj?h^Ib<BhwZ
zc&IYnWywS0*RH{S8eG`7{2%!hu8Z}r$vA;K(+l2snO<0@(+l^wnfsN5aPNykDQWOK
z=912{_ypKl!kmw^$gGmX1<C0keIIOB)K$BNcJA)YH)+@5-_*Tp?`onr)W}4ood3PS
z@{*eWZDs86@tYv$-pMw<)c2nU!amaQcieYxa%a46E?_VE*XN|dO)mC+6MIWD?#dzQ
z=ebH7JTkJwG2D_4SyV#rMHTxVe1m(9HA_eEqtrUbf~5Yh$kor@U#v%>1D($b%+{q@
zn%!6B!a#@6*5dtNo^JA6kPAKRL@Qa_-p07?pV=V8?UiDVj?*J#-eAAgg%vs9z^6;2
zh^1PAt%}P`4WK@dE2CiI@SNL1RAe38p6hiF3Ab1gFy}h8Q~cTWI6}JNS3(TO<c>+_
z*;#Dv&GEL_i=zG}_PG7wX0bUn+MDBWYq1VrEY{0)zcj8x%%W~Kt^3v0CAo(Eauc1f
zjgGqdY#7eL>>Pqc!+vT~0l5o}n9M$KM@V`~OZ41jx7SDgfY`2f+D&!h2m^pCEmlLF
ztCh{R<HKXHWH8?3<kWJjaIi@2a)<A7(*+P2{>v_`>bhzAn2_k!)zrL)jF^XcJ)1P7
z&)B@dm8fmE!^jlOQD=1YDmVOGQXiq74y%rt3Hg4|`+j%$lay<R*0*8-c`Dc%#wW)Q
zQXebFt(=_i>q%US2F+z_88qj9o~p81(k+p&?GPwyR}=lrqmP+j1zBGxu*9P<#Y-A-
zhiaM5xPw>Znd}%G32S8!rVsQO-cXuEt2i<TFXsU&K~x|<EquEEDfKA>Tbww<4I-Al
zjhG1Y%z;n8*2!)~JhOg&w#q_oT$(joQhpfSUF{HxP^&WBv@$oVXNQn5&3(7@kT|a2
zP26<4_;Y*eVjRQVI$vRUDK{AqVN{{i_SGrOJ`XQXzR=AYe-EuV?=wAl43+jyUW`4)
zn%N1-dn+1`B$!ptULMxy3<YUkenj(UzKnHXWAIE1kdw+~Q;sFO|FxCE=s-sH#uV*8
zx;6O0`3fr(;P`SsTAripf$N)+dBdVydbWa3MW%eTw3Mt?oUHV~&`bnU>GuI7j1}dX
zon}R!rMV6Yq?<>i=$EYbn#dbrsdlWe@}3GMe;cF^4E)(RHtaRtky*bK-7zK?+;&Lz
zD{20vVdVU;b?YB#>2XG@*mUF$rubTzWk2Zbhe|epeA!E%RJ7Eb+eeeEr(a=_*+frR
zz4Zt-Y=(+N>*70@yJZE}pGi*|ojw^?$8OC>=M@}QpfS5gxC?HNd$O{Yf`aSp7$iPB
zx}$P*hRAlPVPJo?HcnzTX<VYftuhK+$clB*HXJP}6_J)hbNa@L4;BYm)`^KszAZE{
zCClVVh>7K5O-;ui&(eBOGbHXaNhc|kOfBP+lTbxQd0~b<p~ro5q#LC17_S=I)iP-)
zb>!neaD4LbW$+nCHR%2sK=u4xEFXIfcQoM?CGO^J<n;Rx=FNnHriNd?W!?wl3Iot@
zy#!*a*Agj*;`kdIU9&_J_0$_{%4xvW0>`@%*&qXN=Qt$o?Q(mm=9)sJt9d&rCfUHg
z>Y2Up>fscLLcG6wt^*LAC{Z|2D@xXG5CH&PExIeK|MPRaVc*g&_1Y~@GDi7RaWUIp
zy{F^*L&Uc8;zxo%1hP8|20PsM$PDpAT)_Rr;mT1>|N6v_lNyS*;e?rapl)$-k!Jf<
zq?~9TL_o4j7k1+95|6?xfy`C<f);=Ga6aW^+dG3D<U!R{9*!qbhwXlWR?8F-GZB|P
zv5$_6AWqS$)*)(f_w43UXaH5tLj~sr1wiVKa!#y?+qw*Ge-bSOOK0U2>|)IZ#{^>*
zsuRr(>JaGbppLN0Zxqn4BG8Wk?}Iq~{+yWOU(<MozPbuHoR_4sK@)|%_OM+$hYo*d
zmm=}TxPFs3`rEsT;8c@E=8B8cnbTSHC%1+?(LaJq=o{e1HMBcU?J|f4qW$XqfaW;+
zQJ^SkmTK2U5k2GB8oD`|w{EF$dkYKZRi2A?0XdaQk)J`{HG%@p%h_fzb<{SP0*TFu
zK+r7%qK{Ua&oBA)F`UU(>sU$~KQM?6&3x&dW$EW-g>iFneq<`FZL@d0pNuXz`<=A1
zau$XxxY;}1c?G+4S7+t57ZjAoB;>~ACFkVjrlfNAUw0Q-Zs3(i%6}T*lv`kfO|vXA
zuu}gT;rckoATlKKX|?}LsH~Fp6|Io{3@81iY%&gg<59+BPN!b`9pIR)%x1;!@T&>D
zdy&6J(tPMN(Ih<X3IP*tITl~Ii4Dy54s$;~$cDC_51-C}@9}a4u^L@BHd<3*K8Ty!
z1`hDq*}zz;LbmYh2eiErBri5s(CKhIp&90nfblnXdOF%L@U1gsSEFa_O6tZv)KYWX
z+~?&vasYDw6ckj$Vj+Iok8goqY5I_5&BbM?z=}59U_t1w=CX>`yvi)k$_fuu3BI5t
z;lOHFQ?YMZy;q{)wg9<ER(B=TaEGV?W>|zX$nKWOFtlH!F$=R`>zv71p$E|MX3M*Y
z0+TN=9Q~xU)V|ZPrnvEK0w88{l`dBEtvJP72oSwpa*NABlp%33B02eDDWiHY1GfF%
zOWx1so0g)9r-90%xQT*}lN-QS#lgnc;)gsxFdnA7qOP-|tTs2V`&U^Fs;wqjS-EEe
z+_$MQ?ADSskWw>{LI>BUsB6jE)Z{J9U#g`72(}?RJUFfde30a(c~t=4{B@JWvUR&o
zH@zKUGG%fo+c!2kpquX{J)(GR_G*74W#3s_PgX}w5ZG2yTAie>{#W;<4)4_*+1=8q
z6l$|8NR3~8flqa27dUaT-4@GGMm_oYg^G%zjtRg92l(<y&cDU4!}Z-yR*|4LZ{9S5
zK!NEzyu7r>o13OqR(nU=D-Z}&(#EoA9x}sB-d0iRU2)z%#v;U`<3(PP5qW_8%biW-
z9%17o^P%jw?8SLXEj7K+t!y*5?D?2%UQlCX7%nSnCO=?-w{bo|XBWEm%f#Ex*M@iV
zV98lWD5^4}p4P5_7<8F54<c-I<7syP+vu9oe69MoiD1TCr_u`4Y8M*X*s))|vVA0}
zZQ;oXOo1rDe^%Nf$_D0$yyW$MXi4dObMdB+QJ<SxoQ5jtt?H<Vspi7f(SUX+)g=oc
zKB?dX8*MqG#HH=o!7DkL<@SAA6}UFGon;;&@9bzkvzMaIYhXFBvbD98ijSi(nRsq=
z^xj79zVbkbT-z(d#*3NdPA+oqHkn7fxhW+!3^F+gsg@pY1n^5Wyv%u#mgnc=7z>#T
zP<(B3WOqb{*e5&c4x9FR=8kLkIq6$~`#xV@!$n`1dmhgz*7!OB9_C$8si{ah8XqAG
z{F6CCPFLdtE=U*iY_d)FCyg3?-+M%JpgD5v=ze!$WtaqjdG1UhGj8D>VcF&b48u~D
zG_SJ4OU1u+OV?s!cYmP5Tx|#7DgQ=A*^v1C;uQ*E4+D+4U6mIX6xp^Jb+`WX9dI5X
z9Glmu;e?L^2RgOmeM4!MxtyA|>M1zH!%|Ido3>c^Tv$`rbn}Nhf7&l<cdAKdRhp^;
zH5P|~%@R=a&=&IcG-2|*fR;ID&U?ZF_m3uu$*QI#TxTJ&X5C}o5GfIf6HL<V7~Ao6
zCMq8@Rf2Ti{H(y?FMpG!vJxvFYvdV5Sc|=AHbNex5xE2;s?(wGh02Y`N>OmPqa_4-
zt$i|_my-@8Z8BiruBC{T8Fw!(n_!-?*hqC19ty)fTD{yDh`KoHydzrbHpDZW8{X}1
zJuiiM-A}Bau12Jz(>jsr8!@HiBuw@=9lgVPXC*iQ!T|y8_HOADMg&g<i_O@;vZ0`g
z!O2-6g;}A=*`;dZ{n!lkb>?je=&wZC7p9GeA9yJ~qw?*w3<k=hD!<GONbFFqc#&yK
z=ln9CrqGxiZId8PCmjY&pNA%>Er@ts^yj#6xF162z&qWYuTufp;Fj}?(4$q%!MI!|
z`-8HuE|>eTN-J<7W*q+&F5Zz~$Mbk-#G^O6o+o84;$jrUvZLSesvB)@F^ZTSd^bAM
z5N%YdGK8Bea09t_5WBg<?`9A|SM43yi)yESXop@5JG-9CDU3v8$5~a>9Frefk>~Nh
znPd4b9O*?qc28~-o?(4|K!$Np*)~?`ReNtNz?VF?A85<GE5C&R(%XT|UVO*~Z6R>B
z5K+%jULT7XtKfdmh$!z|YEjQLr}kQ~cK}Ry1xxkstdfeB!EgAA?Qu1xZIF+fx7*NX
zutP^Fpvc8=mr1mFZ^Q;WlS;(n8Uj4H?pks|IL{s6-&f~8os5x-W?wwE<Nloo;l?2-
zNJ&Y_$q$Z>j`sJ-C@3h%$o@kQWGi51XtCO&?7lSmc`>hXGa>Nlg%d@v;XGow`Bb1N
zzRUZX-IONO*yCg{hWv(E6Ac<9;FOh!{4)20eFVQOb7@^|VIQ*eFQz(}|63WZyF+i<
zT83&w)PiXyo3zvH2Ke|CsA7}fk7>v{*Z!!h!{S(e<v2jQU9UUrN!YdO{4UPyj~|pK
zF@(Im1@&rDfK%g-U>)(ikv>CAx)cUC@*8V{n;01=_)#x)Bz}Tcf*r#=F>9cR%Mj|G
z&SS2?w6OIjO+)-^PzP<A%D7wTZ<f+ekk5P_0R%)Luc-RTqQMfO9k0hVS3(ooIAM0z
zKRXibeaenEXQV6?a@otv*qLjN_7I2rC2sB@RFP}}&&}=xWTb&7m4uVM#E3#5Q*}O;
zzLG4d8ShpMTWIopF(`(!yw!@{?I>Z-Sz6)!60Wf|yYarl1GYL!B;=1ayRsJ*7lwX)
z7)&U3h74kakt5q8|1b-bbaqm3{>@$+HyR$TXG#^2ln)3>`B4;RqG>;*X{x0nJEiH4
z4=nIDoC?*r!=pG}1QZq6d@d{@o&7r+R+5mNtQS0hSe5S+uD8+la;H98>FhG|*y%Y>
z1yG7PKJ+dkuXCK*y%iQH_bYv$Tdt>%r7Am<ogTL_Dm&~{f=(MZ>HoefP<h=i{kRr;
zerp*KBLBQE-}YTY*V)U=Oi$K`6buFfYD;}<3+-z~n@ee1%UfLY>hc;2+*>$H1#4>A
zx{`7<;P7dYzl%K3Y<;D8<&<>gltgXyczykN<v%L(i%Hrk1`x4lfHTtnYqR8U>Y(?-
zO-e^zM?-}hOl64`jmO11Qz3Mh(H6cWBrSyDj{Abo&FD+X{c#MR=*^W5Mdlp`#c`{j
z?e2UZwV&txK~3k~VWBWU?B-&X<rvoCdA>VScnrRVwI3UMP9uZ)VO|G7xc_su!0^!D
zDkxgj`P2PzpZ<#g!|&97H?#ydyM=Lv?>6F}*Mjj3*@}>-cqoQA6=dU|KFy1gX1L!y
z)jv!?e7N-cA;EISV0lT7s`n;4dF%#O<8_kW^C=UynULzu)$v=D=Sa|d7RX4ICS$vC
z_HaG#`z($!pr3^Ay!P$Z!N-NOlasP){03d7qe0sJAqKK;2BKjGssL~fQ9IsN+-hy&
zE5k&?p9cw7W{IbIbR@s;(Ze)?(NR*OJe?xFHo_j9ooe~7uK2MO4;6@>$OI1UTx)kD
zz>Fjixtm(qAYZ`&AN5ENpm9-Js3`3g!RbGOP;1nl@o_n)E<)qZv7QaTv3_4c$0$!W
z{Oj$v=cZoiWeeEv;A*`vn-CEQc3TbMi7wr4gYw^0`S%$-6NekH!vdJCF)aG(tpqNo
z1FlkvKqvN8JR+1d(`##pVNcPu&m{8i@oQHpDHCBJV!E!6(CxB(5#3ixD!7o&?&2!2
zr?c*K{ol@1>2_*Z{|@xNU$Z4lx|EQ?oH&)gX`yNE9GRCWSK<3%t~@qSS;$>-Umc}_
zueTz$U_bT)S?orJLID9LlPG}j`~|v+fm##|T{D{0)K}kY577lp`5_tnTvgvG&E?u?
z$veyQo51%=;!gL!EbX)1Jeu@e1HF}*5Z!yz50M%9l$UhEnbPhThr+s&2S;BVlR8Zt
z?)#6b!QoNsHN!KM@+R$(ma9N~Z)PFP{ktKrYpRza`_N7c*JD`3<Gq5e0N^%8gQN3o
z_D4;}8>s8iK$N&bfPCo`_-12E1Bn9!-1N`*hF|9jxt$=I4O+dggKJ)-bw2E}3|2XI
zmrRL)6@>I&^UQ?CmG}Rx>glOV=$S!G)0+gd`Pyx*;<$O=MPX#9==`uAT*hu6JNQmM
z*7oB(V>U`V@_c{nY@dbvZVy;U2`s$WHqt)-4DPG}))(em{Z7$N`Sv#|<l^DrXeU=~
zK6Rc?1Hz-mH)}2Im5DJVe46QsSiSV6YlKW{FTDlYR8{&HG-G;qjm~+$=)osCu$-I6
z`*L^Y?@#@Ff&f!@xo-?6EBgDK3>o-8U)~$|KR)c_etCLYcIbM%L=wQCANl{K=9s=4
zx)sPE%tUhB$Ake#;&%r%T_|r>!QRAVSa~kFoQtnzUbSG$1qEcCM6BO{1=l`)dYIsc
zi-*<{SqJpS58)-2Gx97onu`((w-XF;De>WUZY}fKE9;Gzv;|H1(02`3`$ef4zKlxt
zF|YKDSvVu@?6&Ao?shJYe`My2Q+wZ;1qD${y>t)2;AAy}=1Q>|rl(Pdr{Q4^3PC;I
zglA!TkZKMFt1M-!jG|t1St*Wl>1VYRb82fd9F1Uor9T?Lg?@Z})sJD`Pcq2)tv6F|
z)+Id&GyJ2uyKT~I@-8j*!**q;f3i%s^^CZT1{P)&0j?(P9$0rY9G?{d{yCT_H5o1i
z$y6D)OD`iY^1x_F6K)T|D{Z-#<Frsv`tGiT$0z&d2|6J1tcJgOlJ?>99wl2tJ5@tp
ztkeIyw}FGIvAMpdp1F~yy^@u$RNqxZU7eKh?3mnRf$~Il@Jdj@c~r%Zv3+irAC`~7
z>#|HnRs(;uWAAX^73?=jGOGtMt4oqK^^&>w5{z?&9T^KLyl<PVm!_J<us<8rC*$j>
zNO{S;{bUW12(zzitLBV-r)6h?^oi!A3Ah?QmvisU+oc$#PmY+qOiz|C6lQ6|42#X#
zUva5*H*`JeUhfSvzk|9vn!wj~>r~9LeH*jyz3?a|9P)!Rhuk4}F$))QjnT*Zi{6&5
z@b%79O4NV<IQ0GYE*295<X-#?kndJZHSoS14?SNy=K%kndfRogu^1eF)p34w066M=
zzD<RK1y8_JUmi5-_GWV5S62fatgK3b`H2Y`OEdB|`&Ph1D`qMy4oWK)N^ADR@@k3-
zjy>iY%8GKzva$n*vSS+u%Dv#mlIFVVuFkgRlKO@wr&_R49<Z&wy0a^%j2LV0mRR@n
zWg6L%^?pWWhNT-DC9j>Ho8e%4j80D@O!^L44tYBqTLN~(@BN(`_bTtNzqGjQWY-)a
zd>^-141C;A!GJGM`;{!mo&Hzjp>+4Loi1Ala(??4*$>Om5Jj0@3$8$#xYb;fmHc3W
zG_2e~G&W4_Amg_o1ZM);>jN|>=y?hveHF-iqLLqIFxb=dC)kdVk$mTD{^0AphD=6X
zRA{Xc9?dJ0hp+6v<;f0*7>))>Fwe{qvCI>3EfS-&7!V-cl^_+Ab1rFY{RmN~?k9Am
zWzYxp1GEV~tPFcX9-~xllSB*6!6f<75WU$D`Q9}7(PXK?Z28&HQ*8b5!#~w5-*gwE
zS{yb2tGzpIvfXak@dwuLQj-f5D*Lna-vYui77Uwo7>&B5SB}s*m)-v0##bYwr(DxJ
zDBFW5+dJ6WQTm)AhjLf8%0#w*wr!QoZR?3_&(v+P)omkFY$G9t?rPrd^yGZ>HYZ%3
znY<s|5589Qu!JH6K8w9J!hiiyX|f=5H*AQY98SDjFgh3=6!e4$R-2G_DsNq+pC8c*
zC2b8g+ad&u>h-mMpTmAl_r9SIzkc@h53YdH3bJ!K8=EEX%c`t_zY}OltZ2z>f$0HR
z{UC~OAPSFUwih}5jg;u~b^$3x7kc!Ux-arK%W?$xBr41a%dCj4cQcGP(l_u8GJgG4
zhKOZp%pImG@8&2U5g5eJPbaTVtFQ8}v_HS<{<XTM3C}@A(EVE#c6a#VUhhBk6p?6Q
zWalo$;;4oNW^678JDCb6p_!A3xwkd>7ui|fLj&ph+OM+O0_4qwoHuUv&Ue^31NJty
zegyoo;Ls0v6+loW<ayR#t}=v2y?B3CX<-j<jWwA|&Go;Ce)z*q!&+2VUfxzv-&G3m
zuubCot1$};5QR7sc(W@x{V@CXU5W`@ZPZd&R@s?X$d{|W`gulAcu9#Lq9rK#!=7EX
zj3dD3pNGaH4cO1{l-fHc<bq&+T7CIz<&gPr01t#OHRwQRY!4jMn1iuadX*D)bb7Q7
z?t8=suLfVh&_%8u1v_Q0VTfgoFVBa?nfz1_C->g`$16|!2YTUgRH81`{vH==>wT!G
zs7P90m<g@8Roh9Q59@>wJw+bo%^@-%-SENVh)z5U0QV*4`gNu<D7;r~(B*f&E&s{o
z00R84*-caw>+u)DtfWD)$xrx2NI~}Zw$V>^sENWc0*4!ud^vK<mW97+<s)-XlTw<U
zDBf}gj%_8R4yfO3J27ZhiI(DmjYJr^kup9n;gAa$cm&$bpP6Ms)z9j|-D6E*sdj91
z17{y>Z3Y%0zu9$|ZhE=&*LjT#vLsP#btP?edu?_9Q23mUg_uG;=%Gz=^&_&ZiR%{l
z+a~xys?qXtX?htZ$<T~><paU~ruqm66MXnMd#7jdW(i2yM&lLGct@*Q*YMG~6KCwU
zsftjmHOqSrW9HH(gs+NFzb@Kl^>xs}!bz1L_%bv(Q-clO^2Y_WD3kw0Nj*Zg!H&>k
znRRG{qb@o#&JO&FoC0lO$*uPQ66MIg6DHyz$avkh)p4MHQl&-P-T5=brSi#{lmF0f
z<;}E~?*CmDdg{w5Y3Ym8GrGDe2x=nYocNry^jsayB`6dPstSiB{YgyC(n>;4h)szM
z3tO4p52`SSr@f&ylcF`_e!*a*W<w>2zs9H(N%{6qKn5tJn%fZH@sG&7%0MsmuLxuE
z0@Llv1A=lhYU#`0;jiKo!^}cj6~m-F66`GPW$ay?Jrf<Y(`}s7rBuy5y{Yq*5#76!
zE*#137m$m%i$mA~mjKFU<MsIMU5?*UfAw}<_BVvyud0s9u6m2NvtjF40i`h1@0DKR
zEJERT*OaT?XNURRJCnLzo;xtna77ACZLiA-{ui10?PuFj90nM+LY`M|Jm8&DjL5|<
z-|fvA6HI+i1j_U*@{;Ixm`_kxK#_N)m5Pg%hs0iS*40Toy;R#Ge3U|#PI_vhh|tx`
zH}CiD$xulOc=6nL;#?s(b2j0Y^Qd-$6I<yq^jh-8w`_zUFq<1HLJ;(=xN+%lso<dm
zyFmYA5q<t_Mekr!o4J>$AwH7#+uUB>-c@Xx$KX`U3an{tEbJ(*DfX^v_wOiuU0Z(q
zB}5*t^Zu#l8t!+!mU#?++?+cwfPcBWTITRQ*&ES-w>{23Rv!B~p3aU@`#j88<idTo
zk~NUcc6Z1}b8}e6>&$@2fJ7Q}sy6>;u_s3cL&{HY4AHtnz8|f$qN3BF8=|NNsl6TA
zk(8kS#po0=cNrp`i3Evrm01xo4mE*n`08CEYoKLgJ=I-VtB#k>z^$<h2=JF)Pkw!t
ze0HK<dW@bgefym?-&Qh30W@k}0Ad0KMQ59k3NtcdGCtr%u?Q||xYX8Yc6qH5T_vAo
zkzcCYDy?aj4<d1GCP1NkvchB?oK(BN7CJTEow~^`AhI3n7($!wB@Wwo6N6Z=j6G?1
z?-H+2X45c-4sDlpG680IZ@n4zn1&pi4sEk@%u0s5awQ)&P`BN4(b;}d%`kBOpvjqa
zN56B_c##Y*7N?U!$48*a!?6lrW^gcB2QwCJo~e*0qo`C9P%mTG0X8`U2VWoP2{g4i
zISM-3HX`eg?z)j=lS~}O)ZKlY-m!(>owZty!EgCf&lqS6iN8{6zT1I+p23M@QtslI
z795x__w@8647IxT6ziFxtz)WV(n|OIW`{tCu4Z4#$C#;s%#e~eVX~+c!p=9_GZ_@-
ze)OSY&_~YPCvqEEXT8seeWCcln(zHmEH(oSSztw$h{eBDK+&Fcf3@HgJq?K9bB^P7
zjpB8TnQ45Do}$cmt<rol2Z;ELC)W@&ay?%Cdi>M53>!d>)hYU?!ydI2*`hvVvH7@I
zBU2in>WX)P5dAf~!q@mbeWYSx)9z(+ANC>{TU*%BZUH7m@&zYa{Sue3$qhxu?NCe=
zDyAt%zMBP|gU-YG>(09q`u+(6C<L7zW-Dvfj<3Pv9#*TJQkZeMVs2;stzd6lWHQ0U
zO+=x%LaM%q`_5JSO&b25E8Fx}Vy=r_sOiBWN$y)}QX+i~J?_sUe`lAqxTn*n_0qXl
zbU9~~gkce)80B4*-kZvbE>_?5+zftj0-I`qZDruL3UD>J5(rLJU({AvUQ}IDM?Lw9
z>^vGj{&yrPum06vSXzYsRTqRV&(1Gvis`2E=;jD3uZl^a+V<}7aY|=C-P#Gd?6vkW
z9Olcz{qOr0uDiPY4jQKXo?VW~9S*$?MiVME9KPIaUw?VNdt87&Kb*&PJ%>+N_a0BL
ze{U2wN15<S#65eV7%xechJ_XtAC3~=gPbG%dU5vF6qek_-;WoWp8j8RP7Y0ZDd<$+
z;N)Cux4F4yW`dfuIM@^vX960ozx+U9Q=IDX-ok*TyYo-(Bf5T*nh!-Knt;LEHQl~}
zCfy9X(D%#EVtiLP6o)n>4zpV(J8MQJI~$sv88LREjO6@R%m#<a-5*#MJp`dQg3yrE
zx(E)FM1u+ThAcZ4%*^iBwm}@Vr#;$Xw;Hu0Ro(i`RfB<GHqDpgJq$y!;5V9)F?zp!
zL;J1S>tfzZW^Q^k4cjk$>a?rm;ZJ2HIn&|$;e0N0b|QOnCVO%s=Xn0x$tl9wCCY9i
zd9j-g9QMPRu(@AOe`G#r)+WTX`BcW`e9Y-|%<f;p;vfsEr@feG^+dfcIlTv;tg~GL
zyuT2v05vX7<Bo79TK&o|QX=!%DLz!XWk#G@v}sPHu8#hl9^-3i2&3u8;+?+>3&*P<
zlZBj!>~=tGw4H;!4dT#Yik(G`x9PnSFM%r8dIJAHjX_IU?S*fueF~Ce5|Tr*kYOnp
z^mW-QsLTS>`vBPq=HL5N-!Fe-8lr@t_@SiCy2J*lG3dWjm%z%gDz;B2OaO_le`5>u
zl!uY>`i-FDhbtt_v?Jev>#QzS*i0%8JY4un)$K|Za2ZQ2yvQdsBftX#?KmoV13VYR
zcXFi6vQd#O33*tv1q4LU<i;C!#C}Y{Zg)T_=-A<KpVNa7p6YTv-E5u1jHM8|-U!uz
zc_79^8+P<X{BJ=TvDrdS7n`RhLz5I@KE_k9$M84`A-}WT2$Oq#&)dV&=4vEsn>$cm
z;++wX5D-+}TGL+IUQ=V@k>_bl<5tBKrk}E?q9Z(`HV2m@Kgf@}Y>c}$KKVQU)kNf>
z&91TCqNB^dvBtZo6wuM-(pc)-Qfc+lML0e_M<RKFV1ZxbKh49Hhi|4r8q>=6kxi{I
zW)a`b>|e|(zU!c+3h~vCwr8j%exSU8@8fEC?yC3kQ?rHG)5#ftI{R)dS+VQ!VSia8
zj!Nuo2N{ENdHqa-M3V2Pb6eQMI<UskUVWoj_TfFS#6MTcdK-8X_vPsosb&bxCN0W1
zT3HBjHyzZ-=Xw>H-+*RzQgK3NPFUrOv<YK-L}Vx031Z%3H{ozNp42s1Rp~O+M@#*2
zY2Bz-8@0_6vSk@h1<vkh7Wdx<eO$(tZQ8OPTVSqrs;H~s+0itaXp&Bjkusmhrd4ns
zF{6+>q&PbqGgGgIbx$^#(F^knXP$An?{g_c5vLq9)RERVq&wE?IM*)&4V!f)rHyv}
z>ec;>N|Z{>RtYyjFAB@5#8I#QYpzo=)wE)`$h^8$nVjMz*We_>;Vt2_rGBJV(DCqB
z{=;M?ny5ykH%IE3F6~~c@~lg8(gHTtHQ|PR<;PVGlPiyx$`P`!@2iPUb(r>tnD&ur
zW_^=4;ALmo<}KwT7E=)o8SkoiX9IS`OAs&#*+=ZPYOk0j|3=P8@Ngr<-Ld@NZ?U#T
z*n9j;xbqF1Wc~DGf+<pVvZ~A>Mq$(uS2kLXWtjOB>He{xr{h9T;Ui{T+@Ww&JFpoJ
zp_9>Fm6I8egLUhDolw^v()#W61(&saCkT&2g4u4Z#GVo@-gJ}7;xPS12wHi*PE~})
zhX4Yx8?<-JYpmgA;{k^m-79x389Ch#C7W$V;bjjehiye0gFT`{;dm6bhvd7ky5`2#
z_6|^ukz+?0xUvFJ>kVH&tA1+hL4fZS&E{w3Dwl=aDJROTrW}r};C^L!t<AN?H7+~r
zvFi~{oq?;Ecsb~jZH{-v8XQOk_@VrqF*aN5>?|`iE=#2G_$23b>Xe=rVxW%^mrBg<
za94J%6u<onnfS7Ka{7<)`e+$&^iUpW-y!wCs@5A(BEEUZJVagX`uYMl_6;BwmoMf@
z?P#wY3QM0+R}!55v-)e6Z}uCeD%p`OH3B09MGEZ<XtHXzd~YdySBKK42lQ=hbLXL_
zu#zor`Owu_+?F1;T692SNlIDZ2H^i2!>2~QYq|98fVvnE>yCRwMgoN`2(K)DxuN#5
zN4_xE)DI_5h$(o-`R!V3qCBH8=2WcT*~CQO(6s^hOxo91MTZ;=0$r~41P90?Z4Tlh
z&lr5`h4L-GujC_1dzi3^Clzmg;dio8<+ci{C}LznHLBKEDtenHe#d;z4L0zlZ@%-g
zUv(2nx)e#m(M^)qO#<o?P*GtMH*YggO<d{{oJdRiaPy;qT3Q<U9j&VW&3grg*QY2M
zQZ_@h_3aewN3r!svF)pJ*hI8_I+jFM2v#~)GJIAD#Mnpq*nvRZ48vh@Q61VX$SU&G
zj?l5;ZoVR-%AV*DI`C-JUz_y{TsGvb8FAJ>-zu0K>lc9zbU^8S>iE;enUBU~e7mzg
zh>d;o>0u#ZvOg?G``|bB^+ABd+`=RMHy+8TOXSUl=jZkoYV}MK$7JFZ<0!F@qgt;2
z*KuUW=a3VnQoN<gRM90R%B09jOG-+en_jB*9qOKu`gd`3cLjq$a@Z??m1Tbd(FVc{
zW^^^@wI%0X4$I1{N~ak!R{ujQLmMwLC;W}aE1?gkC;NqUGQ7ecx}W|cO8d$v;8%RU
zSO0SO_D!*BJ3Ub-G4Hq3rjKfKsN7>KCeFHrTy5@@Ea4n&!KH2P2n4jQ)XdaE*-1|U
zNyED7T#?rH+!257!8fBsExwTGE=j_+l~%>Fdt1v?*GSutf)UG6J!W%gOAdog&wHQz
zO+QaXI*;xuk!tP6JfNoIV*f|!WNy&I!GeC5<LyJ;+>k<!Fc!?kkUD-2Ilgm0hBvz$
z=b&QZB39cSu5%EjQxvrS-@%aNsA4k~&@HaWf8E>h5L;bcV(-;w2<UqYZt4O${e}rd
zPgq-1<jr3;HeSrth8wvzH{!VRTsQR@Z@ppzH8TJU>+P%Xy?y00UIQCqkm{6`Y*}Ml
zSyOpM9jGZ?9}ZcbhR>}m&#A5&WG)*h!SojAR-xQ8+#P@x<j~Hd?BAEm7bqy1R6gf)
zhI7IOFr*wSd=C@8+=$U|fIV++Y`L_%ACZvf3V58H^!NAYOF_{TWnKbm)8(IgR~QPk
zo-=aZ@&OkcwTErfYw@l=(=zGs$?CXs^1EY&TMTc+M(@1-*_<XE@g+y)|Go{BRH^SN
zlHZag5+tV`5tC)7Wh<}h&V9Anr9Rr-w>sQC<|r#undeSi0Hr|clOgT|YR%}Ve5a$C
zk=9G7+#@7ysC?@x839?{7}cEJ(%nDJ#YUu$oWy@D;jWKv``xTKYMQO5TH`0}WvFIp
zt|q8U#ZA;)M95B7+ErN|Fxw!CVvhFV-XWbX2J+9AMmD+Ls^*T`o=m<1)n$Aod2MF4
z{!aJe5<fVqMk`9cZ>eqbx&^;PHgejuf8Z<li3V!WziMz{F2A+m)7KoGS6A&j`aXMS
z2Q>y>m%Jy7Q5-?YOc2+z!&a%G*xXjf)7=q#Z#*if|IKs+cPSo)V2AfLjP84Ej*y!z
z{0UJs2NK8EyGc8H{bqP<VnS}r(#DFCgwlThxPo-olC%c~ls1WG<Hd2~iFSSQ4RrOA
z&yDALZs~j5fwvAhhGlZ$#owHa=vd}%hEIye$Gf`)3EH9254!DDZ7pqe1=X$C-UTb-
zDgX;#2Y?ChLqjQXN)ypFfX6k)4F^GWNQ&sC0^Cw}$X;JQ9>d#xuOU-i2#>9^o8)tE
zebMW^V2<Y-<OlPALKpaVfRr&GPWq^ktdRfQ21vqII-cVPTnByaUTDaL$p1`fema}W
zxf{7EV|>PsS5dNZ(l?UOc9;Gp?`EV`o@o%>7+GG6qNX|@sR8?mytjTW{z1OyKl^Zp
zWu@UbwO9iG)p|Y1T2E$VTmz{k<URrq2(Xye-W3JN-3Z{nO?ER3EB4O__0RCt&DW5V
z^>Ei(UV{!Sz&o6fnow68ztis8l?fwq!fr*foV+}ns01fWhsUeV5UNbSO;e`O&@}i`
z+g#@Msk{n{2I~e(9Gj~=nT?iopl9zJeWS#%1!U$t!>itU$=D@wU)T#b8|=7$IDo9+
zC<UFidy6%YO_2ZY?nvK|B0|{Jb^#U~9+xfTc61mk+738|V?MZU_ui@?a~K7kH^&$8
zOBJa9*QeAwq^hg>Q_V?B$(<bt0=krS)i;Y)g86D{^6fkD+cEiP=lNhNvva>@)$qDQ
zCUB_t%1BF!o0GQP7kFdcQDg%5`t%UN@yO-3ro{h!xb@Wp<aXA5(wR$`nfKm08238D
z?$epqZtn8a&3MywGbN&ZV3XD7nHh%e5<IcT4TQG=weR&^>(o)U$30jW?(=+fiH8)?
zFOi^kL`~Q8%~q-b%;R4Sv4PJi5~N(a-o?|5<uKpH7$Ps@67k>oO-s+kSXy7xwqDWk
zBaN!6YDcr8p^vlqPsx(3iky&+^!O^K)DYU5s`B^>$}907ge-;(N^UyQS&futZ&rJd
zeXjTq<luloKf*nKu>>Yd^i;mx$wcHA{r3yuhi=7q%#?b(i5Wm_&~HU`J7r$5ndOcS
zwXe?>uo8~^=W6^PFJ>&7*$w;wCu<2!qTfG6+0aFiXBj)wVe5z*pFJc-HduSlG7I-M
zRG45}&sEluyPOVO#-{*cO(C-Z-5;DsfsX|!Dz6J)ADm^j&9RUrVvmvw-COECCWGV=
z*}lLN!Zw@d?%}K1$hNkUtIdn7v;DBZgaqWwItBsd6cB1dp5Jue<ETYkcmM90lqx)D
z^6yb;)p6FvfG$B>$zZ)z(LU5mR6Vmt#HC3#uy8e-PLwh@dlml?YB^`<jSlXtt^s*g
zRT@<_G<LN*7lGZpIgrJ?T}uPyu60X;+bi;@4<KyP+g5i!7bP_vPaPdMhad7|;wnQj
zIzx^>jz0nYTfqLcb{=VBLXc*ch2ayKskL9kX*ar}ojJm`cX#c_$NtZ&{MTK#S762C
zj>j!9EQ;}r9cPZ?`1a(9(L#Zu-F1KErd!4zZs_m-1?jSIMkW<JBAVeR|9TzfMcYn*
zj<mLtUL{}muhH9D@>f`RRzyE9aSK4cFhdwcAOjrZqXP!&6JKTI!ZjpQze}cSC@cPg
z$Y{bezs}2LZO|yx5i2$HILwdiw=$D^vnYXiSW#RLr9jz|joCpsD|F@hGhtK-C4Q%>
z$0VW)jt6T5QQaRir)_gLx#H4R);0^OMw?>u6I3|#h3+>(o8ibc(1X<H2jqr?|I_wP
zZrA;G__2aPhsW;4VjE1UYg}#!x-wnmyff|E74kkjkEbTBH?5<jyHO6FRG+p1S*yx8
z=?GgXS?}I-hTm-Lt_&8v*S3EYx0Lpjk@mEgaxj#0lGC!$vayim78R<b>8dWy2M9D2
zu$R}0l(yBC`}4GxeW+<GuBt0^aqOt*EH6)X-|TmK;7miF<uw0$d52LwGOfGE;)*N0
z>!AfD&#ylEvIUFE7y8;sQC>X7BF%_Los(C7Uh)n<RzCyVYKniWtE|G81Ym0Xk{o+h
z0Ru}pDJe#_XDV|vl(Tm*KIO{zgj^d7HPe*8#C(lOfJU`Bq5U?m%r-AF?|U7uyG-x9
zjC&02@UZsgV-gg@eMI47sh{k3k)yM*nyya2`>W)3fP$a1@3n?Q$Ib1fFx=Pu@Z_oU
zDz;=Wr6-}Tq@-kWax(bM%cF<?X01=Rj1p3DbQ{q$$j3hT-(weI7ao`$=o_V<Ug=q2
z`6$FpuOas>RpV#6VstNC)g*nz0DTD#k<#aPYCMGMO$16HBazAx2?aP#nk=#dfpt@+
zVf8UAzqNTbUG65x>?SC!{n=cmyD&@v?|<L5S>Lbh<##UQG!(n^1ZJbV_jadD7x39$
z+iR%lx`&ZF=z*^w<kTI{SI1xA&zD2@aDV^jL`4V6FWyAM<-Q)_0J(fmL&>l1<%+tU
zzJ`&>ijt=8zN!jRGUhP`)}Fu2LEnAyr8G-^n8sST`pIakeO0G4?J#+*OE(*s#bqP(
zn27!O{w#`2h<W*b7D)>e3d1JfEuPSG5-e_=XJbQMW?8yZj;ff$u3Yl|jug4-Y>uBI
z^n~%KMC+eV@<lPP68}#oe)=I~K|OW2veLLoa7c<4jEV>bvq_0&OX;nm>iItEfgkl6
zdnV6v1~cknm)?0fSx~;fzj`xn<YnaTrtXXNfCJ-#tO^8)!pe<)!#@9(&Wuk@nmc=c
zURi&zr#6ud0yo~}A8kKXmjre~#4rReaX_4P<u%V;moI|KQ!6|CcP0@A{;=D-sDBHJ
z)E(|m=hU5d@Mk0LG<$eErtA5n@UggOmN(774&Q{-4c5#5|5h(?^T;Gx+nH|J9lezS
zIjKN6OG%bSDs@gGtxtdNI!0NY%kBjSrguw@5+R4c-9MF=6tKgnMpZd@xxWzNQ;Xg^
z`i8%v+mWeoX(`u9ve8UYw55eIeeC1N?-y>GW)l(atfeo>tB8htsl6Un$V;RfiqrEr
z?GGiMGVnTG(sA(fJf5WP@;P6gg8SSfG>&~QdO+8(Wf0)H+N6}rW)I6u-fHXe2@Cxy
zu>6<Ww;}fHVcnhIw%08|@rT-_!?se_GDEe<1&6pY5gJBlp^Zn1#m^>yuDy(xma9I{
z=Bu`|k>0muadXcf)=It#YC2j!{EhT1eC*AP{p68Ij{*>5dzDyai?i(xm9_=I$V%4J
zO>Ij2xl3s2KjCuQlsG%-Eg6Nf0aCaWnC6^b=9`wHMmp0D_sMpHem=ext!d7;&C>4z
zw_As#Ea=aFo}KwD<3P3l0;xkWBdVtCm{}}=As!PiGL}O+igdNJk)@6Hyq4Ok&hifj
zk|Vo;r+O0018PgVVl}`ue_Zr?{yhu~;hz4T{nN`1<GDwNPS0!PVC&&16Zxz2T^|c0
zyu)Ybz?*ut<95UX(0Ti~lUtWhFWL2U$5Qk{w2S*<jH7F%%b$7{X&%DacpIn|AHIex
z%-(p4$QU!c?PVzXe|)`VP+V)%HH^Ct5Zv9}-ED9PK?f$mEf64B7&N#;@ZcIOSRlAV
za1U<5Jy;0x?cC?wa_af&t)iyj7d3nL)xCQ4>UG(u{n3m=0ox{`1_KX@!eou+5Te`O
zS>bawS9H5Gv_rITy<bIGw?){!$s?U~7);&6sel5YQv>os@;PHUGY`mUKuCXy3Ap*8
zdqPTKjcH<xd2)hlp_i3H*9p@CTaWt{;xkdo-^+J9N98Rm197J!U!E@2pS39U$7V@-
z-EID2e{S)6r%TeWe!qme<JZXmwN$Ie;ljDRjm5j7yZ~QgMLiw=3N6Q~=Nf?~3YxOh
zDsQbTowOr?^SrfC+ZoLkcPppfp)h~um@5FJcu*6|`&|9q8vUlh=)tUm+?m9XO{S-`
ztS?6gX(MVMIt!P}V{fxEriueYmRr_Cg0j?nRH4eU2JT9--X8w$Hd+=?2M4=Xim#kT
zS8bs6L#yNbg52V~ytPHOcCL`zijF3KIA0Es6N&qwtyj<3>g8k0O#5Oaug?#b%K9dJ
z?J_&q9G{E}*@-R5Y5ATDYvFt{1h)<VYjOqPLG|I#+2-#lFI0)_UN|A23G0|x$osm;
zD_iI(d&#@IdwXeta;FyF23Sb9ReUAV@T;P-7-#>ZG+XkLZuU5i`f4NX^EAfYVcP8d
zbMCo?2QCgyY)tFr;*Yv#<H6=W`$b92T7aBBmhu^wDIg{o0}QHZ+(PnzMdmEYs0ZC0
zKn)23f!^a%hczr%?~Yrv`;n&YS9d(pX`;%bWya^Q{^6KnRa8NVa|_)ijS<S;^l?W*
zvP9079#r_8ue~wf@zR^4OPZ@na`8IpDC*%OLuncN<uh5XVPL)%E+7-cvypkrMYfqL
zt|-ZUH`VV_(3m9Dr4?o4!1$)qWz1ymM!0l6IeBut<V7i2|MTo5cmNmcbhYkuAp&Hh
z)$!Q>ZO#ApEVuN#tLYnyhufau(}2hGU@fU;pC3P<HshWr3l>ZK#w&C9*=9t^y7(F9
zl-Wyr<Q7MG8Tg3?CaZPK0wr7mU&of2aa@NPIlfJ>j?73dE(ij5#7MHS(|sN0uAPwL
zndIl7mns<>lI9gFV54i0;Aj>oNKTD6IVH*=%F)fyG5(NffuEU?q^GT`w-zFO<L3IN
z@M}lhn-*f*d`wcGH;x#wST3iz!a~9~*Ed(#*q%7o9#~hC13qF(zGD48i=<ns9w0MC
zN$gqwN+(d;F{tel-H}Pezc5oOjI%M?qbb@;IMxH6pU7k8?>?-itn^DILjxE4CysWj
z{AOq2%Gdb~&{ls)v=pDh67QU3t-tGOd&GG}VBSVf-iGt0`_-+FdF}ooD(-5V$Kl;W
zwRwyG&y(r^^N!zrF}^o;k`MAdJ=_+pB4Q$NrEk_d1A%pR4-XH(Z8b;Kedqdk38oBF
zdyhkT0PN2k9~Vv978De~=>kiNK#y{=zrTNYDE{vLHUh+)CVUmnA5??BPYMDw6t=I;
zR>1deOO54c7xs=jdJ7zdEd~l;qgCzTgKkEpuG5Kgl|4DOJS$onC>l!q<_94d&H9WX
z{-{&*FRfd;?L4@`8kX{x?TS+{<^FJGT?@mN;URu!tNF19Wk9s-es}rHU4E;e$JaCZ
z<omnZ?Jjcaj-Nnl`E*9V<I?ff>*i<XY3uL)boCE$7Jg*`yY1z%j~T0zkz=nRxqGdP
ze0N4_-kBD1IuJK+4fCWJi^LQygb7_4-E=QU+Lvz}5e+mXqO*Fgj)EzJr;ZR3w=j&c
zvV)I;2}UL8{WgDg^9}QVTZGn?AGbm!dZyaw`RJ$BF%G{@sgdyyXMirs$?aAUq2fMa
z{at@G<bx9h(4>;D%Jyz*8jg;NPS};zB@NXT{<&ZMOF_a?J4n__XOJZbY8pyZaCT)+
z_NY8%41M-2Vr6qBQK2C%z4ZK8<v3sznBrmZ>`K3H(hX$m{bGgDpa<IwbeV^LHz*_i
zsNRw=x%#xuy&s<W#$~P5`}h3ExK@v=%Ld#rQ{U4uFKNH0!_$tZ>)#d~_t!x4z3#R4
z?*3f){v8DepUZ+Q6<wz!AWA(5M#Vh?q(O;*X)=i85m<j>utxZA(H9zaFQ^fD7B`hz
z$(G2rv*}jsN7u51#A1q&fv`!!|2parj=XZq0EM92+qM8krXYlAC!?f2hc+(XqL_xj
zn*81>evPTBPI1aLvyiH~zN$9cf*!lQ9winS2%haFto*)-IbG(hcd)q`oJi19KJ~xa
zzgb&@T213hub{f!ZP$&%vT(8`*Ccp^-mWY7>G*5gM+E3v%IbBv$i36o%np4{;hHF~
zo#78*+s>BfrwpDha3j+POI}gR32^uwA?TKJ;lD#?q|))8dsnNO$4WK%B9HV(d{{}c
z*e_-{o^;XoU)~oo5zXw(PHefc$tPaG=iPU2MLA@AJ6N(`YEdn52xMx(o2Qp%Twa^6
zF0J8VXD$iVJftKq#=dU629+Z9hb0?fjm!wHqLM<G2B-5zw4X1jJpblub1dV#0&EiD
zjXKGh>vFLJDqD6J$8u+fYL}x=tcPW4`&^ooWg`@&rIhx2B;D^+g=_uKq;J&4is8JZ
z9&e$x2Y|dWlpY7o<-Q<%0n!rg;f`hrn&M~tGez!V)IrglvvSL@`h1tq7IvQ~ww#|K
zVP)L9xoAp9xSj_NIv}Avuc+G93zTR_W90!Al5j>q>O;t3cEeU;nT%M?K+)EZ{ycnO
z?EC(jVxhxfZMA10F2?y|+CoE}m*4Ns-fKkVxcgiB`+fJPucsZoL;EEksr{aMo(oGg
zpKpHqa6={9vU^)*HZZ<D=Y_xtFI4n=5{h}SLSN_fkOUt=Bj_0;@H3p(Bd+m6mFFfJ
zSstk=G6J=RP=TYh061BWh?|no&+vH?a?=zKn_V!l`39*uewmccJ|sHbiZ6I`DtK$U
z?i+bGL7mFKUcnjfD+ebK8NtDiEi-N7<+-KVsip5y6Fn402om;`xxueB5w=7^xvdJo
z^1Zft0Q*_q(U4yqI>YvIdv`I#pwHuq2s|oyTpu=;Q@j({|2eNEYxQDzEOF;C>@m-C
z&SEMsVtjTB({eib9}oI_n?YzjlbQNbYevi9y#VENTrMK)R}Q}N+|s0=C~!9kGdzzI
zq>HII@M9yIo>9zN2@twMcKqfq<WZjn$7;`uo$m&FZ&!m+uPMbuM1)$Pr#WMJ5llW>
z<DF;0sB3;VoVf)38gN=7(kty(lc?0@0XM-n-0gRZgE{`Mf6XR{&ZY}y5520qi-kYf
z$>~&uf#bzOU&2Z3i-#aFq`*rDmT}>~?H?3fmSQ0y{-Z(r<Ody*pg%$cIZ6~9`CE;e
z$z>xFJmkAaQ$8H|(G~Eiwb9qEEjNcU82N^xFz<vh?fxZT*?_XqbGFsOKRO&y?VVCm
z=Hp&ZzW<$80InmW_C$adfMMG7W}`jXud=a88$xZJK^Fw>1|F*Z@~_<0Ib&8A)@ElU
zC#J-vri3O}r543_<jBdhe3oB5$?OK~v2JM4I%a%Ra8F2W`7_|Pc_aMc#?#B`<3hm3
zS#RIuWjl%;Gjx=Od3Ral+ct!ju^<M)9;W=Whsl}L9ofG`&DiC)YrxZ3VAo^<rLU*F
zSgphE-gU%W&Sc`j&d759A2$7~OZ&r*d6$5@U+}TuCh3Q>$LC({xA)g3r{?1R8**z4
z3Qpq+a<BCiJX2ic+WocjYaPA-c_YAzH8(NBB)Q5APg7^O|HKEU3&<5Hv3YpB9s}z`
z-I(M~x=pT4*HIo=s-AJf^*>{IJ<$Z}uL>4X--g<Vp!Ne#5`n*naJGb4xcA4bk3yj+
zDsxK+!+#zs2Sa^*Awx$^O<7w*TXiPy;>;+9D*p;^B(}0_m{fEMgY(o?Q_771mtQ@4
z#^row^@F({Mi>@HBF262`>Kc2r+0V0wn~1({sB)Cm7Nw|Pp1K=BT|yoCLXC2S+fDH
zKc`JoXr$+>s#u-6PbLK4ylKSpXu`ss^m)H{Hz0<hv`61lPuY{b1w!<_j*W}C!Nu{A
zyuqb`!%JtiTA=`RK94cv!ntKn;o?z@09`kp{O1MTP?KYh#)>@lZ%n%!iNCe9JzIBG
zcvl+up#c0c(dJ#UM{!(fAXQTh)d$#^k7XG+=)wd!IenF*bXb7}Qd~)A4B_Hk;p~Qi
z#g++L<kaqRHX;O%{V5TlZSv5|z>^KLEy`d?dGP_1#<)2z&)r$C=8)p{0KjZ2;LF2k
zlSN?1!^z=kd&kpc%uRdyQ=c!jsr1`>ASJ!e@I`U67yoSkHBrsP3iBYlN4L%D0`{Kn
z^8sAuCw~xd7<O`MPZFBRQrj<3#(b{3IyH#RU&CoZ1o^oU$t}v|bDPym8=K$PLgN#%
zrTcmfW+!y!r@qaxFLHBC&k1%9u?sOUNq4l;b9Rieiww<5kIiu={~O+2mW25F`uy10
zW+*8ZXl%HQ#%X}!I{6e%GI8_-fn$0oJ$f$714E@4@5h6EpV~c<U6$5P+p(F5-j-^O
z-EZa$Ny0>)yl%F)=^Wj5xl<cBm=NdWB~XP%r>GL~93{87SVt?mPo`6Z1ra3-ygcWo
z#Sg^3lDD*wiG3w&@y)oqtA#IFl`>Yg;cqL5*qa}i2Xp{%s2ccr0R-BZ-Ni4!0?+Kq
zq5!(JUfHVfxs`%hz+u_E7VgRMO=J|6WL?|4{O3XT#(c)pexIfXm%KAsUPZ;viCO*v
z2Vvm$F^yK{lbLQBFZBv|Gt~cjby?Uj@|oS_U=MLL8}TwH(8t)}W>98VTe|Q8RDhlB
zKPfsZCiHIC-1p~WQxjYoF#lmB;d@@)_Sp9UVB0oOQMIzjR(x|y+Z$?{t6$p&DDEoA
zxFtmRlFSM&_j3<P@ytrs&afAEGIC(957DxWE(j8Aws^|McI}Vlr5n#Z!t~BVE3c($
z^?$>4GO0JY^6%m~#HpwVf>$8;gF{oiy~C_C-<em%ML2o*m>Gly`h@!@*{4QU{{zM^
zEv8<W82|cpCnh3l{cNY{>dnSN$hb}S%JTf`lom7wmg%!ZGiK^|QX+WOAbi<4>%rN*
zTx=ol_t@?M!Xlk2e@{wolYygZb9%ovKL40zdVk3EdJq@CQPffJ164&MD<AZZR|M-9
z>1z)UJE)$4gNeVgGJj=LnM-M<ORk4&nh?+Os_^ovv>G+}=~{y?;h-Jl>{o{>Dh&c!
z&|z2Mzv|4iDN{yN{fr_&pBYaM>&}n%iPGi2hD>y?ByFx|8D;8-E>mQDe5RL@wPa3W
zl1Q({yTDP_XlR5|V~5#6FrA593{7G&iZKc5X0BxX1fi+4+@Z+QUR*X?nKPMRUHLAo
zKd*Ec!d=%6@9N;?VhN54^snKY-MaiCeCqeO!Q3R(^7A`0pyl{g;^o}_)FtlH`g1H6
z5q0Sf<^45fS?<*j;j3bUDXWXa?m9N0U>^t9q_4}U?5C{2z?01}omwPR$i<6y%<0~}
za6+<3HA7S4t22^hXW>?x2c)Uan<PkCg-$1VpIoY~)^lBsp+|V7(4(DA5bpL%dveGI
z9z}{NVY)sENy<KHvdX_F^<qMbiV9P9_5C}=dFQp0E8@QW@5KY927F$7X<d57+yweI
z;>u8Y4cOuWIGVJT<Rt{3+?y;n$yiWY`a}dI1VhSDVq<>VcV3YuA(!#Fr4+-OIk^`^
zmXA*tb-kK^FL^P6@$0*rw<4_+V{2twdqZ7&U3GKa*RrPShLVnkijIa%UPeEw-!wdW
zS}x*gd*27<=^)d<ik8&Vy*nIbmhTB*S_sAa6hs4xpb0KOK?+0x)GZNzG?G67l!TA~
zOu2C5<sMH~zQ%7N%iNl)$Snwbh}fay^!U?6&$+tC3-NnKN4}2HnD9EQkBGpkj;_aQ
z;ygS!*NPdhDCKo~vr=AYOHO2eush6IT%WF$un$JitIPh<TOYcOwe7(XedLdI+&Y?t
z*hV+a$7cMqd}%mS%)#WVedeNiIXStVWCJIq0r+?pTwl11LF%N8>>t--WB#zYdOY57
zdpUPZ-l@^4HNWQTVD;2BmT+GDh=14nc$;th@pc)uP4_XxPsOZzI!JdIE*fA!j}dff
zK#7J#X{I=3>PEyI2okd8Hq_B8Iqq1<Z$JNxJ&zjG;detYCeSNh{M}nj)Fh)l(5+`U
zt*f{+H_^Q`IHe2*4jgZ9XSXB`AH4wAJhMRPzccC^$Im?cxEN?}-nb334LTg3I36G7
z1HhV>>RZUyqK`uE_2|?=R;ht#9C9_aUsGnvfBmYhiSVAr{)UGrC&R<<GHxkL%xkoJ
zMCoU8A;2V)|B;j>4E;T=)z6_N`y`{Vl$R%jzyf8tkqbgM8*yUhvfxGCQTah)SbzCW
z>Y}GHV$ABy%Jkgq%Hq7%DfJ$V&^96hto0Kf$yEn6jD(t6`pw>iI(OTf>!a_0TYkrR
zKRLjl_yUqyI0wl2a<e-CJTCU9OW=cPVx^mZ14~4O)BAY8fY<;2{rlg)e=9311Jlld
zsAt@sZ{7gL%7B2asj(3uFc8As`)CwWW5)#=RWv^Mvw%~%{n8NxVv!ZZE3~aJ5xXU3
zw8kwgtS@FETS8+eLqp$l0_hO(P4J;LzK-@FjL)Xb1UfD4(wxQ|-h+NmeN>kc*k12F
zo9|k9ZlPbtUj0IJ_eEIa9kH>hhr73#iIe(sMStHHP7ZIa+CMecG4y%c?nZF8xBmRT
zVj?X4>+GOmzRPAjd)fV7|FF|YR{nQq9)H9SPEtWi=LAyKBF=Ngn2i@Hj}d*qsUIqO
z15m3T?k>=Il}`GOkVIG^pWcnFd<l<H{e>z_e?SQD79EY1qnUxBc5snicYaE}uM_@u
zXo{19&+r7_r<jWDF4o#JkP2S4u?oNHT`hhDvg(Tz%~hTM_Re~y8jb-L)RhHLSHJoI
zzd~QfQs|dB(VCe$f5?t4h+}h0;}gE$NQBUgs{O3Qy@@JUEI6LF@=lpQEc@Nv8pjAy
ze{EQL0GbeQSU6L97|C$A%f<$B_-iJK9)`TKyIPaCNa}f$#k)&_4X-*i7Lw0mcdAZ=
zvQptvT;rmzV`Hz57bWj5slCuIdHDFI08_t(1tSxarR8M_At6I;?HaFBb4Wp69xYkS
z+}vDhX69GuKx}a_Q+OvGkDjluINt04b$|pf@8s+(^7fk_!zmzUO)MOolkasURaH0`
zi2Rao&(_~lzoYT&rwakQr`vK(=|20zqR@&8zGeigdYGAe8#t5x$o2cUcs!d>^t#o4
z%Bm$}i6MFZ{2SV^1L=2PbvtcgOcuxO1k}22kdcfWI}hK$!rWT7AP0@m_!u*at3uDh
zcR`UZdJa*6W}3QI(V|i=t|owqWUI{;DEP!wQr<NyZJ@iPsI*pT<G8kBLLK0Gc%4$=
z(t5LM@_fzT#`dXpx&Lu4PqO)khgpGdqFN@Wf1=#fH$Hn~D-1SJq)Cvj{c^$Qw#_L$
zcJc-%e<%N>m0<p@&tz772NeEEg3&91Nk{%$6c3=wPpz}jS&nV_b?ke10<W?17g0%!
z--`PVybukQtMiCn0d^u{Djy^f5@R_0M~;IjB<QpJ^X0AF>5?#BjL&xet*$?*a%LSG
z+DO1JG9ap4p{$2L%6@a4H13o!yD<8tEB3mp49&f>tjs1)ue%FQLt$&@9G74#?L|6z
zbPQsxEtg|=WbF>`XumK=u*nFijs^#m3|Q4&tE#BBb*d<tBo`MmY4Ke=N7v|~m+VxH
zN8pdq!a7>z7ZRI`3ntw9*yUGG<A~r4R}6pY4J;eNCrVkN5xW43yuYuHfiyrMvIR`O
z@%#XDWMJI{Cl@iQ<^Z7M10`O<MN2(gPMb72%ccVq+Gb`?7+xUO%oAX&Kj!lh$MSy=
zfKOZQHj_@elWt^Y@5_{E4z(6G<3_Lkl<l*M(n!052$uawmVGB8y`4nu6&8k$glEv=
z^o4q`wxa23yq27Ln3W}Di@nGhWv=1!&1D>V_%|GN*67hH6;5X~t<jia7L7q}Ew)b@
ztmT^Qwm51Wal=(h?nn1P{^GLmKP>uSA?E7(XH1QmA;y2`gFz-H{=V^pzyv^ot<YU8
z)A7>-9>+_+5%ko0_{o9#Kq(Imp8iQGue&Vgu0hd_U=?|vkHKM@e_45d>~95hoWO!u
zuB1?o4$#`a{w|1L_Udj<YKm;fScyy1ytX}$lu76@HI^301#r4B@b!rf9&hbctp_IZ
zZ{@<jhh<gD@6_I^XuEp6GO+W0q3m+g*~=nSYxfc+^{}zd;Kf5N!$TS<fuqIgA9cpI
z<{c-*`#yA#ZttbNfNdni8Un(UwnS7kqS8L1^$Uid)-bmE*BeK92bTr+uCpq!;~wFI
z<NYrM1zfHiVjDG)cqI1a&c2*MaHPj^fvq(*gJjxqGx(|e-P42DULxS%*;V^z*!iz~
z-Dark*%ord2G85cBuQ>_6RvW)faEVOOv@<g%nEi^^_X8r5_S3+Bj-jQ`a}3^cr+3W
zv`Eb%`pt@hZy5x;2+En}s1o4VR}<{0EQbQmMS;d1SDiI{m?h#{S@;m!Hx>sD7Ye{x
zew@Q$!Q=AH>FxCjv*xL^r{jFP<inB|YSFV459jgf0%0#)c%fgtyFLTNs0`1F3<Ue0
z&3_58>D_K%O07?x`pxfPf~cp~J#Fv7c|VdxXNoWd9L~{fdVqHEr>kqF=Q9gVl<b*;
z@>Re-VmUozArg3Sw!Mj7fhFDd)CCp%EH!MW3LHY&F<*y;J67lF-@x9Mr<4TSAiew#
zF=Owzd2nRq<dCG7w#F|e;O;!Ffk@kM3FXg9ODGX<im(jQwEiXeG?P2FJ%OM1ez}ky
z1C&tqU7aC`Eo<f|lv)?}qV8}PD>J7RPiXX2D{4Y&>z^jnMPF~J@KcM9;p?^<!VhW7
z#Q33C_k5WlgfCfl#CE9s_z2C|y<QvifV(lsk$$8tg!qE05n{nhNCu5(?C9SP+#?)d
zqgnDW&1E^=Aka^_#ETxiD1^<=570W`3nOe@+(SPHgDyaBfCWL*AK|k=)Ah-M!FT>-
zbMp@dx~u$R#@b61I@-@N49upMr)5snIX_)SkGaLMorRALSGl-Hsd-|6-J@8-M=FsW
zBZt}fJuwT?eqjufM6#xf-ZH?8et+95hsa^t!?Ds0zfR+F82XUL#nKLkH!R68yDG^h
z&<LliUV?`jXREga7a5pT=aog*H@r+cIK?`#&~LJ|Ftkda^%qq77`9%4)y}^Wi7-#3
zTd}h{&{I5go+EAT|8`2i@osmrSoLF;T-JA2)Q<|tf*MQvN01PDN@zckkJ|K4Yrq_V
z2B<Qmr?Q2N+<)l9rP8q0JCs(!;}|QxC54v;Z#aZ6)Le+;h3eg2U*g~=PZQ_?eMbJ5
zSc@Ing%IgDn6d`6t|qcRtl7jB0}>hPQ0np~%tC`HK1p4>)z>!B#MR!&O%-C=?xL@0
z@Y{&9GQif+>Wx)lq!RZ&`L`;kZyc3miw(j|B@7H5Tznl;b@@fDd6H6JMcQk+_=^YW
znZ)^;X4tt_IQhOU^LGLBn2u(4h60&!TA9gC1C`kFR|l1{R}&3q?zm&Fmr+gU(QfD(
zQw_a29(FHxtDzhF+aKZP>Mk1Hqx9$9d1}v5A)nnau5dIFAya~{-zy4tD3~;9^ZQCa
z?=T{t$D7(W&W+&mBMYkjtk_#@(c|~j{(w%xS7?BH<5v@5l!cvnCjLe*K~&Pi{fu@?
zLjgT3{F+7@RcYZ8_YYeFRBg1~AOBLfN1&nY?2KkkFy3M-cQWB^KRNkd0hS}Q{E7!S
zi4j~1e<3^0JSbb9UGz#YqVZ<JDgr|<{Wx=eKYi&4V{Uz@mL-36x03UBPQOU<=907s
z6C-Tf2z3>Y3K$<KrxByvkwAA&z@zRa0@*xphF$<0Z&;9JXij`_l6!1el8#15S|o39
znUT=&D*Dv%fYg>cqx6tcy}F2KzF{)V6X#SMKf%D6I&t$u@<%h}>H{)X+XKxCdv(_0
z-wLk=b`4${3fUx2g0u5S&3d-nzR_A8lREvNswj0Rd9||vO6RP!gpUu=dbo}oLRNFX
zjCnrg!RLtv`~?ql#|Xzy;@6(7)thb*_CmYBPzxnYQ~frGe6&Xjefh)gWIZlU^go+%
zQjC5&_2CO4ar_&zkN(HQA5m`-F(i8RZsiEjGixSU@dCAzOuz*!VKyIAdm*f)kw(1&
zs_N5ZFl1&2nhnB9xG<o3+P3LI%Y2mW1PMDY1DB|rWHT257o=>}%>;g=LAFN7?V^f5
zJB<?AQB7zGewmN?H`VBpq)(JQpQ_7i++<+I-*nmU^f|NnN7Fg0tTlTz9SQOIIun<u
z4(Wr((n}%NZ}4pJ5|&!6+j=jprmf)_X}$d^F}0urG^lGLyD$aij<+hbE}MiekMYq_
zG6MT96X(e86l6V|)?)o<vxA$jF28KHY-XfZ)wX%8KqLBMcz<14et+c+UJ0%Ae;o40
zp*`n)ft@$R$Oz8Hw+r28tX~+h7C-$`pV+c|U|4;o;ro$6hSyA;`{=n_<2z&P6PPWW
zmW<20Nzqj2jYaErrdZnYu-MgvGNtQPw#7yOLJM(iD5XlhvrLaKKNMxLGd@fQjH;E4
zL{azCn=`)u7JaJ}|F`U9oLflNDWL88!X@+tWU!O2tW*A83z$0(#yN$6;}|-h;jMoI
zO#rhXxD=W`)W9<{(DB>PbRMWf3eW!TTUR-XM>xxvDl9+0%iO->-0V~mVQ^YtL-aOu
z43cPyXIsaIfJmrqy74gvik-U4BU>8z2r(hgXo$p5Nn}V>8b&1{lOv)?FeZs20ilW(
z_aobPU@u+g$AvB^KIt!2Mvr~LW7Y3{PKZle?(E<dc{4h`Pxo|^R#W~2pR>9NvU`%`
z64|WyD(I#$C3=zwev)P1Pw8P~s%L)X|3;3ug>es!>`qjN8>I2L(1J-K(872AQn3D|
z^lHg_;2`ZcsW_5DM$6*cQ1V4@A0#GBHT$0tIw6H`>Z46rP&DB*GQ!3>bqzK1^c}c4
z%L^(jK4k__{Ch9$-U`Hb!T$<Kqa1z=I}x?tZlY~`H#10oJr6yNW!3eH*LXwwH-7Id
z#tw4hb|hNsrLT+8awdnv3yyC*XWd|Jf?+)C;3FXxz8G`?>BBFs6B{nEl_ErSYTWiR
z<>JxWnZbx?m_5qtDxV9u5=;=xN@<S|FD=mGr49A+qHQjS=s9VbdU`18Iq03b%E^XS
z2E3HBlUH+Qb$a_;!!un^B~e}_QeDB#kW#X?9zJb|nRbblW|Wadl&=l1W@wImj9*|}
zl!le7ghQ%Hf}yN;inD(P-M5$#lCBO(OvvsCjHyoXMH+LmSJG5!?D7GMeqLFl`NlAc
zArNVw%dH`bkttDHezuN*RS{pyW3vOBKZMHHghF$ZypjV$zcvR;|NXQ=YS2l&b?!Bw
zp!i{2>3cX<)5&yJw8h9Iq{8_3d?N@WXoWT5m=`KP@yf(ifYI7tjO8V!-&Dny-uZJC
zr}f0eVfJtIr3hKQ-1+dNQh>lf*1%}Fy8!MUY3JEIlH(#<?g)E%VB7EqTtrqC_)NIM
zke6=+qs{6^C4qqlydhl5Wu-q10+&XE_!^Ft`3b3GFDtP>u=FxAq3yTHo$}AarEb2+
zApS`DM7~VlfqN_dWx6R-IzA0a`C+jzL_N&qe7%ATwg+ew;^u{e7z*fT#XS^*!fz`2
z2!Y^&%{0g=>mCHA=z*WlwO%WAjGGVu(!)aamq^~DML`x)GWiBfgE_DI>u~L<rr1#~
zM8_%NpEJCk{7txgjn~1g4en_XG14!Ap2ulLPBJ*r^uY@3NWClB5C;J?1ab=@(XA}+
z=9Du5mgz}wtK?;;{H;H`QHTgtAeKV=?IxyC=s96<DI}?yWIQrNVoFZoe~V39tg@$M
z+>w&`uTd-)koFF~;nuT)@NcAN5xR{R?C$90a`9UF!47U&=<BL7a_ahqAC(o%v~|gK
z!=t{Dm+y<ieOiaA?{MYy<H+6_0x8H`j9ALJI48dLB0|9RjMe#Itis;zfNIg}lA#cv
zRB@<ibi>=@JY96OZR;JcsAd;y7im!!dNc3$ANZuNc5?8m@YA_u?E+u_@}8xX(n;@B
zmBL5P*+`$up<TGuGYa$4Z?Ck-(t{*=DHJ#Bg{MZ43-ojgVg;bU*CZ#H<>pm(xXa{+
z)z&3sbIT-Vn-qR3Pj77r1whiol-@vZU+>)W@fq-oB{hS2<F#e5TAzyIQsUp-(%%oV
zxE3AQ4$l?`ipK4Bl2&etu*+)5j(NvB$_r}0Gx*0_7YLJz^zS47!DYZ81_$v14?f-s
zLj`lcHbkEJ9}$Y;+&mhczG8Bl@+CySO9Ta7bsvr(Fto@6K9OdSy&N9J7~xxKnj8f&
zBT<=^8wwotoplad%QYOk7;(<x4i$ux-^+vE%K-7Yq<R1t#ElKbm7j;htX{`3KJCo|
zahrJ`ZudQ(#;hQ?r~t+qJ)a#~l$E#Y)SV=t*+J71R{T96x5GX9z}MbYmZUkn$ktqz
zIhOlyGF*YGJ7al<C$+Q@efW0B8)d&dS8F{VhaQI%uOH80hFtH^d0Bt(rW+jS+sK<p
z(=Y>7tWyMF(-qB327wV)NFR|dR+fIflYz(4rG_L+*tJj<?GDZ(aV&g%iLtMpE~Vp&
z9DL5-VBZdyL0{-z@yCE&&r#rfZdSb3ymu*80126s3|(h2u+Vqw9|l*lPKJx>dN{|)
zg3d|^BSZp@p;1T!Oiv|_5dsE=Oke)MdqhqrB5jndk=|Y=8AkZmU>GxxG(95zYj63i
zbXbzY%gfwCx;{0-Su8rBV{Ea`aWgh-Ni_%Z6Cvn%WJG3uEPdaCp5hwvy6Qmp^MNjL
z9#H^be)(MK4jDMfzl;48xx;o><Kk%Oqv+rb)${XI)mLgzxAoEXNwCrO<8)e}7XYkV
z_1Ac3dPQftgvS7OiX{9T>FhpyCbBT-V7-@ue4M1I<|zJ>uj%Z~kvHnQ2v6sPcawN=
z2yWffp>UN!OzC3C@=CK4ybMfhL+plT<Fc6t7~80&FL$Y|Pw}05-->)G(#vhE1!)s<
zB>t-mZ%hNay6vI^8?wwZRrQ;bmEh}@j({h?wBq)BfSMLj_Dj`P(=kmbkRmb0dlJ@z
z8RG}~GpHnBSW{5+7$I8TKXU>fP<6Ku?Gfo3(CB;#ojs#vlvQ<tG2}A(b)vs#wzM;2
zWrU(5)5|dOiXs|emgR*C15<Z6*%6AM=%afeO$vZl^sy*_pOmYt*_h>&H`#ER0;N={
zKfu_CfXmMzyRmrK%@MovKEMyCa61f_+g`+JR+f0(DlsuXYrO4ywun0Lo_TvGxd|}K
zB3VEM#?ji8!LI~4+q(I&9Q^=oOk0mT@Oxl-KEL{=`$2Zl)CwK{$V!i-+_VHj(&%yU
z8xDysH6KsSM|A5k+M1M*@`%zzd<DoPJ<SW_?;-X-DvBMd%b}=Q+j~TIw)=U-HU*Xt
z8^^6mn;i^%0K@+qzyl||RsR7fG#7P_|HXTodW0#ns1Q0!&_@zvT|Y9Ak%AI#Bs{Gu
zo9;P0^Exv{TCzYTD^T*Oam;z$GEy%V=P<;CVBq0991$LPi6LFbY(!neX$(-5LvT`E
zhR=IcuM^d>gOSpc!RkY_Xie4%hvUpNH1G&cIHxO)W<d*b^R1HTt-`?z-=*7L9W#1P
z$(s3dl-?cD+kV*}T<~@}`zd984KP!xJW{1tOE(lx!_`S3gv%R%%M#-9DyexW1o{Ci
zFI7UUJ;W)ZI6HwKKi1DbJj6c7&NAEEZ(-br^vU6XuE>$4K<x*yj^Si&qCQ`ZE0*?*
z!1LU+zvs+<1(tmXc<?9S;iaN(_D8xY?DoxRLvL}ox)m&wZi4q!9(5rE*nY!^iVs9%
z7gA->rKM-Gp((Ius<bcv1g$7Oh5R5Wb~q_3b-)~9kgtVBC$}^QH6p@+AW8YL1+mT5
zc?AIm0}yXtFZuDa-aLNq*~&atMxFFo)$c#*$EuD#i&dWyo`!QcRFe$khRn1cd>L`;
z*mH#LYJ-|=eb@E|XEqD(jUC2Sz?it84`($qpNCTemm@tL#%;|^0?^3BEyt(oZz6eX
zaqC_CcH{uaw&*<o1X;@+v)oUPY<bQsIf3Y`GQ;+rYguBPE*am9FwMlsuyQe>Fyb64
z_y`|BY+-$3tfa}dICtRV`8S)4mq8E<lvJgK5D6`iS@>VWwv1olOq&}T2*ak`BogqP
z0PZJ8SF^9MU6Mm$W(HW?LV%WXBO~5q>rb>VzRl()LPSM302w7ue@>j^`JgL|Xq~8C
z8?RfJI9(r%<*KoJ+aA9i&9(?pe|lV)!D0u*OxqdD`FH-}N^HjO5v_ju(bZ)kCN0bB
z79?Vt-a~^3FgPR%1UUS`lx-D@J{9}&)+e<3^LU)T(t@Dp<nw1U%P1XRB+Avp9kf5^
zq%;*+w6-_IDch0>xo4eEFaeWnWG9E`Ye){eJe>5;6fv$Rm^>s=5#6~#<N;3Q>=ZO`
zbcH1NY$QWKLCUdO50OSm`bSy(=ffZyDCU&FkO(R#5#=oo*^&pxUqtA@QbT~!#!7=+
z4r@@$nA273$J3drHQ;ya4#+_vwM0hbeN~Rthfssg*QsTtW(|Qb3Car-`2)rrX*J2q
z7mZb)Q>n&lu;On0*w+X<&XyB{F3zjMj@-y565F&mCQ>ZkXnMYex|uh`JWmd5E~)ab
zNl((!aWZ*pADHf2>Sdavr_d7E7GP^C>-joUOCz?-m&DQbkO+H}=XEcWkSr9ok!vZV
zGX@_KM!c%eZUM)1|Beol1fYYADoF}TBu+~Ckt2jWSWp<_dTzj5;>RkYg~<QMGw=a@
zShnt0-@8>5xK)@rr=H#bG!mK!h|EA(AZo3nF_u_!RRAZ&F$h~~h#aoiHoX~<8NL{8
z=n#<;{*y{sW&|6lYPr<{L%A(m^($`m+S$5G)J`^s{i^*VOz>FDcv&3BVfdKSFt>db
zTjjFw>MnkU{VpZ+7~gK67-wOdl%yKEb3~r)w2oJ5cYI2nP4>}%0`J2<Npk#)>3yP)
zE(c`xTLjL##AVRqV}exsm%F$Ng_cKF2ZWA4sNgvR8{vD(NJK>L`Z5<$jKtq}ZFK6u
z5y0~R3_AjCAV9HWjkHBqK4>`J&t6ghWgaeV{cRwoCDA`Xdvp!Dcg}wxxd15hEs}wE
zXidaMYd+bnJSr^pjNC|u91rjs*{aK+Nzvs?)fJqrJ)5b!Ada6+nXL~YTvs*iGg6qu
z!y@fu0;Ik1N%buaKn6L}Hr2FK^!-re3(=NKP=Ax^Vq~vtWe)bxbGAgEmFfiA!a?*s
zX1+=Z5vFN&fgw?z$zH*cZt+!aHpYT4Ohu)0k`l8*G^@Srx}!6*gHr>m^uztkhD-e>
zs^d5!s?#&0K#vr_oDC3Efic|cgh&n1rm#SLkE7%UN7ygeJuC)@1xCVX8eAG=hm9|A
z7?zbnvqWDo_~QSn%d~$a&I!-@fX`jK|0yMjD<hmuDO&I&qqn@2X)YIb>t8JKqqWdc
zjREh7MY!^K9e)1LS4s1q6ZHjCCTs8#r$NcHM0$LiALfYl1PBZS2vSQhhDg!bwTosr
zz!dV8%W_ld_DL7toFwEbSLlP2FcEqZ5&U|R_%SLa<P{CT8d>u7oDz9sy~`Pk*OoR<
zM)cy+4%N2h?rDu>!ODOq&CBvK6SThJD63=a&|`^w4aW!8os;Xph>RVoVH6x0mBr$d
zVINNb>Oq)3<T7-!q8S4L00nBF2YC6MRP%A;1(4V}H899hfzca4Iio5S8vi0Q`E?Ox
zcNSr{m+Ad)zCa5<GaQd#D)A3s@dmuo3yZk^Fo&7mFI`=JByADszwBf3%fB>)|KTLZ
z2JEHtfNGH6J>d)@eiW`Ow8NG)*TKForXmd1*I3n7G5%no^j^!@M0Zr*xW}|-p--Hn
zvC@T(wr+V$vb&GDYgtlG?ZrGd4_j0Hq%hO-Z$g7p>~o?lL-Y)+ObskTb&>YekS)?z
zM|dx74{dDsop(v?4+smLepFg+Ko2u>9ri=(bX?`~%1la&V?KnXlh1O&toAsnAV3j2
zLjy;tRoA%1O*CD@^CUiRf}7#5KMNB=d>SfC@3C~=(E~U`7<5wjr#`@B@!U)mx0Kr&
z53`VBL{?y`>;4byozf-x=d%#uciK!v;U82*{<st(-4>y&kd3YjAb*$wUI<n^h=$NL
zEV7Xk0_x3UNDgeMQPVf1)`eH)G-u_cVb*!Y28&8}SFx4z@w96Te*Psg7JGKsVtP5)
z{+O7M?86Hq=nk>-M$#TxDrvgT266J<=CdE`pbGoFQk#9`?Lz2=o#WOI%G7PLv^~mf
zd5;)<UeCS~8RWiaX<tLckQqt8hA!UqMX-}Q=$Hk@aG3RkZeP8wPn@ksQUN$ouZzgp
z39s#E^ZK*3J+gQmPN)kdc6-r!G_%9cr#sDcR`g8`m37VkmePC-!xN(AGypWgIVJyL
zHAg9&5L~uC42YuZ-hX%#kD%zZqld(RK!CtT@Ig3)kl2z_0ZtGu@hp!O4Ix|xuZbo;
z=@VB?R80{4y1I&$j;^yR*rcOPIV~e6J5;_DDwAIx>uqIk?)s*sDyAB0OFYXsBF?71
zHatzwgA<TI0VuWPW|8c98h%D-uwKRu1tto;Qw8)#KnpZ{cg++l3k;SB2;I#U{k<iR
zKKSRmp~y})hc&(f=FQGstS7W(Vmk{e1Oi05FlO7#ps=D8z0#br_g@2m3y~CF>TAH~
ztWV@dM>I4An~*4u8yXy1_@$hJh=C=TBDQ~GsuE}t0zh_cz1}Flr2&m;naZ(sf`ItP
zLxB<ICf3vgWiKYNSdc@Gm#4ZEMQR->6OuZEV7-|%mzrk;xBLZ(sqYox_H&`bjAmOB
zk-dz!Vkk_%LKy`c-`Eh%+L?GeETNK%hGsN}`MfVd?t7UgipqYl7|E(<fK3S>2bXzI
zH+|Gv5Mw6igs3~RLT_2AY@6YtFZ5DDKPJXB2y80PY1%V$MR~kTcYZTrm+7m0jHr)I
zkyi#3NnqU85-qCH={ErZ%QFL5L3x~{Jf#}wvE;hYHaiXM7Y#G+JW-0P<Os<A-YORW
z$Q-*e44~zc0A{d%QCxfb3k)4#8E?!Ex<@w)SyfIh6ghaTh#}H5@R)g`ej$P!smbs3
z@5l)JP8-jI5N^N0UXKJR@<5VuKjnPkBhv0)7S$i0Vi#)T;VM{In9H<3F33AAbO8J-
zQ}x%DvCm!}f}q=EjMclj&>xBoSLf*9{IoCH8m2`vqcde=03hoZG9PQ#xmZk93)5ul
zr;115+&A&g6n~F4yuZJA%R(Y*%j-NO`nzAR@&Rs!(8CedRP$jv-4}sBeGz4k<STIO
z5f@ZhN!8gi2P;f$Nt+kGgjDQXH65H~zUd6V&o5UavktR%MzFH~AN&|n&jNHC|AQZW
z=syrno4kD$m_@TP%sjwZ%EFKb?`>}RN(!Hdik4C3SD(ObpCFL{2li+ioGeTlmh^?x
z<#RA$z*~6daKsO`WMcBF>qKxI%z)KdjfMfGIPfOmq3%#}myVj5<Yh9D2{q7-`7hzw
zMW!&#_RY-A4{;I(I5HW@4k*dZhU7bJ9e|3Uo8_N&b8~lrD{3$&3V^Jea+vAOW^24}
z>;q2=DBB^P7_}ZTFi-nE@y)u{JRUgE;}^~QYr1&Q8TC3PA&fpncj8&nWLWZZ1>{)D
zSYustE!okK|AM6d^Q|)=#ZHMbDiAJsWJvL-1YbP-8yF!Bod+RJRom1|!5B3@+-e<3
z;d8|EKy{-(GmMWc*LC8MV$OTDk*~frXtqJn7~t47xErZxyz}!RqKPVkqR}L0n=s5S
zVy3ZjNNJ6a7!35jNI76FajM9-p(e<tOp51bDPb?O#^^*^0JLNq>ttj}`g>IIrKQjc
z2g=<1D9JK{g9vaX+=&jqt3b^;wiav39FMRk+6>?8I#)E5ECdLGHYka|Ghh>S8!4vA
zD=vue3pQEsnm1v}To5#*XP`#a=!MddcDmKc0i_e<K<#fG8j$bgj0yjl^{_|kEi<>7
zob6yJ63AN%NUWNgof<%>01)`|g2Vn9J`)`MAfSZH(TWaQs|=O^oaRL!Ns*0}Kvn=q
zzfL`ww~a2gC^fNF5#mw>gL8s2!W^^g0D>8mRZ3wivn=>@%1~)-y-U19oybvOi8BH~
zJcKzucih+!S69p;<KHZY-}NYaILzn*eRFquN66fN)4W!s2cURW(X+l@BA#!(w0H-o
zkRWRyum?-i5QJoVVEHpw6w&;q18{K7f~pF#`jE*vK?GevGhZ|WwBZUe_2I(^6}!kG
zTXlA_Qah6}`xi>g#ANAT|GlsZfTDO}#eYJh>Lt2Zz?k$;0YLpY=aK>w;Xn|TrGTlb
z$RX+?d$_OTcGB}eK$@Dj$xJGNIy4BZMruPOaO&eT@(M~?<Gm}ZlEdO6qkueYQ4|ZJ
zXug7QJG98S00=n0Gn3V*0z{s6m%{9z;`|6b4P8%<u(5GZmW7hC?kFLT3P6jm3iggN
zFD^1Fj842T{I<HxN?|+nU7U-nlE8jW==HSF4PNrJ9<M75`-fm9+)OU^1P{Q4yfEMg
zxFr?K5<ql-uxSiayWh;1AaE>IHMEe^e6DY-t{KW!l*`Sb3XjNopqou2_y354Kh;kk
zL7uABI*FyahL7a!pFT*2NJeK_ZsCa0*|H%<;zC3Sp4PInw;G9*qD1H?>qVrk3JVE<
z#CSb*gbe51&(Jhbtb=lE8>l-mNXT6;BJ167_!@rB3VP^FeU8^|GMuQL7x1k0z!ntn
zNS*$SVBKvoOZN!^vHD^6W3O7#qtO+8D{;nP>h%Pl8@$^Ex+?11DZ!tFdc_wi_Hsj<
zbmdGqvTpV}of<XDH8u6IbX%0}e$maxu4og+e{O!L3GUIK;wdnG3&%XfMh-7@9#yW!
zPPRuX{{MRITlKvZmcX@1BZgAVG0~`y&8B08LV>{aLc+^H2Bf}O+90jKO=A5JEP(1?
zCpH%ai2ItX&#WEcVSIgRfmTcfYJ&BbXj+59pD&UDB!)O(yC;qyjU39n@D+8aR8KJl
zt4OeNdj|Y+Hu`GBG#L8X5(MLikjYTn^|Nm~N+Nh@94C8>AT!j?x0c#2vDz6gwJ4=6
z+?t3WIq25<dIR*Jj4{CHe9j;~xN9Vo_kHE0PHP7q4F7g;7FCL-Y8yUeD^I0sD@u_a
zlo8P$5tR|!kfa>K*GB<E@8CvHLkr#L{A=Oo><`cRe*vG+Mli6dG2-h9Fh#iVJis$U
zu)hs0L{hfCKx5rlK&nToph0A%`rgY}XIX*utmE^i#E37^?a_&~^^pnf&6&!OAT3*r
zv!vuiUL(`hiO%IHtMzRV31>z5IDHizO$mLKb@3-C@&eM2vN>~@wwt{*oCW|WYtZ9U
zD}7<vHt~T)QJ=_&XZYL<=DmQ=T2Gv5;h)LVHQOI1b>^B%(!Q`AEE+e5iux$3v65q`
z*uw>)tLYHVg6ACx`f%O{D%@%?!Sf1=c#6=$>ll!i&<HxQXBDlx!amaAqW<mwt|cE8
z1b)VCCgys}Q+sx_x5{d~5?j&Roz>#ilIeM;ZnZIlMmFbhKvfI7bV2_IG_du1i>{46
zfGmNyIzo>q0nh5`qN$A!*FDm&Z19c1hLuNZFoYjO!Ur@F!p=!%9f}#s+6KB~+S;a|
zPQ`&<QK3r0LG%ka83Y1j3A%&$JmX(JcZz!?OYlOfrDT|_WTZwuEDk0a3wK6h$o6ES
zK=82H8OxW;d!!f$7A&@e_S>kG@1d*Nsj=z4(jOsYHPnt!micU9RGbwS3j0*`C9*a#
zCp$K@Bq94FFtQ5&)EJWgNDS}I$|!HAhzJyJQbu`i1Lz<e!A8=ucW4SNf;Jkd2$5@=
z72o1*;Ff#OzhlEzr)EFXrNim);O?v+d$5P`;9GUO&-UUfS!G2<ngF6jyTqy>QCVj*
zDk9AsO~Ll%`ko*bEc_xVgS1PaKqxVfO>W*(|Hv<DaJ;JQdh5u;W7qL2KBQ(p;t#w2
zU#MkEk=Q9BUHP2>V;gA#7AGo;Vnc7KiqVet+UO-R(*kjv<7VoMrWf|04-`PG<)#(G
zNED5fFwYnPIsD+To)VF-N-=;)OFsnyv`DjmZf#Lgd2D*LSc;Z$l$N2^{0y=TDh$0w
zRd+}R7y;R;%JvWhc)}85D)Lh55c-VtHJ<~>um*kZAk*7eEUa{Yk=<_TOvT<ly*Y|i
z4`?V--Z)vt`B+z3U9@EW`q7BNwmzO4RNNhCySLbxUs_L0!6!g|0n_f(1qOe&UEOSs
zga>PW%RfMK`4G_F75j5rNy#ftP7T|IX0KCa>Hv*TIeIY4BqMjH0R|xtYUVU6H%?a+
zL<_iJG~)Cq2_6Qzr0Jtz)$K$M&U8X|6GM^=fo2|gy_oml;*DqC?uqH|qw8(|3DfRE
zW9S@&qu_ZqwnOL%Yw&rHNG9NI=<!*>z>A)1cuTPsnRz}@fW1`Mc*f$mllmcEFy1iN
z4V~qudMUg1$kB37a(&H^Qn{FCrwkukF--Qr2d7bU6$ZXbb*76%F-<fEvJ3#!P676>
z8$}W9es8y>tqYVoq1qd)&#o5<x|5)U*$tv1SRR~IB{?6R+g-kz5*rE*ApdGj%<$9A
zxZ80K(j_d_HiZ|OBu<*#Au<e8QXAYyAd(G+k2w3jc54YVqCjPqLAi~v&?gEK;rlmb
zF}{_27WIKk)@OYXp8{d^i`$R6l8;o9-UJu#W2ySSjpTX93Rx=faf(n{?Q|1H*Q;EO
z@2JvzZTU%U8^)W_*D_1!i@$&rgS1W`?#fl0NH>-LkJFs+ksf3=IN|;t{2PZ7!S?nV
zFl_q$_`7jTbFjnxL9F+*>*}DQTB*@xt-*!b+)ZfItKN>-5=jWkss0ehX*&dUih?Jt
zgV)HnLYQ`xH-sQ*Jf#AC<oNX8f&$84qI{E~SdtbCmj{Q{Jq=HD$4h_wp;pGFI{?FC
z5p2`eH|SGZr^|tSGMe+N@5s5O<w*|LGhx*J^>!KOU3tD1d?>yu+XCW3qq00{FTz5p
zkeiDapC--=_k()UuW;z6^8eAf{QZS~hJs<3^J@Xre8Ad+$LR!~KCp+XLqXr!B=taO
zD2uV(%Oa(Rs|-qQNJ7+n`G6QS5&^D@H3ok~yPDgBc8_uh^e<ZPAi0NtwG{pr6vf_C
zr0>av<#0Q;TwgDZz7fkgr6v`1yT8Sieq5NEgzxQa6-NElwCewCe0+joF5ZTI;}bt+
zW-$@uTmvb+fCrR9<xwB;f?vSJb0U!Vv$Kd(>eL&w%vdmoZx+;3bV@Gtf7!Xg@q`Gj
zmwUgunef&p2d|IUo`8$MZcckPGv}+?9!|c>AX+Scz4^)AffW}=E$vUnEt*+e6A{Xj
zmK0eGou-cws&x#Cs2^nWo0TSp0|(~?Ob|j69CGqm+%gj$iT)S#ieI<`YMPH>#IfL9
zdF42v>HU(ioHmc&*MGbs5+2^;;>N}_c)p<!^Tgujf6w&YDnTi85K*E|4__);pgEGr
zDh*LCE$uQ4+>~)uOyy9K_PdWM*vmuSub+dRMF<+F@|5v^!{T2>C^t^(@$K$vn}`e?
z+r#a&R=jr{@9}<KMmJf|+q907r6D<?q;BUb{7znfB(woaEUV&_k3^YFlack2rFfpa
z=rW(acILgGjW$Sv>kV=sfo{AqszrAYos{c02BaMA|G)n=6#OMOk-OvW;5YR<*!^tN
z>H!rAjGegM9*1`!6dr`+86TF-)0#%EV5Bys*&(bd%8&ovZoQDzID@w*0^i1x8<zJS
zH9gJB3U3ak7yY2wMPV*I1B;QaUAF8cW^T&3oH101Dth7(!Z!Q8_VjRhGZ8IvQINjZ
zZKG;&1m=ladqS=asTZNU`p;v3mZ`EBaLe<^paI;e#VxS-?=Cdd>&C(>LQ%s@i|>h)
z=kXqLFlLc-Zuf&1zhb9!m*MdF*wYw6$_S;`{SS`oZ7S30P4ie_TM$$mR3yp2d?PGm
z5SI6``hl0oW`+LeI9qD>7o+jcddbA+qxMSPa~<EUokp_6vtK)_zUO&m#VJ3&lI+S*
zXruSvkSAI3zX+J--hJ{di3_hYeXRZV>m~1?R;uL{#Z^`tzd@P@$=j-1Q}0&nI5@6P
zeMT42Okg<@L}%Bt4C0SS8LCW(uuL(Q=oV}7Ggj#AY8(Ia%w2mdou6-H7$hp;r=xFZ
zxPVcyN>u(6pAc`y`8n2gWiK9a*4@w77r$*6sgpki^nJc>c<A`Jf%*D^-S?y;?Df;+
z(z&nlA+>y4z!3%NlcqyP<a7p2-&TCrR>v!bM_wrfBxO`cj|GVC%s{KJw^mZmr!Dl0
zs+UVZ(2H+G9DTEHKb{^>)%a^6b6D!R+}8sjcnt--Y5k$w5Tv@0hu&?t)Qh?mj6eQI
zz+D7BTm3P>tzx*?*s^zj?vJ6+4PR^X{XjVId_#63fnM4C-LF>?j~amg8Kgh-<M}DY
z?*ZwDx-;Abfl<9H4Sw`zX*rQSVV_d8I6n)l=Y`>lAIcEAC;ZBmi5#B-M#}NAK{G;$
z%$Rj2wpIP{USb2Rj1Aryz^Mm70>M;1@R<XTzh=5{L*};=QC%Y1-jyD(%9|GP0&>8u
z7@eMG5n2~eZ3(IOzigV47~E31^mP)&M~$@FPXGT%d&{V}mMvTqcXti$9-s+MAOvmP
z-Q6WfaCZ$Z3GUFi1a}A$+}$AwE<xYQ-e>P~?tSC^di8@bfbLbbO6L6LS5us+xg#}*
zG=Y%ZGV4Vic)m9XjqMX!cU>%Os<b?GjL8r}mN<M16>JSm10qxUcBm!@Um$+H6Ep~T
z+taI~nLoLoSYa4?sNtMJCWAGGU2zBJZ}3d*p8UJzCs9GQ23@uOm&q@)wQo)=1Izf8
z!Wv%@Ob$S+I?t0EhsCeZ_B>*e4rkz@j>~grRBxIp%#PjNDeh6+2y=$U#BgAl7$#Wy
zosHz0(GS;??PSMhbk3Bmfw|>!>Vf3rEx@s*VvE88)mjkcifoVHkBeN&irr6S>e2d-
zOn7^BOQoboCkzp4??Al=GFgC)G!&@WMDTGBwlZ+68;~)Rm;g{l5R!=#93`#9+d5oH
zyl{2z4CGlIOQeM=KqX}FrbgO^5X8eW0C@hfe^jP$z*4HvZ|FI(-e6z*y*fpZ6t`yL
z3Dwx$kFj2rO6QA%=-(MRoivq1&*x@OyC$RxFENT03FqP83)9nIo5rV?AX)1?)%)sq
zH_ddhXmz^o+o2Ua&G5ixLFN^FJrXf-|Ey*g;GbJb9A-I0Kd4E>E%F<2dsip_Y?qHl
zO?rNerAOW_Xn5>R6Vf72D*<0`@zS-{Vn0!$3AtGBh1n}=2y#VWrT-v(H%$O74ycEE
z6R#3p8b+-*_{#xImW6R~IO}U+(?T=ou@K^i)mm}1A09aI#rDq$H}cUEPce>ADuN{h
z#ORd9GrKy|3M2MLk&}2DF4co$fLT3pHS=bnGoAiJA8-#qTPTU$OFxg+H`8Sk$x)oK
zQ4;fd<|W7s@aVmJwXc0<HE4xf3*@7Er5qm&o(WD~yh@lVCid8q2JYfrv3Y=OH68`v
z#ZZ5N(1howWKmgp#h1IW%5dW!@v%#kMyYRpr1AFZ(KcHGks8Nld+{TZE?)F4V?kh6
ziW_1l?gs_!aqs+nt1(tV^EDfSs7&CZ=3i#oWSmoo1!QcVZfLx?K&*`L^%cbL37Zcd
zQZu{MIR$xJaGtmE8i#5!N~$Ym-`IIjs6@Lq()|MWI}Rr<5IB3KRRC53AcXlYa@Gou
zb~@K^h$`OM%<OkORVWD{zM~H@R(cWc?LJwtb}jO22%EvHngilN`awD$`Wd5_=Mwgx
zi=rR5>m{BCR%yqD3SXs8Zki5^{I>o)qkS{L8Rn22Fpy;FGnSDh?~Gi)Oc2xq%6JS=
ze1VACm9XaC<Zw%w4h!ZC#htzKVFvJPgBoz>#@l!HV==@(eEa_Bv|e@RIOg=Vp2u_8
z<L&~5oR_>O9jzU;9|2-+Hfh|Dr3tPX1iN^o_fGK)3zP_Kju2d&>bob+2p}+dEc@&e
z#6$GkCT<f|G~`}p5zgz;(wTCf?5q`nd;y^{AOiX9#Pa3p+nH<*yMg`8v|e(Om8?}%
zHE;Qkjelc-qm<|LoTvS?mxA00F^f=A3F>^-OPZZX3LsHx+`;)s!fqwNLQZ6KaP8*Q
zHQ@?!SB~fQ^@l0`xl&6lfBv@Ea2Ix3C-pGhFW*}*^g2w5RW&C!Dw17q8zv;Pw<a95
zJHox;$Qd3fbZ4QSUZsmhRO(N{jd)QbKb8MXhBY?$9`%Ak$kDFXae7NaNpb2OA-i?r
zzNoMsYELmd^+Ff(f4-MM1te%jwpIp0>jHEAxPz`OdPILa*CLN{J06dJOt--XlU+{Z
zf)1=zDly6L7=+pHA4l%W$o-Nr`h5as{_Q@2>MzX$gl7HMokGel4si4Q^H%>C8}=XI
z_m5oqe<9reH;?$YZYREf2nGULdb>D)&g9hpt5~I<{(59@$)8dD|NqAr$;ZaML#XFp
z^sDa(x5X8arNnj6{)_N3=T9qZ>`XiTobTn9w6+;W3~Bqzt<S?d<0Fc88#E!~_@B?0
z1ydVmNRS`sx-!$KEPh*Gk9ppUcBby3jk!P|bG9?2eORVl-0OUNORrKF&c<&>p$Gja
zp3oKEfzk2|r~j7M|I7>6UEssGg~7L4)R*1s2inW=`Q5w9h39$?E%rwu`>}J+C+iB%
zI^(?RrR}>1-;$r$^9sf&EPLIxSoRk7XP;_s<zDNCs(<sT;;^V({_63}$M$BZM}gba
zF!^Uj`Dg2S^6^EcoyU#e6qkG3|9DjXA4K-R4`(~dkaw>NPXzi{2VRBJ5+S{2L4@Ly
zCzZ*pw6DHf{YulEJ*TvyS5Yiqo}mS#3E{t;;F06D7%G+-&a!vDu$y#mi%8>$#T<7}
z#`s4U|6{h-4_S622K2Hn_PgkZ!>DHF#O@n$jF}0+%o;h36bxqMnp%Y$S2lW_Vu5}7
z-@o?Yv5$X=09V3W*iY{U%D>+X!To7$-L1C>2jn3xE{OndP*Sl`{m*J0yM2Mvc%2^W
z$=Q&Zqt6+V`JrRTCd>5~b{L-4Q>7hOB)RLrK`?lcnSdaBO4`E7#&v#KOVij(Bk{N=
z&cQ}1=BW-vm)DCjISVUW;7Ld{e(_yMLPBcDf6*}b#3S3im<K&;--3RO8=-=Tp8LBS
z_k5jI60=3@Bw?18=C~DYWQN7BOk@eO!;Jl-LvE>LO6fuRn1tbj?7XG8D<IB37bouj
zm~_B#jj3-hJCqYL^{F)jSqL!N$Qek7P3P}Rwq1k1Nql%q(w?D_^j4a-g-VlmKmxOe
z9)T82N}ZXr3mJsK$waI6cmdIR#=uPIl>e`d@6o%6h2(l?Mo+*wb|1}800(_xlov?c
z$6rsf;savLcr}!6;axl8Yy2@oK_R*8xep_x6<N--n4EHkdnv-}hpXuftNM5xct&<&
zJ-~V~#CiH=YQy$h2>~{MGoHTvx2u8WBd2lteu1+-vHT+wsQ!jGs4DUtFIW~PMp)I>
zP+Xd1++|#>r95+<@~l65phB_gxn@wg;nd%b5YrfFnL;-87W;!tRC8goipiIMV1+@D
zk&ll4F9TKk1s0T75<)}8_UFp=e@x|!>(j<Pf3)l8Ost+5Ed61udpdFe10Di-2Lc2y
zapN9^_`7rdx}?9N^1T5Iowz(4Iu?1Uo*z-D{0*W@V!&Ms>hiwBiJvJXhOqzmL4}GG
zPL|31&j<YdePEy19v=C-$pzy6c^bR$jzknNSZn30PqoN!pY4B4YF~9c>b(IzgvvGJ
z4?dK*7xIe3WcmvrOwA0@(*mu~U)R6ua(<)P0cHa0+e;nrI)B|Divvx^?4MN(2?@E{
zm^O6mjN7O;y?=SWkJdtL;r5-|aBP2H3Da|Je81dP-TAf>=INP~`}yFc=J9#?TbI5U
zEI`iU-~t^29sR{BP>t*U5zIg%&_1Lm|BJc(YZ#LM+~G?9Y0<3zNYuYS`j?9OBe;Ra
z_WwP`kcQ#^Xd>i4%{uYg(P(B|x7iy3f%*6tVQBD|&kZrQZ~py-r{?YX$NpX)URyfH
z*!em2S+;hULVx{##}*w2KGo~O=<Yu*d8+`$Cs>X1+shVY*Y+U_+w0`+h~pe;nw#a%
zg8dn6<-kBOK=5ppy6r9VY5}$Tz5+;OVS;{>6ekm^ayHgP_hqAFX3f(+<f{UhAe*_5
z*~Lra)F+zp%Kyc~{UD}M)xsW)#NN9TU=IEscVon&+vPkPnaD4{bNE-kubVfFYV#WL
z4YR>7Az<27Dgpq27FYkurkGD4;bsACIfX%v`2QfkKNBrEPi-<Y!fgqa1TYLYQ@9N5
z25oSOfQ?Q>P2SPr8Mt&sw0Pye@IfBqjWAwT_0KQvU<^U*y>qJk@I(R$S5w>{BsGxg
zxG;xFVFqA2|1=&tTQ3Jx?N_M$ez^S5<=J2IvLT7tkXD{0f@yIL6(7u6I<2Gyy`;3#
z+w<$|rw4$x@ppUp@FfbU?y%{3K2oI%)DsFAJD(|ubg4g_szr`gr2e+L=yr-18)`>?
zIwZWk`CZ<QTFIKEgX(`eMb&mtwPuGsXS>JI^G<3PNb*@$f$_%i;U2T4?0LdE2_9&@
z?r)9orcecF6^YyK?w&vS)`gHmYG2NbIe~N&K|oz}EJ@2LQDa;MHne)DY2a+@knYx2
zy|Q$&q6a<UI@ZRBkMH|0lO1i~{b%}^GDgl|xS8zqslJ*QUCqy_=q||G=`u_-hM6H(
z6Vf(U`Lxh=>uTa$ixdO7(a<9x2i<{+^ar4~SkqHKS2i9tgKJJVhN8#w{Cnw5(h*H5
z37~))r&^4Nq^>5rH9zk>YJp6Az;6F*t(Y=KQ4i%@MjUn7>g{7^o34}eNC#R$QD@ad
zY-9Bb>7?~Yw>n(8yqL|5=^xRRPfg1Unh7b73gSh>9tY&ofFd;RKYun;xm=79w|7hM
z;syY9;kSRSn2i9inTg=OwQ0xsR}Gb&&L4#K_d=>lV(T;c@mIU6=$+8D@I|>g66~zA
zj@Dy0bKW8tvyV})LT)HnG4^#7XCKmStnA^X?}6=iHt^NZ2ReE)tJz^IF+AFt!Qq%#
zZgG1z7@^o07wIcanCqBCEizPeD}HbB3*<j16+EJ)EUzi6l=`uQHaO#5YjYr7OVcL7
zN*i)>|9tH06_C*C^k&s%f3g0<4K!`7NGWp6OVTgw0ZIm+*H|Zg89-n#*8r&!LSJzi
zn6v&2{SssCM`kNqMTtGq*Q}57s7Km_|4t*L^r0-OtgB->nawi&;5c1}J&QwGl`d_w
z9fF+w8tYg0nLaky^}58;TQ2v5`bp`t^NH(|{<adjL2_XrPLua7X_hK)!K*L|Q!Lb@
zqd%5A(565A*zJ!k3N37^!awL4ma#Y?SYp#HY6T^*_H`(yTK;+Fel7zjFd!QcE>QG<
zoOyM=P6n8XZ2yrBs&#2;Jc-ze`#QI?wSXca{&$!0GfHQSM2$Mtq;0N60OvlE_Mfk~
zXr%Vk$|N}^)1F#rS68{Lv`7nGF{bXUP!D~TO!eSa=J?y)>+cQJ%J}VdtxS|hJ=p@t
z>(3*S|6S@ozhMHFU?Bs8gNSlc>zyPB)s@3O86(3O+rcl8Ve9CDt_>RbD9=SbwKf4a
zWk;K1yjeNZv0i9FLz11HKX*Ld)@z;3Xc+67nu-k>PzK&E)cONG?d>KiS!StCGT~!@
zyU6$Cv#TeZwSbT-C9hKHWyT1`i|Uk}4a&)8nT(Io%nKmNT()>y_^`cJKvT0Z{qq!J
zf|Ws*t_I<q1mb-{Kb+i7)qK)~gjeMQz4UaQ_Ok6OcwWso|Lxbrpv&uS;OtYhqFH^!
z<}}E!upMUGNaSrKn_du1ugdBpgt3Q(a-@$#WJWCc5=2--G}}FZDj4croQ^E-28%N-
z(WtdpNZno4J6Sb0`KQ!z11;b*b2Jj^^@I@9JrbE;O#Y?1GvsGYbzYu15+VyDH5)B6
z4O0OtH9G?<Jqv3&BWpP&eI6?-0x=MdnzHZ6C0VNRP9FK#GS_MK9Umo?u$qC*^aoj!
z(Z`cLc+mD@;b0>;<Fqyw$orgH2%HFEey*C0yOwVn4pg`j(MagW(@lwyyo5CopDLru
z!*Vl<g4=N<V@<vknHozsYHIMRm86d~lnc01g^@7oSh%1pkKx8;9U{;ch67*(c%Oep
zZ()+$(4JWda-SZIwzSAm+=yb<S@kj5o*o^w5dg<lsTY~24i3`6n_HK);<4e{``WVU
z%lS%>k_*e}51(iq9%>(vF2megotR+rqMN#-<4VuX#!|sEt0>dxs*?j0OBA$wMo``>
zCSsJ!kRAHJHq4(bc7^rVQkryxT%JYS?_j5@e^*lH>#4LTFSn>Jw}{jQufg!q+_iu{
z7FSl5cZ3@1yi<?^gSq*}3P$xC=Tzxu)J1yxhQ9-u0=^2dmVK#gXX52&;O%%L0ODpU
zq7-bN9$plA!^6d2^lqbjYIY1(Mc5ZnnkiFbEOTyl-1+2q$@XMXB~~9jHk)d0wk}Lk
zn_qYy7vt{%UgSwHRz#GaIVK!zuue8>XIKW4+`cz|W@}NuYc59;N=oT@)J?f-{-2!<
zyhw7b3^@cjW+ot`EsWpc{h2dZX@J{AQay+5Q6=9c6A!$`$#5xTd5t5LVQ09e#HSh+
z*Hooh+NcXjb8IOHF3AawuebfuQBVWa^CStik#4N7J4ZkO{91ITzi5f0B=qa>$AOjJ
z>-UMvtso%MGZq)vGSF0f^X~2Wdjt6`Q)86(GCz{;{cawGWj?P`-O;ZY>mqJ0-<+3f
zKp_hLQ>Q^r7C<Sv*;*W1s*7-6V8{Af#zVm4Q=BTwd@34rLd5=L^-2TvMw06K-Sk}i
zD3YohYe6~$zkHf15;TYoei|uE&2zh-%@-~o6KO5-dy-@cl$R2hTPyY8vAtn<e~icd
zg$`dm2Hsg5M#!X!40D@!{!4Xk$EO&K6J$i(zm7Rqt;}1ato%)odLTN<<H;WYz6I=v
ztKEKYWPs!Nz^%|HFBwZhkm2)V*UQqwQJCg3vn{T7`@S<!pUxb75hXy9N#By9j?Tja
z)?W=G$$DU|TBFJ@tt=_CuU6m!LXGl@>|wJ5OXQP0qf%9;*2Y+<=&OpW^DHY1)>L&}
ztY56aeoYyH*pf5fzmJWK2#&4KZ48M{4^E)QAz{D;AY;JE&4IPO4zba*tWFkXWoYcg
zGvgl{B)RNx7E2k2i&*=M*jo~*A<%!s{2%gKQK2&JOvWz1v`n|mTC22_*!>3W>1u`I
z)bGqdRd)qb^yT@O)bVr2nU1P$JoMc1km%~-n88AKuPEd4I5#72!DcY&=K(s4))qvi
zhFI_zIc2q@nIvyx@N4h;8&K18l&l(#yb#+r<`esUe8OZ6b@c^h&6#N>W!~BO88vPt
z)hSI?VD<RaW;xa7xYUb@xJEDoA|aW`Wld6CfB+9=R8s6!R~6UyjIQIHqy^d2QcdY;
z;4T-lkA>=@1Fyr}@OMQZKyghc<DSs@Ab^OkFk@fNZ#VoOH){MJPn$(wZv8pBKK#6>
zSn$4=Qq1)_2maK4HA;G5=<{>P(68&|C*}iYPW#KxNe_`OpuF~m`97Zi_2$rL|A&)a
zxtflPdwg%rm!fYJ?H`|9#lpQ}W*$jXm8VvEqo0x#V)JXN%?qpT^UJMKq^dB+Rk>6&
zrZn@2m~2SOtcVq1>Ho~K%pZLH3SevgnsBGoEVuobEVnS>CsY5&r-drP&we)p2bi5N
zzeaT({eN#}p{5zE``-<heBL14X#Kd+(+4Dqyf_wIAl21*dE5ZPE}yzkIXb2VIlT`q
zYeXOKW+HPQ*t_oU&s7gZ+Ro>OKKqpA+l<`>zM3&>@-#`+oLcW?VW%%B7U!Dhg{Uj@
zY0Pz7uv%N`l$T~0MdOv%g$0&}Q90pcBa)>@7&GwV(mx8r!Ktf(wNItRxybbefq`HC
zv1SUx|D9)?tXXL6Gv(CL<C~4=J3+oK0l}IdtI>q<xdL80H&sBcR>zI{gJ+M8+>b{C
zYlt`gA5Jf8I-i;fnh$Q)zSiisUOdO@5-){PtUdl1Wbi-?YxcN7TYvuX&Cu^*Bb@J7
znQAfSIz(&`w<#%eU&9YsS(^<%%1c(<puw=EtnGuDm{Nj&dR<s;epngvfErj*Q&J|2
z%M~@N3Vy7xI&$1eMVZ^;*&CzVik_c~=1#{P9}R1cm(}h1N72+Lr$R3#J;hZy33*i`
zSf}`MPNVPd!CUS&y;(BzSnHKcb?|(WR@@H5wvl!NRmcSEve@rk0cG~-FJ)G1&}(Uu
z9GaqQ<`&gd4KKMeJ0sW+oQ2o)b0c#cv_e!Y&0~C&)1r(5OmuuAOe@Rt<UtT-9%^N&
zjnx$nA%3=vrEv~=k)6GT_2;9su8o!pY_*6NqF7E;8zJLw6~~TSX?SU>n#yyfV_=rZ
z>xrBCQKYMw%Uj-At_#elOXLW!{3tp~6gs-%2X{;q6d7shQErg?)fEONvfSKM;|!k@
z52sr%#YExTTC@2WZd@%u<Q}4+93Ba7Dzb=SQi^3Z=U?~xGMOyHkj_drl||aA6E1yW
zs?*Rn!yUm(9AD1Yb+Scq?5!HWnT0V`YRven;?}?G4n($;J6ge(2@I$On-o<WmsJ}V
zm6_A9SVDQJ4;FBozbQ-@3bIk7!}nz)cg5$0Rd??@TpZ)8S@*o{P=pQM;pG7rryrG>
zBxf_bqjohEW+!!~)`gep<>$PsWKzs5@N3VCZEbQ;u#j=n)9_N)mDkfylYg%#j=`xa
zt%b8$P;YDWPK~}hA+qdiaVoDFR2WobIxlxEvZ1-vE*dDm?aPopHQT#d1eIqUAhBl_
z&%3|wV-o)c4c9mm{q&o(WLe$a0?b6)L@X8Q73I(%?O>{44sn!dn`4ax=!#OEQtR~B
z1}9-f%r@_h=<s3jc_qx%Swm4Wh{;}mQjY<)(U}xQ54E2uDghO2X<lUzn6?)cqJXdS
zC1bHrPFWh6XYy9LXn<5RRA8`8D^rPQPR(tOCuXaZm&ju;0LJ}_HDjzK-v$i|4!ti6
zvGFacHp}O^@19UhGE8j$D)K1qB#hbAS^V`vDik1vlD^r_k40JmRFE|w({+yj)jA5u
zL%*T?&v48Fh#(#nwF*m9knev~E>B;Jq<P$U$zWIx>+I|}592<d;Gzidpb9zF7dTDl
z5qQGDIQc}dLT`=pLGE_0WHC-Vf+{M5xyg|S&`OjT8ItF_U;$nf$rV|}4xagwHB$*;
z^HziTRD|V4q>Si~5wTU_X_}?Yj)evF{u&CBGTN$I@1oKaLvkd<v^<M*e2qNcrIuxc
zr#7McQDX98Xu$-HRx*(NjYw0BSV>E1;1}Ov@6BWF<VV;~6X+^puZY(b69r0D&SS5X
zvvi{K0pg#I=^v3fZH4<iDKN1rBQ%<7ZlZr|WN~&X!KTL2sBd`D`bf*lCQD*<c+p_v
zJArIa8GYP)HA`Pu21r>(NvwT9Z6v8#47k>0xs5=Htx$<u^4shhjjZmF#zuFdGdC*8
z8BTn9wyp_sRZQ|V6Y#@MBvRI=j4O#3XNb4j|Kudei))X*Q<?s0Kfg};MT{Km8&w_p
z)v&U*wW6rCAf+f7z&)`!Y2lh$MovP{QTXMN_3@5EJjgnw6_$!q{YHsuFO>)`IC#LC
z@leoZ4#S_wp1__*oU_6K{@f-j4FkDVn!nct*Mz-)zEuDEA>tPw0f6d1t|-F%fUwB`
zLLyO@mOnDk?wRkY6&4d7>;lO4li7g=jIbCdQ&IN_9hCI&5XYz}CkP}W$VyE|$%vt%
zd8_o&4QKe$au*U5ls`CoRag1Lrj!<dm~VKn%XxV{5G-7rE=V{0W+!?kSNN8v_`k2w
zkg0&}Q4vc5h7aWpUlzY?7Ji4QDV`1obcb|r(gJ~gW5cI*UT~&6W-YbNKd|4Ln}gYZ
zIH%!BMrG6$hqg1T6K?~h3X4Z|_M`ArB~jER`^3O~()s`<N{K>GFUtVng=rb{`5|0D
zyA&BzUo<ob8My+I>jadZ2JAKUx(xA%&dR_;4e&X<adIwgb1qzSH5{SxDU93sbWv2B
z0H;~R_kxq<xTqXQY%h7o*bg~v9;bNdD%7u;kmi53$g&ENX3iHjzpoW4czOqS#B`W3
zNI#t>a)Aq)LXT#cAI;!9f^txsi*0acgK{2Y(`Tz(1@PB6t6qTn6}mm8mHkPi;%(q3
zn{B8^GwDWd&N^O@`z$vkOp+1EmBwZl;pkwp4_8)K4sDlTWQt)c+}_L6I8Iccv=8A}
z#BxF>Fve#UN8tN`t<gg-%Y1*g);IK;2d6}A{!3jxJ7IH6`lrnHutc;_<|=EnR8`(2
zO+Eyp-pWYfUn<(B&g;eDrpZZlTqO45nV(;?7E)ggl;)oh)4bP9IF7bA>HS_gpSGLJ
zv)jBm4=ZOkm7*1r<%Zf_%n|P~H>Kb&!z!%jYJ#gFGoTuXuaaE-Gr+V5aV#PCFMlTM
zd{P3%%9Q%`LfBcT&2FmTR;2H+cQ9UnSo6{0!<8~(BLcu~R4P;9A{qT)C4IoFM|yGt
z95gRUb73F0-8{}hBcY&$zDi<_fYTFa^c8V*&zzQ&Pn>o*X)3B}d}`AmjVYj%;cJ!o
z!g4EO78@dF<rpVGN_oHkWX^<d&gj6}^j0xQPBVy9MdEy%R-qTY!b$Y&qMJQpC)HB_
z-HdKQ;hT}lKDBr1u9#BB5!}A68k6yDxjoR37a-jh)#QK1uSj9vt0bYif_8|AMhuC|
zrRzpyJto#VIo92Z2*yQ*JHNP_r31`6C|0Cxb4rZ8^Tve0HxN|30HobKzz37u)s?d{
z2nMJkGlpb9mD{T$oky$$MbQbfGaih0Y@Ev1>{gWdM(m>z{)D^{JV2wY;%uvwm*e@G
zqw8x@ytK@s@i~g3lf$ZmeZl&;U~+Dhc_BG4n{DHWB?=@nCCY-gzEA)J&Q0Hn142^#
zMw^l%K}nq08&;Gf1snsmlmike*=^T@Jl}CDd!H&zaNkREhi6v*GDFDg&Q8w$mGdjt
z&m*1+Eq8wr4$D#jlzE!N8v>rpH8Caa6=(7FMe%J%eF`3h6=#N(s0iw_4Wc>jrowj5
z!>+=fYA9XA7!HUWe`Sc2l`D$72Jtkh%I04V!F+6KfiEg143{cKfM<9&WDyoZ2Omm1
zIA{sTlDA}8>$_xFB)MeRDHgV;KPiY#j$i%Q!^OtJJJ=z_C(gmxGsf?ZDr)>_?A&1}
zhQ=x`^o9pngE&h-{CF2<a|@pUKN-5h?nk?kL@9`s8Xkp|)1tuABCYS&7Z=9hMp{~E
zn}Ejd_mHpUBsze8@H1w!!y(H|*Hkh!-%(alJ2;_0PfTxN^_cwr+_PrikVpPC&g<bl
z!05;fL}Y2o%D#`yFH1{I^g5_lY<8p&b>BCWwTa5@RF;>QbyM@UbJLJ_Q;@c5i>oG|
zTb%30%4(=CIfW{#&J{kPVV4;kN<CZp7509DzWCRBHA2S8^p(QVf2~b^P~DW84EM-*
z*mOI>v`>Oc5vKwSGmN+ixp9zsi+1gZm<@}AFJxCEfFXY!-pXLHzoj0O{E_H<Bug(o
z9*jBF6$-xd#1AU5lzhMd@_yg-nKC%!blvU!{<hJ6cZ`{4@B&oJ6gBjNz5M3*c(FX!
z#jf}4Y_`4jX>9Au8G%Xt5Mgie!Q?wW)?6(X2IFL^IgE&*^{It%8n`=HEJT$6QZZa4
z0fC3CbpE$k>BwSmFJ(E2wH=`;q$1=fvf@$kx7}e0;plmsB8IZM3%#o-EC{;VE8c*e
z4HvBh99T3~o1=6IIx)wI>Od$NqfO>gXlgZF#7$<!Qzs<x%P&GaP&Y8njIdt&4a@;-
zU)Z}v82kF^;qjRXYZ@A2%IPH^Mo)mc8`Bx>WBqGirM$fl3HAx9+1FoHzYX*|hxS8O
zn8<??yEE-<Y_NyQ>rU`O`r~$<sWb2CwMd{60i}S9lE<_qeW{#VB@_pK&$<Yg4M%Ls
z4=tS$ET1qm9z!Jkw${D{y<24kDmTLWfG#`LB2!DaggzrOkbDLqyEt}32rWwsq39L!
z{-;ZS)U31l?OWU_OsLPDH{?Dqha)Q`lfKSdMUL#9H#0?i{vUrIQ`G1^T+TH=_dYG_
z`uA*~oIW~Q4Sfwvv}!o&GW%Qn0T8hph=Cwt<Pjp)f*XdVKnxoAk^m?+&j>LR+_aQT
zgBVN^$#+FP%upnV45A#LkxJicZlE|JDvhl0;iym&QNAK;{UT=Zf!_#S4I^4i6q08s
z789<So)e78T3m?#cCTANi8Kxzpb;Pi;pbEmQz9eM=-D@7#Jobth64w^rZSdMVz7gO
zHzI^^Y>JY>Wh~Ox*o<}4<D>Il<A&dKxcpkQay*H|{b<$TO(P*(9>^p)C#~DJ+CLm>
z^TWn|2XQxK!xmNo!G9EQSEd_o5Ove`9F1uE4hs*c-aP&I$*~5@mfD=EaX>mOJ`((f
z_HBqYS-Mj_Tq_}A*80OHEDmR&<7&H1Wv&G6cF$m}kp#l3yx}#LoeB9T?+7g$PaZpJ
z67G_ccxG_05Eg9izLb%4bYX3dW9(0#kEdH%;qe>7PRG%gHBT;Ak54oQzdnDwPE$?u
zYk8dCVBqlee;jZ$Xuo(U`?m2B;e}><vP`m{9$VV$_W<SI76SpH3Hy6GpZ5GmA+1pc
z%83X{QDQrQ1>jaz=boFdWn#1eQkbwZ+PU2#aWIy{3XQUqGS%3{#wbiqRIxHvMk|il
zTaz-f+uPY3v9MMnMnD7i_bzTXC7Exadfp9~nVF>w(CvyLkP##%rGLUKgx7`s1r-h*
z_?8SsY!Au+O0n~KO37G474rwu1{`w;B_1G|R3NuwKk63m?2LFBp*}*V!Wadqizz6f
z5#+gOp(aKQ%d^;0ydf)|;~m3On`=6ckd{`SodfIX`A%dDYU^s|re&X=l6<KtcC<D+
zI@$hdwzYY@x$^@jHCGva*UaJ<as%8|a35}RvITD$lpVZ=1{by%U_<T~iAxoEsuIg(
z*sE##k!8gcwKyrjcm|>M_jtnby)uRitR}$C5`&VdG;%)prEfA|YLle->Zb!?hNcBR
z0+%Y*&1oE{_HY^For0qBRj1rI`2ixs`Z00m^y<TCBI?GKeEUrEPRGx1(KX-gXjP6E
zA-}`@vvo{%gQuM_TT#KgRNO4#P6Es<&(PnYv}k1nnF3)%+~?7po7T_k)U1Qw7^o-M
z=sP55mDD%JRtcyJU%!C=qfjEjcLN4*r=%5tN~bFb)wj&$i!}#~I>mJtI+@FVXxap2
z%P~YvrRmT&yLkagQJt9x>ITY))KR0}M)<rmj|VPT0J#e=r9tC8W3?2Ea2p!$6>tqh
zE)tY2gdCtifs&<IuVZc-j86H1oU{#YV^kREP!i~OP2LFe({*_5#t^E)I+uGqFpC$w
z#2b`sqX26>HMLD?I$GXOYNa+LVR+>F<i5i8>g90)iwXJpMT`Z7WwKNAJVCwQ_ZWBk
zN|+)NWTK++4nC#GU}UMxW?AyRq%pdxLQv+&S^Dr<=BQJaoFiB2au_LrbC$I0I9leY
zm>;SGE~g!12a;;9=*u>0c1CAQGn7s@)-JZAi?Iaw#VH)4!rnWBAq-%4)MFc5tAx`K
zn+z$Io|K0cR|MmI*Izpo*>2x2<_Y#aIFh%WJ>|}PJ{A0U`Z%|t*m09A=Y(Fnv|~F3
zi3F-p>Zz0!)){*)yhYXIV3%0}2cZ^_87LdPl@T$vM%7JwPRyxl5K-pxa>;lpjC9Zv
zs?`vQ1mn4*qke%?<&Ix$fw3pog_S5tUt9$k$Ft$t^p;9Mz-70WN0jnVbTMk)ZZ6*|
zJc^LBwtWoy;1-LY!Xr-0Ob^>7g<wvW{n%}c%@o*ko&eCIFiUP9;w{Zmw1MoPgO)%w
z?(Xut{?&jlZ;&)Jn){ab=bx<x)!dNi=?~&#$OCNh#5rdXc*W$7N!qgYVaM6@tL%lT
zu5V%?u4g@`S3Np3raye!l&4xJ*o`sbdb)+7grT@lm~DtaGG(?_nXt8GHizZ5#LN{i
zi@=W~ma?N#+oKAl26d)IQX?Z=>GLgWvVd0$ibPp{S>Uc0fxfP%i-*$<8qwUXLLk*f
z6oaH&U%m}JNLv~ffve|m%YerYaEb0#M)r9gAUvluOMlB4fJh-3lUFQdR_x!2{lT4K
z9_oTk2=K5*k3D@bnw-)_RPc4aD00Nee%OCm5kzfa%zTLtu8LP=aq@7JF(6!9qoj<A
zimEd502&K5OceD8556WO*#&o~m(z9jA+LOYuU9b?lYR!DEpwNaGL|~Xf9?MSs*^>Y
zY$x;4S)Pt^2$c$W)EqxPm2-PYTK<ZhTumnHqC<M#S}c^{p~oJpvTr4AV(4OI6!m?P
zd12y?XgXFz;~fs`S9s_9Z8#7ak=^j4#;Bm%k9K>8RGr+H;#vzUp)w5vk7R|Z@sHk;
zw}<>f#V1%1;T~~_tC2_ZqV29^Apvi?>AEFy*SDS!<9@BXa?-+pej~htKD;^-6yj+Q
zuis8#eGb(B-nx>2d&oe^h>&BUkjD=QO`rw{7KTjv_bS1<%{Q~KVX^_qgNoUx(s(%Y
z<QGu2;M_LOrXk918pnbA484zzrHGqoSST2XcY9m-2!JsDDnXXhhQYA8O|njB0f~3i
z<P?b44Ft=>gOtnM2nklcrEbfcdoDtR?6t7kmR<Dh_~Sr&A76hXPM6`Ahu>Pz<rVGk
zQJTEXSP8jar;wq=zI5gb6NRA<m0aYl#-B%vEx(791(y_I*r-dFbJR{jWFn<XxnFbl
z*hFg0bD&6O*R)j>5s3wjeI~c;O?4>0h3;tEz9t<iF3w*&y2UgTkrTZJU5Y<PR?w9=
zs%3W!2zux`J;z~Pw|;G}_xN4%E0X(Edb^~^Xn>@8u#Y|;K6x)U(;3wK?yB<3cF#jn
z=t;Bk;Ro^t^e?W|#~C<oV5N$br`ZJJD58W)dIeq2p95blh0ZHvM}A5<GS1)F@V{gY
zX6Bt2>a^ly1>kqHHgSAGFbc2G4N3FB+eAH!s`$tWh2?}cH1Q35?jjHYO9b5_CXj#<
zVpq*TE3Pn*(-^;R@&YU29A*M74_U6RsY4lMw3pbTUYw1TH+^#(LrVNgq`!}az3u=K
zFzh$aifP-FRh3i0J2a9Siif!Uw#2=FN{_e!ho`#jcj&uM`F@n3NV;~#v7ry!HUWj#
zziEuezn5l`I|%lEO(p?(X=5v~C?9dpUo^lCivNIaI)pk4nOhMnGnJ~E%ogqP?hE^L
z<rZP8Ey@7D_b7V1jK%cos|54Qs?#TvN91!41|qU7KM{Mm&aQ*+^}D8yGYWf_*&HM7
zYKiWl9*^al{k&AiI}3N(3n3W`bk=E-=gBh=6Ld|}wL<QBdL4l`@HxUB&4mreeTd3$
zJ9i~Ijr?W9;{DUB1Nq$s6MovJBfA9g-#FNM6t;6Dz7-yzpbdqe=A(cE>0vgGy?{-}
zzk8}w=|zGWDV%=7w0$5Y!C4k;`}XDg*}Cv{nA<7;;u<$z@9?2WPhRa*l++?l7&z)A
zhtvCq{Nj%p56_ptg0F)ZL_%&tMyUn$T>||)s~d1x!#5~)b$Qd|3ss8Rjjv5t7h_LA
z<Rrp=$T>TN1Z!z~oAw9W2NbJp`L3cb0l(x4>VDCMpI|aZio8d}-rFysgb#a!5Q?|N
z7)e9B+>4-M8FhG6y`vsL=g&xBDBq3r@<C3I*J9m`Hftd@GpI@g*OG|`YQ^av>io4Z
zD;cjx7p5n-6&2-z!s)P$hKKSovec>y=~CX=b5z8Y3iqUvL+3)gNg3y|+{z8=T<Ahh
zn(eH=g9Y?jNaVhOHuSz;ZVmcQHWjt6xgYke$MpJ2MJK<OyQN@(Wgur+$x?6QtFW6q
zulp$_*M_kYj&IvSf}SOiU<VVl<6!7-aHZk-w7Ax;OX10%e+$1y$i5ME`q{|HPFryK
z>P6o3HBasFbk*%tWj!VfZL4HmFCtw{oG??n=3}SyMC@^1>hCV=N@5bl@)VX@nWd)!
z+^hi1mYe58HHXyg6ecmwo4C#oQF}mAoOC-6%LTCr3F<|F&vNOdC+ZH(Pe*=^e`2d0
zSq|&v_dMG!L|zHU(BbwyzV8Vx{@Ui2E8yPRtXUW>XLKq;L$9a}a{5kdMB_F)zC<_H
z!?n0hg~X0p*nJHR3PLTaB<^r98ioyfboiBXlKPeB@zpndlMX%<d6e_JN1V<UdB#wP
z8f74oNnoYCQta2a>|1h5eRDf<6)bcSQ_+=pf8@?@<p!?jd1wv)2d(7xO81Vc$W9F%
zW+OGr#ZVnOKoB7lR)1CnBDeIK_MXdgmQHRu*4-!_ZEc>L8hU>o4G3bSd|A&_ZsUdR
zO}a+h(0vorAH}N|8wREomVNhmtC`~9!Z1Qne%amC!ltM8z{~5g-Q}p`p!IT}&2s8T
zMB97vYxxE=0qmG6cd&hrw}n|!Syg0U3UrT}+{*XaOcBqk{^;gcyD4W5$jpX@Ue7ib
z#|6$G<tF#=@YDukv#TY==6S`2syo*Yk>(Z6uPP~LZSG{zwYYh5)mXyod*5f_VRkaf
zz?UM4O9x8ZQ{P;?5d(r*1@YpIIK=Rye@Ya$<Q;wqiTpfHMk-|=lo5!YY;u~L^1<SC
zm91of!k`{xJ$vZ&>s6xD^Pv$=@=tgQTwjF*+tXMBbb&tD56ZTh)ZJt6*ipT~!)j8@
z<gFx8NEa6(oOmH%VOW+qR182!Du-ULo7Ac??_K`Jit3;K)@<-gQ8df%$7o)q?a@#*
z^+a1zt~<6zun*-9+;JZRhtMQjd4fh-WG5nsEyf}S9fI6&ylGl+Vqb7zDsfRie}f?1
zTe(vNY3A)23X34Yv8~#(pTp*bQA`z6cmvw9QORuHTF$TXNd4*E?!6K1&csiudI>7>
zU-T(8`nDxLOB#pgILf%}(qiO0N-E(kq*1wLLuN;f6*KN`&9zf(Fv)_w#^S%~_$~QR
zJwEK0PveWj6lza6j+cYMK;0f`c93|-$J-NL_ve0h!Tp~ySzUbOy(6R^=vhsaZH_QA
zf}Wd&+I+d4Y^*p32WlcB?oUT&?xA_86xW6i7j{4{N4xXKs_zATTc38%`B}IVuEyQa
z$I!u*W2}rhl~$s`Tk<jTRo7^OJ+092L0ym9BD}yZWtbb?GQ(T!r=-Drp)rEX5f+0*
zk!R#Kwkwnl!3ux^zm0@;3LHFxcp#bhSnv*i?zhvGA`i;QL!Zgq6LP*9i&fP$TzB;z
z9Gk<=d4R?NXSB5|KBjNcSV+FVj{eDIwRpxPfkPi46`KM5OVmiOc`@WHq7%#8^L=R8
zb)eJcrgO(V?afco*R1)LK3&-QZ8w+a(Lc!M0A70H8v_jc&TT(^BAjoN95o&aJdDWq
znVpgv4ug*x?4`^*nklHe_`T(_#_pkzVsSOw+UdCnN%a&I%?L^ZRfFc{VjR|T1Qu01
zjZfm0nRoCkm;Sq>ih2eo%R=fXFE8r8EHpIoF1dxwC6LD-*NCA$$c8t<4%2LL#_<3|
z*7|T&J9XQ{byhod*-U?@Yg=$rKYh{o1L>yz_|S1?3-zY{{SVVQBo57<(369y>}x^-
zyVfSRgPfFyS2g@+KEB5%=+=&);sZN@D~$H@?_YU|y==K%_{jXe?swzD+Gtj4_07Fm
zd`C-^EEAK5s<Fy~OJL}E%lg4r`FnX%!d&axf~bM}<J?UCfn<{H={HOv-;__6RCHa`
zjR_v5?~uZzb+G;YjgNk{KawxiD73SCKO3aprh9N7%|BGLF#8<fBd`hNwA@VZNh!(=
z$UG?c(SZVy+vvp@=FN)HL+$1E60BE04>^fAX%Ni2ZSvny9%3yoklKa~Cfn>aF806s
z>IHCZE$hfs#%l$p_xbS?p+FK%Y(6*$l-0=k6rrzZH9%%0%R$}ykWmJe5MH2wEYmna
zLyG7cey_MkhOLqld6UOJxO-syI40-LyKU+IlFN7&`-&T=aC=Vke&QD~9~z|WrF#nS
zDk9<czW+kC6Be8Pn#Wl7_EjIHtJ;;A<LC5*@9S6?uLPi7-n&PJf5RtPhpk39!_{j5
zG_n(M7dHriP4Bv8du<{khSENz$dz+XbTTus;mY0NSZ7G9u@Y!V|HeVCksTXC%TSIE
zRY??M#6C0kfr!P(2P9qg&-pkvilO0;?ul#j8tT9fB;F_DMM~3S%g_Z_n<P>{zmO^@
zLJj?1#Hm$cSL4feE|Tv}j>PwZqeiA+O;BTDC6qRUK~@X>F_6ATTA{|Af+AbtxtAjT
zJCQ{Zb(6Nxe6jN{m8>%z%PSIrW41OGUwJAAx}rHjSjK_1M=niy#4{=&m!7{5g0;hb
zSaRz>9tf?Fu{w<L#Z5J5U;JRdwEoc+Lr6FA%4~k{<lBv~cI(Sh%=N;2VY{B|8;_rP
z9w##!m0&+R>FDl1njr)%FzBW~-*7Eh|69E^L(%YkP1%*9{?^w=^)&pn)DlCVOpjuD
zm;86B29yFyj518AMJehOj7j21B3jfNn(T_(z;6`-j|MJVjaT!+e#dbqil!O_@N6s?
z+RpWp%ZS9yhJ=yz4wn9OAna@TaketNHgYJG*dsCXMTtiSE+gC!Ck@82j1ScQ<MKc_
z`aj?*%9+NJGC)!e1jRCz-QlyfeXUx|M#5)2v0X%}S-p-y+>Y;<Q^2MFm3bW((GGeQ
zN)n2fEJqxQ-sh>UtY>u6Q~;jX{&lU1idHpiafR^sT<lSm-stqCC_$^l(8XI#ckvno
zIp>PF3AZBdM8uO>hiR^*D0op~_C_yAIHLNFC`{I!xVB_j%l+ngiI5Q`vLPcoZq#Uq
zcpy?99Y5`tROEruL~Q0fsF5$6ZJ|P5m{!!#JmLgCNvM+QFo}AMiBw@K`8o@8m*#Sk
z;<f1|7Ms*5<(#l`J=U<yk%61XuURP3vA^TkTn{97Ci>xl*iI%giNuj>e;z8%U6zo*
zDY*wT^&6oeHzs|C84>82<=~IV$CaK!rnEJ^-tL{Fo%P?oF(}{z>*O}N-TqXUS;9@t
zjU=tNyoib}Ak58dd3^k09X?-lP$ih&Eb@CTb1gomluD~MtYXSx+L=vH^OxXbliIV*
zWNgXWyhyZ`m;d+qtdH!5J{nGt!q=_uJl`0)+yy^cy}gd?CE@-2tmL{aF}`)HZVj(~
z^jm%CqN09%WFp(&`-8@4g+tc5R3)3?hrGusPHw*DWS}%`v3D)<okX-zsjZQNb)OPl
z%I8&$Ci$e!rL?z7bAO|OngROV95<tnQifdtR)o!zSN2~!pOvwsHVRRRwsvu#juOTv
zdWM#Gv9z_Od&0-B-98{g$A}pkSI9Dprj)6fHH?e}Aul3Q1j-<OWxo9oNsP7|!b;pN
zM(<um>UAlvubxh9sAC4rP8hO5k@YSJC9r`E!nC(&ng`Wt%a8~ojGSQE1IOzVC{JA}
z#)f;T1Zxe=q8>%JXQJJzrNV^Z9VE*PS0@`7gBU`WBqrI-NZlF{uf+%zr9$K+n-9{s
z;{WyzhRG=@Q<Az&x_F-%yGB-xolt%Bo%E|nqBsom!0o#zDrQC)1PlqL<E#@Y<C$ZT
z)e-DntP8_uwR}-9U%-1fgz|zSfs;~njxu84-f51O*Yp~>yEyT38Y+vxzH7~Nc4Esl
zF2>NMZSt;Ao3t8ns75F2{=;}+Ht&OB&FWKk_8dIRyb~`5=m;y;8f`L`N!$Fl`s6}x
z$F%MB(z#$Whj7A8DQA^<XN|abi}Z)bV6<Ku$&2LBW0BkH<15|YwU3#FdQ(k&DG#V-
z)^u|p;qqPMQGT)WU%zp1?O9F6S7cG}z3bj?qYQr#0tJEv6Q{6qUhw;tGIdpeEVDKg
z2d@7yI+;OJ_^v6Gh2OKkM}k@75J|#2AaeYby^Xi;rA$iQLNJH%2#x67gx=?{`H`$l
zW7!>>^@LoOyw)FPbs`4^mPJ`^Ki}4tsW7r}q-m7Anj|<&cuSn8rAC#S8flY+sW13p
zKNrggcJmzyCw0ghMMf;@=AQCVvpL-v1#`VleV7F5GAwD?&<mH&hIW-+Sje_a(Vm!M
zkV|a@q8446hPq6-dA^OYd7~OFA!-p0mCFiREAdd87*eE*Oo}vRVq`^m;oPu69?^$j
zuM~4e3TRB^(6i6-^fmi5&8y`~M9HYkyN}Z(rAYjIRECVzaECY=XI|ziky^A^(RWb(
zbJVXu9J-8n%%3S937FHq?dD(D_=Sq;x$ll9WBSy}t3>^*_={6$^leoYTnSToLHmLW
zLsTdxKowGq|Bl|zL>x=<0TqMR7BQjm$-WWd?Yw1!li4m*zmPs|O7O~{VduTm<Mi(p
z2L(Mp@9hg!SCAov0Jr^7E~2ffL5+f6EA!D(-P$c{wzugYKB0%6EvdFBXJH=jXmm7F
z+^6v6q`6)mL8RfMulkysrJ?3p`DNe5;d%*k8a5@Lwv(|#zH*;t;Nr?hMyJ+iyw5{5
zUVrVSa@Q@Fwd0*jvGj)rgQ?c*5{?=njZgaC*Y2+tdVZpE2L@!wkBxxvZe9pLf%au&
zG^!^xWKO+*u@GKtAS&P<Jf4U(0O86@z@yD1>`fM`Pr$mTI7P99_yCVn0K%AC7(?i>
zgXxL5C1teeQ+87k{~;8}-K6&b#;(rzt5*F<Dzg!@!4m53yCRzSiL!?Z$WZ}!fX*dP
zDd!4pb^|+vSE8WYzz#<P#(eloTFobo4R4({A8saW6`38n#=btDfjgB9s4MO%69^+J
zF29*svYU17MBe6n<h6UAM?8)CtwM!|Bjc51!(>Q5$+oqpDH~Y9yoZykcT-*ZINztK
z>Cn;c$8fvffyuF+@(HCv4*nur+>fiKTt&zAVJgd2lcIf;r2=bYRPq9rxa3>Ng=}qm
z3`1E!dC`R|w9D6chEJ#oTje$ZAc(XM`jL=viaaHp+RkN&P@qtaR=Oq?dqp|+h`AD^
z6342ht-Y@83#7cT5WxyL9hoN0vDl@RtcU(BT^P9iGz5I|;9Me=*k|Pr$A$csRfRJd
zYw$aA-m#yF3KDw6aXm&cPEcuxSQLf^2fH3v+;_+^mZHmkzpWmY{uG>^Qs*=jtBm@3
zkYijY<<aUoaL5)@L_g=z#Qmav4l$Q?)m<+9rl2ImHaVtLuVif`1E^AP5HI}ItK)9^
zTU4UpjHQ0NFC@XELCmLI%&+~6Ktao~QrV+)r2IIsd0k&oQiIR>YO*G7Q}GXf4L6~#
zdo5#k4dv@Hn5D=P$su;jF3)fN+4}u^Z8%8pbp#M}kSd7X)wHA*h#GT^88$J$BzV_G
zzAssRO+1KZNm|UEHesB+WEK_9KW#2B!^mn&-#43U+EZ7uB0%k$mwp2>BES(RQ(+~>
z0HHCUT=}?JzBYr@H=A&lvLeb=2jhQ>d%G1hzNE(;M{cIUoiRbnZKZ~gJQ{)vyTTHa
zLzK-%WQ93l_|!XZ`43|d`TiD&YEVtrS*EAAI78f#v}n=g{$Wp~hcFi$_&o_R<;WcD
z(QNLu%qheuugE)tXB+6}#fnZ`Chh>=R!~zbfj%@hM^j<o#QDd5_pX)Eqe_g}^>M~m
zG^lqtJsQYT6!zpWXgTTabe%LnD%UJpO^3V|{yiPd7g{%W5_c+a57K4)+`grDABrec
zt45u2cIQ)ia{di7<KUODkFN9M@rkaZ%Ozc%oTAH(g~5jF?!>RYTZ|mvG?#mg>MzFz
z3P*XUm=v8XJ_f8~?U_#vVlEHv&eP|%4|Ub@+HL5)!6gpnT`aBVhv4P&Z)HO@j*BUY
zZg;C0-)=?l&g&KQ2}W$-l1MhorIz?5CGo}c9+ysnPU2lKv)i(~&j(s9+lNjsE}7|W
z4e-`IwGy0<tuM9^Jw6X_bo#O+QmWQ>o?Fet_Y_ybwz%exBwmS1X!m2K8X!dzP0)tS
zT+NcbUqCfaPzwLf6+SIv+#nD>9YLi={r67glF$U}d->dF&g4C%0>aJi$99atP7_9Y
zo5xYEU_}x|rO26;`*gkf14WgPlmGKC(lCYKKU5ygS|JTFS1ZOx46}|qC0~Y;<K^(o
zm^6IVX~p<SA>U1jfkf(&TI%1my(CT+%IX%idgImu>PG|9zBMR__RE6aw|SrVQlz47
z<M0;DKFyM`C4Od2HF%`-RAKbJ${$-_*OwYnl5$q+rk_3R;D^*^pmU<2P|GqZXTC33
zdd)vb=BQc+yR@2ZDp&k{O~6^${z!ogiV)NnAi-zsWIZ2e7M6qFH<1}hyq#b&-~vI|
z&Ht*CKpw-&s3HHJfn+Ilg7;uq*OjbA4N<T>I5a1?%vX43(%#yQG_wjl#YE10-XuBL
zg(C`VL^D(4t;zMb$*m4SzP~HB(?zK-h>K)0!W~Z@b+Y95T;%__T>H3)<|yEV*_S+V
z4Q~Myv}637J|RA@Ayyp7vhGx3A#FL^83{igwjY9p(>2Mwb#1CzBu1Td)_?KZdOQf7
zcx9Sm&4(qu>GyPG2|ouduP}pMJV}%D{ta%;H?s#7$H|osC#~(?zn;Ge#_8h^o53i<
zEB5<8SKlp$GH9n68n)bS^*36Evv0Kjrhgf|4BA!2)c7UP#e4mHZi{by@T-d%*HYiV
ziR0w`ej@`@$!TtDvg_}juRhA-ky(xuepnnUuFrmXZ!X_E7=$*!ElO*+?#Qe+O7TnP
zAG_q~(UvJFeA||>84cwXQXUTu=lEsW#hj*Q2>3E@W(=KR=;>yCusr?UeEZqgQ?s}0
z>Bm|ks$z5D>QdJ4$3YfnW8*D8czQKal&l*JGmcm)kAf%c5!x`W>mF?R4#u{?OhIlm
z@r-ndL+{c)D{pMI{v2!XM4sRYo+qSok-s-;B=>Esp$i<udUbn@D|$wXO+J>q(XV?}
zKib34FxSm;F7Tn^Mnt>z^to<##nr>GBvi5QZ{7_r?CD<k=r+21qBAXrwQT*V&FQMA
z68hxk$N0n~>nCVZs$Df&L5-OHx$Gz*Ma}x{i@u2&LX3@Uw=;L`_adCC*IO!H-WgX;
zk%yjno8F1Lz0oFeqzG-_6EFM-C_mw33209x<dKsQhBEMSAKj#y5yE;KO$P4lgR^!W
zr0Vmy#(wJk%=Y1LVr33?aG3nn|KZEBz)~Ig|HIT<MOE2<UBh%sBO;BIn+ECbZjf#e
zk?!v9&P{i>bcb|zcc*moUOxAKeB(QE3=ceT|E{&xoNLax25I4?DoCwHY^!saEf1rN
z3*j?P>O9uwi!+%TQ1F>&)~CBej}M1y_UtM+KcYn8!MjSyjTyuFk7g^RqI{O-TviE|
z)law{rJLiPb&F&b-jV!$#bsgG#A>ParRqwwI#llV>gJFD9UbrEGR0sKxJVi%_-Ll_
zVsSCESN-nIVn85DIVP<c)mKkl3$p(U!Wp3-hqkvvjt$j;!p)zoj_!MPiZ(tAH_$$*
z^~Hg7{!3|^C4AL{j{E+3YpIFk0;+cVn<i)__R(T}U(1YLkCz6EcEibHAeH@I^eR+K
zu29dd3oE>@maL=v#ntQa4J-PN&^y8P5uiw;$JgE6_!}RFXI}D+oY}~AcwM$-pHlCG
z<u<637kJ#XYz|xve6yb}Q&;ZwlC+y{cBks5BWC1h#yg0<c{(58_Uzg-WVO@K;;1Hu
zmd!+G(G+7ROP4-Cg({H9^4b;3Xe)!tOR&G=dQk&(8&G?^7>Z6;{rz|cvWVJJJkMRd
zBs(Oi<Jul$+^>$~>sdHkYcqFM7oI6Q{wzfI6hiwq(-@W5j`FuwOJ*#=Wh_0#TD1Qx
z^i9iCuST}#P)2h!4bmkiw8!oxiObnYjWWWjq%2t9VY^GMw!GQyy>8Ias6E-w&0wdj
z;^A~0OEq!7sFd-lHlD~ZdA4SNrCQUdJ}LaI2KA3<%x{(z`Qk5Ek7w?rLmLADM}ZqU
z&*whleNx%<HJn|~BR!RYTT?qjgLVw`(HJLO#rNoEEJ|BvvD*aq-xQq^TbBI@&EE#E
zsagY9`Qp;#!BP|@d)xI=M_WpN@g8t5*Vr|mC<z@SWAW|DjmV}_L>MVCA{Bp3vz!{s
z!aY6GvQ2%J`}QLw&~sr)y75Q;DdLSjRM}#%!+J&n6P>Le7FgQ09_?)1UEsZDEtvez
z2bn{5o5h%%JUCQ5#J`KAh*Pl`C=Fi{cg}Wk9B;>WrgnmsxE0Kt#@B)<={K4x+<%tW
z{m#fMlQ*vF@PsG-b1(0M{_7K$#i>vCmnSr$Ra1dBa57cucquMeL2HS5j^3jE{{T%n
zUL}ajaWrl8dq(mMxuvMVPpq*q2=HL0@&LU$kNM;L+)81z&TOlBZke#ec1#HqlYg@l
zBtfu1r9I;>0qR-pV3Nf^)UTeu99$6ZY8N{WcLJj1NDm2I7oR<K_p}(;LS1;6{A3}h
z=g{<!|4eYkI8t1A$!)dYUtE>#;$}*W^CYYdRt#fFRIPbGwg}a}?ygDF-1ATDNd_=C
zm**;}ymbhrIo++-^$e?t?kzP3az|x)jwNR`U9;^BpG1CTkCX3czEp_wdYK=&Z!^Ew
z+ZcOO0F@4LI9}+)(sqXEDS$d2IT(%>BVoZTPR6`Vk1e$!RP<Owz!2*%F1L%FaAm>@
zl_NqPXOh`*)#8J8pr8(d;o$T-Qu38>`un!hi(BhV(A@g`kTF1Eh|w8Dh5qp>%$jGI
z(_{bEcSe3)jn&pdO1fHW!+$>cRgE?odu-~WXDU*#{2f-j#z9fMtO;3*Kdl0{f4cWS
z`fArNfk_%oe#7R+dQ=&5!<u^Rjm^|J_sAWedfUl)TEeNxGZ8JH4G=p~VIp~td(rla
zC4)%yS<8+$nV845RwU^=XzjJbV(S+Cs#Z?G?Y{N07972c5RJV+@HN&H2YIggNFwLP
zri0^a=P$t0`?^oRoKS1M()}9$y>i2I&-Odt#ZM-N-vL?QNhKMQiK@z%Zy%sn)}Ec?
zAiJ<)jdP`$r>Igsq03~~EwH@2;}T}aX0$lqb9)(FP1QM9W$@S7ZS@KEKBcxc-G>o7
z(Ohq@*2MF8ygrdfr17{;4K`m>PH5GeT%U_O*EU+Ouv_h~7PLA=6SGZDO%>c{BVK<$
z^Lk-6J-B1N{t*=sbt3I}pWf;)ca*U6>gVRt3Xg)%?s^>Ys9ZP!{^ls>_9yf?T9;O%
z!|Lt@AOI>+P|=<V*dPylEvYSjBWqRt+uMIN7fVGHf;N)2M|Q(%NQGU?j>l2lsEy}b
z@ZIY4n!2-;ZX{ZcZLu9X|BG0++9Y@v*6OGdh99{l`NOcm#3j3s2?Heb-SO!~mTPuc
z!~x6cwX0bcDpP<~D3gZ<SJJgMjYVx;r#+q~=2E&KZlUd%537N4oRisfrl666tRrQj
zs+7;}ZTz=;RiIxQD6>s!6gT9dfJ}0_CY)G=wSPO!u){(4c!(#K{A@aJp{+EcY(nj#
zwe9cb*p4YNF{katYGN`w@owjEqQ#o0A5|qrh=`i?8mIS;6Q6vO&1;l)=H*Q!Jo`Bx
z?M^t2Xsz=jg}8kBQkL7pR_}n2@1dyNTc!WNxQ@5NI4-nUA_9oUSanEzoZn5^b!)wK
zM4peJ#p8Z&#L!owD_(UsS$evbXw^$s^KJ+^qVpdcM~L^Mv4pCb|M@=Csn5#ksm94|
ztvUab9PhbiR-!vln5QfZv5|p;2W66GlQ+C;;?@ya_2%byWk$HB<7;-7hoiH9rR7n;
z?i{w`IT*-Mz}q#ly~;3=L`yntu^f)<|2G`?%fj&1`84GmMccDT8^ec-Jg<M0T}@_o
zTuXZ$;x;W`a@e$06vJRv`&uTEsY?Ee4Zdr~k(1+Mv)G?~cAnsA_BPnLlZ{WVSaW$g
z9=b2U3&c61=;__N>ZMQ>M>a9qr+b*`YRc<C^ffM*|Hd>eSZ=N#wVtUA8!JDS&)Mug
z0M{=I{5RYlQ(PN<@pu)2BKXpZO3Z6HpKY6rN_4j29fQ+5o^&c<$b8oJ%2v73@ndV*
z%QMK~jQ{6L*q(Gzbc2z-jz_DEM$_K;4zBH*pPNW?>r-&R%{dmo@k8d`id8`-vJG;*
zBCR1J3hvr(wf(>LMt|f_)|@4>-k{m6R<LJy=ckjN;*GG};-e<Ja5&y^Uz01n#B+h+
zc4V11=Xvl*m{J~}$6)=zgtr%-i{-T_LKhupK3VkMu*M@nIjz{jdNx55^U1pgk<eAC
z@Z~2U2zS6B!N?EWP4xThD?kFcoDfQt81@2C^;#cg-m+ayD|rDL*B5pdXK)#6PC$Kd
zMC3uptAM1j+Cxi9Y&aCzY+!<Doa^_k{yvy_=`1-=Lyb7A<!`P4b^BZW;otCFZnTZP
z-D~~?3Ayyv=Y3v+1}T#5zoH(Q>I$UT>#i^LAq<<6#$*8AfRMEDOH^`gE-xg|2-Bv-
zK!(|t%2c??3GsgDOGIw0MGoAa264(O^!g)FP(<stxn0%fYisL(DiqL1*#FG|Sb3+7
zx49_WFY6;wlfAl~MHyD<gf%Br=Rd?x#}%Dv8|j5nk{1J|L-x`CV~oN+x0Jrmwqt$I
zOl#j;-aLZ;c;3Y7x|iCwbhIXJ39i2yU9DKarP|PGdw;9-M8jFc_W!qthX<pKSrk=n
zxF7qI<cYMr3-8@MGhlwK;IiBA1DmRSv|Mg_8s&unBbnEB5d*nNHD)KhFAuIXji*c0
z^et3h+uqOj+AG}eZ@~>VYk$L2FGf&tF41sCvV%r*(+I^`DhSixNsgh}@X%#s>SbjR
ze*mi^eN<yN^a@lFK34x9ro#5WfzR%agsM`Sd}evJC+Rcy55v1_G*1t*o!2i=p3s))
zcXo4)2b6N@Zu)v|KJnfTE*4KE_Wt{$Ts7W#Sw+dPW1ic7bVEm}-)Q`x6D1sNbgErX
zf-K#8GN8o8Zf+ZbQE@b6ySkT79!kRF3&(Tn2uN3JOeZpT+ojbiABM!iU5B1rMlAUD
z$e?4nq?9o_v*D>Uxg?a?FcDhQ3_7z6T2iz%0t-kyFEQ}4g2T<|*qFL@S|iq&xr9Ye
zA1Ri*7@C8ztG(GdDI}9_W)4arGOX*(^jy;3uU<O}`&C8drE`@a{6xr{;GRr<Ry&~z
zk08{w03H5wN*%T=D&cicvi(qzJt2bv1?t30nu4}mGTqx0)q_?#9*<h}MeC!nj8ukj
z8W<sc!VVGg7>P$AJb8uwWGNS=4vFt%Nf7Lp`F4=m3HeggWkN|k*u$UzrA&1U3<(mg
z0s$!a{qQ}LM4?OtKYDI@fzjll{KG;+vx{h2oa_EU&LN*v>_zfeh^|mj9~mUEoS0I7
z{NPAIkCGXlpKP2|W<C0(9Cc+0wiHY)8Ma2pZ=g12;2+esGI&zo-*?;vtfRWM6FNLE
zVi^(6uJ!sNa1`tlfjC>2uv(X~3{Pz=dgk)KdA#LJg|nDiweh%L-`Yw?(Ji~WkLDWH
zvFWCEoNwo5I47NUG`hU|_dgTUt=zkGH{kz3-EfBV>vW9WaD(a&k@z-0&H6U8I2yB4
z{r9OXuYh%^|Em20bWlK;)#!E7+S7wsqW@kJo|kmW5jQq6Ts2IMNl1rDOp`#!P&p2&
z;8UTNq=_S-MyKbuckY_STUuhzubsXE*#^p}=stlSjlXY{)Zr4exLj5|NGQsRWu893
zADx?0pz>lZV~yQPP`Yu!k;kRhz<#KP&QN+a(W)ho)sUO{SS82nwj6aP)0odhN4+)>
z+4;^)H9WV_A0$&4%gwZugaR*&%DMM2#aVYSRdGm9(D(uDg!+kZe0qH)Vr%;tH`9yS
z+@@2I03S3KCe?Vo(e&$ei|#~-Qza>of&@2pTeQ(8B0SPN?sbx-Ys7E->WHAxZYRlS
zQUEUamETu349HpsZRtA*O822S@69|r1hF5xsrl!#9ItcbB4P0-4t;A{{<HrP<>BXG
zQTCUKnOKb|;|AW;v4Uk=jqy7bZmzYZ@jvTP``Z>K1A&vvQPNI!`ODn3>8nRhl?^hc
z%rlXrHzX{vdrYb)YITOUkn+s^vhwf1CWD2jN-BW1K!+3)H(ZngQ?MXH4^%?idZ(~#
zdHlHOh`XQeiCwq5pZ{A;Z$C*5$s7i%8R1e={VV2o6-476<{FjnI+UW{PsJc)P-gp+
zFI_Q7<w4t$fqR&OB`WHFlJy4zH2xeQ(gX}@Tl+B9q%g#Viwp{F4VECx(ZWi^U4l&F
z>@-xHWyX`k$m5Vgt5wK~W5V*Gasr|wL=)A9!#8h06ni{oe0rm}NM(V8Fn@U>G&*X4
zm#dS}x6JRuI~z5*Alcc7T#}Xd2I0QLL6w{4&Kc)ZJWFs;yfT9b7=+f&qw>|^G5^E<
z@oE{VHAE>#e^x6Rlg~Tq946XvB+-&D+?(v)cW@-5Norl*clsselh53ly-!qiG#URP
zD;SF>)s0Dt7IP&hGtCZ*m62)KgY%oTI^+3aR`J>>0{-|K8dl4$1W_z@;$?@Ev2HZK
z-oV<?p5rgDbK=s!ro&5>!%Oe>5eH5=xlCu0;--_G&(p`+Y@QCA%UO!zl;wX!Y1Eb<
zM3`JhtuMM!@$XSEoV1^Aa(nGQxDrMVwTKvb5(;-w@+xa(M^<%HA_w`4yEK;FXGMdV
z2Nt+p-Xb1H_Gy>nTu*gu`+Y*J#*L9u1%K<?mmi@9q0Dcw9GH%43N+@_71QD)%_a3S
z8ntTJuLVbfy>1rqyf3<RnRw^vwYa_i?wcP}Wy&lQ?j3hE)D%pnTbdEEvE4z#eQ-~C
zU8Lz+@Effz<kC<)Y;dThi!80Rnt4ZIEBSQUvxC*@88;^SH=vV?{l%gZ4a_r0Ysx(0
zJKA8>+T;cYJ4whf?nQ*62ERa}R|~yDF&MmWIB{!d(%jVa0JGfuL}niTKB2G7mQ~dR
zAJm16hJyVCGkHIJ_`4}~uzY*X?(T|C<NEmeJIHH3(5Ue${E<~DM~0pjUT#womMll4
z4;MKQXwq;m{`5z5IEarpdrC0QK9w%ah*urhzA;q3goF5+E=sAN$OeaZ4NDZLgP^Zm
zJ(^YiR29ec;9Y`fK*Kmy%~*dSD`B8WYF@T;r<sk18%3bVVFqBjA!BPmkc<RZzi>J}
zDaep~>{cXC<bg!v!^KXPpdl?2QCwr61NuAn%-0g(Q%r)0r<TtHtyu7!_$a>{4^L!N
z8nH^M;)#x3#C2vp(;eJ7jiQ7%LuY$21}L><rQ+4nGdk|B%4OLPESg&_Ce{FWpSKtg
zhvj0c#OAWJPKDf{^F`qWAW0WGdnn_ez{}_k?(!+=S3!;Y^I*jxDkI!-JRWC*U-Plj
zxXjkN<4sOGJsqQ1yi^P+$+l)2;9=Q&e)7(3!f~LCR&r`9c~%#@4S<Jz&F@Zm(!PG|
z81b@uyjnBIwaV;tJR3}<F-6tmXl340$ZDp6FJI(k-CKR5q8PG%5Kgk9&}0nd3VMPO
zCY!3yt4#H+DM+MKP82%+O}FBDclCiAjiAQ)PPgvIb@%QKWc%}kdgGSo*Y}6@*`qwM
znv64UCf_as8MATo21@IV)a~tExq=uo0X~^BIT>-PjmZxyce1Hm>|Ok)fA+L!lFHBL
zoL!!LZ`AJ3^DQ@~S-Acr8JbEuHyCm~28yn^UH%+x3Uw$Yj6W4Itv0jZg4OsNcg-Ix
zi=C!ikufFO)r~G5N$*wh18FQWSA8F&JPegT@uZuQYcd*HO0I#HKG9r!tG49M0-rw7
zLfk*bP`)v+i8te1-}++T@?u|n4}#^jN`FR~kJuM|E-?~j`f5PbHMFcUSdN3+&TM$p
zksIqrfmo!JR^n5Ab*<Det{U<Pd0dzj9z<9Ge2TJ$>&wGmcr>Cm_j}ZBVm=R-yVIqa
zB6%QG`0efWd39A=033`){9Q#QAu)09;NW0)w@Z-(P&b8#hm#Vr<zS}|<%vhjrE}Qc
z94b;HFX=B_A52Koz&aE0dAeLU9R)Wo(5Le`UhTdXF-Q#$BO@VY!%?ehYHF&eH~_(}
zt<D#^?QS?^HkAL4@k&TZ4Ud7@x70V>jtYqbW#tc8qM~dFjtqGQXN+UmzjpW9<k$7<
zJL@>M9({0P5#XKFz;*P-UGu6;d2TuU(;DN(y|efa7;Tqc$1mun)*RiPo}ukuG`BJy
zZRNg3e?0RpziHb|Mvlv(UGg>^8n63<!T<=HZZE1sji+OcXOr^TotDC8(RwPPuaeSR
zmb|-%^W&+cKpP`4&8lte%m!YhRX<g)d@;-$EL;9symZ9pH4?Ab(NOKQ)0XA$+ZfE<
z9rVAdS&TF}<Y->$f=20ZlfQ>a8|OCi7<k#5yoL9)slqE^C0lAcZU4BcyMnfc#cCw_
zM!tgO7;)o(f&debDx!RN6e&~T%lT6VK7qfhRKYLpkJA|u|0n}T(2(O=js5$4MXQis
z&yR9l=V!sYzV0t<6}ot9MZpx|!g*ZkGd#jv_bXX$9{tO=Ol!G4J?-u7&DfRkc}05B
ze9#$d9{&D$Sv(%BPB*jFgXdr2r|&FQ*vzl;Ey0b=ZV%46cC^i?Niwa7$_MFOj%Mc(
z{ZrjK{{BJ)+Ju(H*q}Nhi`?lN`-TEL75AA5y#Lf!QWj7to6GL;B~j4u(S-cAR>lrl
z{nG4!#-8!lXv7<|I2sX`*HEo&4Bt1~?G)QOGBS5qnEr<+@ke;4R31lz=*(U?l=LQ}
zgV@PxzS2XVv`S{9CvL6V!kiDas|7hFoU)L9)NHPCspklAHR-0KdM*0>$BOZVGGKn|
zp=F$mR%cE-E*h>%{DHY{-Y#wq5Xh=)G8U`Q`GmKRAs-ws{)yQ@dymEII13Bhhq+$B
zeGfM(v0_`gy~VvXvtVu2S*l%q{WSOpuiLgG4IB5%0JcY(*%men9u_j9wzk&kY#DYC
zir{*82unW$mq8Z-8gf#*!vn7xk?|0Ctia#!xLj`f!6NH+c(@)-7tp9xLRdgD3I^F9
zj6({Un3@X12*86Nce(6#2h%z2ozA#zIIaUkXgOkS8C~z^6QJRpsET;qqh?9shmeqw
zb1)&k6l2Lj9K(x@jEuOyKHb(B4ScWEMubpPQi3AB26q_l0fW#<LAkOK!9X)Ur5irw
z1E!ekQMBVp!eP#H=q)BMiXxiRlqm0@s<S`^Mt~h@|G%%o%&aeWCoeezuk(01-;tft
zx{b$i<hPlYwakW-{hvFn;-XU*Mo)NwxjDR(S_jMan*Zv!PF!e1rKDEw`Dw)pTC&uP
zz3WIFy}ah{Bhhv98jeP>IIS-(dK9BrLt&XX9chi0BR3W9KhF7P9j9~OklDt0U4Fg4
zvWu@LP?~lUcl>bQPrRP%X;k$i@Xc2tp|8Yjk43T*d1*A1oXT66_+ho&K)v%ab$_+n
z_>$@#oi?2z34;RWiW|i~VZ*}*FJ;rPd7^@;9mJWL1-3;@ID*9b%C+mfc9JYl;!*ET
zvJPc-nwq($c?l{OwSl!@;J%zmvwN_}xNfaOZ-Z>BlT{|GNqT!Ym@ZPZu$Pp;;_IC-
z7Nx~fi}&k3q4~UZSV&0jObVZuFD*9}&F7i0A<DW8Jc5bC6fZFQ*;0q&LXa%J`~8KH
znYod4nQ5X;LB$a5-1^P`v?ze|fXOUOL)N!jCq9lPny9tu$66(RV;#H2I*a$zv9P#Y
zBoRCB^+O;4HPAkNYq5Thg^;=aSbj9){4lyS(r6`*_swN{(H8lRDyz1p!hHlh&Ckx}
z%j=WQ^YTU8(?6r_W%bqX#jhuQt-Y75wZ-j8>5u@)U%Ju0-uc@07SVwFQ9=D2JBdmk
z>ug73>(?7+jU*ZNN1X3`<B5C7zxsNPL1re+BA11=Pl{1ZLh5t?JR|cJsSzraAPd|U
z2LkoIULKa}Oy$!#{@$If0Hqm9!k0X(hFYMYzW!SmE&}9FpJ1OzJ3BiFTao~d-2f>c
zFRQf{*p$T7)MoelbKql0PE72kAM}2=z55L;F!<c<j&5oa+E?O%f6kud_3w;@0Mlm0
z@bEAIfCW_*5YwS8penn~1d!4v3T46Ba@Z*yM-?qV;fF0-Qlo5@xtqm5vt|T^Fm}s3
z*Cs#yB=(&B(ta!EcH}4Sa`eG@LG79m?Nvm6RCv_^zBLxEW&2<8N5r$#bT;8)UcRvz
zuWY@(<4f<nnDWb~LcZr0Z71P$-+DWxkd)uIY&PgQ4Fp(-H#)YX!_<1xnEkUw$6}eZ
zn_T^#!gjC{s_G?@u^;Z7-@;sv9n*Wez(a#l((~?G9xFE+8ko;?bGKRAi8#Ib*G_hG
zxOmkvqwUV!!&10&KIL49ed$A$Z>q?4&#$4C&qJ-B^W)eP6J6cwYJ+H3TJFu3#!t6H
zwa`8*6U<gif<t&XH-?Z>iR6stg~|0nW3gh6g;VJe8WzPC<{<x3{j{lOV`i|qFx8CZ
zXp@RLTe7s1Aq0NSnPt;mhPsS7SG=L<p1R<{uzqcm17)&IT^^(M;5RjU=|e#cwr_<L
ziIRI{BOx<OJ|Yfq{-On33TEdrQB|;kMq~L}Qx=0LNP&WlIn2icl(3htGGzfQ#SW%j
zl=2ssg2I0y@z`l>A9h`lztgF=**z2^Lc>L0en24Rvasm%4He8`T5CabaQcwmX+zgF
zGuanfcTjmc#WKa8{TvcompGYyob?&}Y2COGH}y!)pmm9vaEMm?^GIN~LlMhr3N2a)
z$&aR)X8OTMp29pjXfS4!e*CcM%Pc<?o1~~xN%rTvt3Fj$9!b{D2nHIO_)ypF&pAz+
zWO2~+p`uDT>h!S^kP&<y4-ghG5-_XKFxQ*i&<>M_M>9pPuC8j8+OBUeoY`|3+|E|(
zZLYwmQC?mS4Uc-d{QKngWI^G0x<HzOf&xO|-`wG+(AL)WGFzgoaJ@4SofD^ZPqgPj
z4Wa{aIP>ht%x}qp*{qgp*q<MfeaIcskAR1M7=x4G_XWxtk`$7TklP6b0R<F{b}Jj4
zCIIYuL2PzbV>YShdEBHD-X6twvjWp7dUc3zLB#{lN72`!JoDn-5skiS;_mnnH{Cp=
z$_!J=&c(s>|A9U%HNBLUx8+ef=lxTcZ_fArkI$K-E6*-dZ>HgQ{Ca6uc3W?z$njZp
zQeGX#?<26>nHrqY|5m>5Fkr6Y_53fN-%8CHt&YNGg|?EkCdBDBJYI%x<KmqCu1<&J
zO#4Me8!xn_BsUzkM?2!Ka33Ehl%omKn5_kuhh{E7pekejH7|0bqsj~|mT1!hV>LwG
zc5g@CGaIF+*jMXJon2i1j|o4J!?G?x>uZBvJjQ=pa1Mwp+rTUCcfSZ(TIjn!wMvQ$
zSxx&wX3C6OLJIOl%c44zVui^zI7G2Vnu(gK*AS%0h_j^%8qLUZsz_6UjZOsel)lOo
z!iJj-Z7nmOrC@Wr<9CsOBFD3*IU#se3d8BvBLCRcQO4&GAq`ByxjGVpp^W>Dt4mNm
zFJ%fj{Vr(HU?CjE`-YrWK}T2}`nUP(R&nH*#s6<c0p-bdA)OOc0y%yNiTlGf*CzJu
z>e}qw@bVuQ61$xYs?!P6+nVn(yJU!T4Z75^)3CyKy7%3dIUkmmo|%?(Euz@5MYd_>
zk;Ve0oPXP2Haer&*dqUSzP!IVKHbDV+{Hu*wsArX!oJA{9B^Q0Q4bPBX{WtqSPqV!
zbrK&U@gj5ycnH6caPyQh_fLSIw5d6mlMB8Fqua(oyhy-#0s(#iLak9@5&5?ug#tcc
zu<G~K&jy(@t4R;c0_R(eniP+$RMPOt<IHriTW}M%L`~eL)iYHJxtY&0_J;&?Rp9k^
zVM+V&ESy0jsXaEiHQFUI57IV8H9le3w;mQ;B*{HU%=TZDb#72BR2euvnFoo@Ekv<}
z<{KKQ25OThAp8Q6&n0e4X@~|!P+>@tlclPY<A#>?kp;$buJt4{=yiBLH)Lm%P*K6F
z!wcyr1MOn1-5qxtzzL`vj=&)n^My*tPmp^MARS;fLPt`EhslR6*lems<~Ukwb(YWM
z@qK}ikHM-w`jhc2YQj?z;(aA?oMDd3px5GZdh@toZBIhA8;s=>4MD0uQ>IpxO@i&q
zp@P5)UG|l4X26-W(-)voLL0ePvrhP^1e~Q(x_8I9ScDx9U{d5iFbnZgOzPYD^t=UO
zy++LPbWi+D=l|6^#Rr$?aU<@s1-KpnHt^^CmZJ1Tgszj<!*<=yf_6sJ`JaSHXUd9B
zR>P(KKuHE%s!rYXhydxhjq#1!=|ARN0G;wgwV40X46o#?+u+~er4s!nd4I)D(8&fY
zs(Arm#NlM@E;YOleROh1s8dhjI-Yhm!fxH{x?`cbCvB$TB)R??caK&YaIyQ+SX>4>
z@hhMT$v%s!Ab(u1)p5R%5c#gqLW;BHOkYgtX)EDNFay5_qy5glt9x8>hUfl@H*<GL
zWtB;Jl_kW%W#e#9L<`(L8#deJfT`8=>nt#bqeRdpX6+&WPYnxLFzKjOoB^L+p4dd>
z5m(<pqq(t4XUD7fpIfOzJoec&mTz2z3>J6994#9@iaS)}vY*(#l2B8YO7pmMWi#b$
z@%}`?9sIb!O$vBm_1>vJ_u^!OfEEy&S0tbE4Q*Jc!4_-Z2OgCOf5RGPcITLg;3Ee7
zK-l4GmGtQ5U@@c*w{5%FpL;@NFlkOZG?crDDB39&|Bss#S1c;JbY5o)YyuvK7XSnl
z%4lJKoWeq7H=O-;IeQeIvz!x(MJ1~-nRj4QjJ`OsLIu}P$(VY)C^*trjukItf4)T1
zy}+N=ZHI<<0$a$!izmZ?;G3FaVU0BQK?t-4O@^}jgCN0CY1BhpXj8PnKzVFfN2P_u
zLa5j@`wc)#c%N1ELS+qORY;N&Rg;lSC|LKdO0SOX@U8+nwPAM2KZfp+DYB}g<e-=O
zhYjaolHj1vLW6w-(S3EO$9y0_z=0Tvs`7G}N+D+hc<j(@ID{OMd}v=BTwLL{+}zyi
z>gw$LHX&+A3lQDtUNVl*d7P911##JjuwGwmcnkpw1@y2y5?B*bjH_&+=-bGfyy}u)
z4EK+Q3kBVMt{5%$xm@%SB($ik8TeM;s77tR7k8JVd(HwEG>TyLGckVpxM^m;C6MsW
z#zWsyKE?le1}^3_r6sgPt}nUUNo9R4VKTbA1*dZUJP*x59>2@5Ek9}U-<e<4PJeM4
zdTT`YJGk&P*ki{5RNJpK7Jl>}g$_;5)?N<sb#&95epn92E}73;^2OA844f}+?c~A9
zAMv<I%}$1T4#>2*+@?poSBAaA`IKmO%b@30Vs?~b9_;P5rL=lj-fY(7AYwsb4Tz(D
zX7}1E^%Reu&}yfAyjgl|y^Gdu^z7U3O%Hj45f002z|fCJ?QVh|Qn~e*e0I>QBkGnn
z;n=Eb6Ndlq{c?uMerKcYLgwlnnWKZ!?_a3WTCfuC?Qw?&-G<;#bCx!G>(?jC!-xP7
z66n0;0;@CJs{=r6axeEla|^8dv*X<*(#iC1JqdN^_b&SC<gwd;ZO<oE_{pPn`|3LL
zO~AF|Hh|{;0-+THwTO-W2}rc~h)n=Ly1TbVLCZsgO1Q$y^sOAt1}#jMcSj6D`j(jS
zV;2JIhkRI80aakG?`B$i5>^EaVgfJ{sK;oiN3d`|uCAj^YCNZ+3ti&IyL!T;3T=~U
z^;U{D(23tC1Arh>aT(*4=4UvOCs;AqpgtFuV3;5WTU+Ey;2zcIsf;08`+FqcXf*P^
zeJGV?Xyn{VTyTOrDV6^oTz)~Bb%9%VH(**Q?f3}B7E0<8fkONgDoCK=ftd*7*evoL
z4z@r5xDKXRpiUo{Ae34!Lc0~7kC}rqiYw)+<XTdntFEa?UP7HLL{a<8OI4L(Q*BLf
zP7b1*KoseT-yuuHj{qmqZwjSYWk+fb{P2H|lB@si7O7FypwDE=O}f=d8$(umX~{#e
ze#lQE?=j=ULC{HFCe{x|?mmSv7Gada;6wkSz(aY&`78o~v`^VuVaRG&(}Vp~VsyML
zHuF=Eb<ww(ak15#r(H`$L3AA)`gcQkT3NJGZmr*r2xDe)ciFG+Oo4=gt`0STHYBtJ
zUM82Obg9m1`K@we;W@9T>(Sks2Kxm;hZDQgY{X<Yiy!<10zR{4|GKcN3B{##4`}N7
zmm+-=9PPL;9nM~e2&@UzTTA=VmOs@aTE=!FWAj3vXmAyuho(Xc-&d3Sp*ogEs(v{=
zOg=mMIc_Pf2_dxs2pN);pBQ5a2hgUu1U63_wFMvi^R0sn58uuIlj`Oz8k_aPR0|wH
zLzZXXH=GherE5cJulhkiaX9HZq4EJa0s62Z&>0*YkC3eph>*krNa&c0Q%k^~Qi5_4
zD%n9)lh7iQeht|0B#6v&7zohQ-7;*<@Cc~zqy&V7H%dC=5KcK5aL8XU8L@+<6qJv~
zsj~$L_Hd}7f=VrhDiuEB{mN}xnl4@@Cli!UHZHa{{!wab{BwFpdty*!V==;5-{O~n
zrG=H*^w98RJyt+V5G6XK^CT(8ZDhol1!BG&Ij?kXC2T-3>7Fvpy`N*qeoU@x@pHH+
zpr6Yt6<oYwEkzG^G3*dg098GZR8eCmCxr~V_G3b#ElN-)TnEkx)exXdbtRKRtNTfP
z&7y*Rid(oWEv4C0r;`-|M&4ghiw72$i|7@t4dCu$qGfX<#|1}LJv{T4T=39UrI>W?
zEw1=i0<&uB9`xHD&53BnbgU>Br>3n4^!5_p{I9+bKmTdThRiGFR&3n&_n+$;c~cwj
z=lou+aVa~s0H3k#u>0&a+AghxYwKax2{02cKSXr@n|hJJ3G*y9cjxS-8}*OD3_5Eb
zo101gM;eX915uec%*Nj@V>FoZaCO}>^+=Qd!Uoz+xkFIyqGpi5Z<a{KK!cfWGX+!>
zz9v~nb7OG*RNAb@TkkET7}vUP^0{xz{`q*9;Vzen*ZNC&^AeFMR9W_?93U%05aA{3
z_9-?h6h6#%Vm>s4=^|@T8K3ZIL?y)ZX9=idWvheKRUEZ^KdhVm-y143#L5l@f+H>N
z`+T~HdV?kizPTuEUk*XTMTVYaaJZe0((63m9>*V^;~}Yhb2)qf%#6~>)=?MiQ0O3_
z8>`*xO8~fhwdmr~Y7Jg!{4k|M0Va@YPhZB<DR9Rt@kGb0PPYt4Wid%?hB6Mp?dj>y
zpWkd#>}>BK{C`p49+8f>6$wGI36(1U&3~$SM)3krJSvJ$Pl|ij+)Jru40Tb+=lnP!
z(iGcvx(1c`^~Ei@^+9@?x|ecSIRd(xlvtNBzF%UsDT_<DcNS+qaqXnEju~l{pU-DL
zX}OtO9*Ztxn|9<RAGKssnz!Ir92a)hmc502YR6%EqG|b*tNXbm`m_2kgZwSOaky)4
z{87}o3_O{1j0k?oV1Tt9UN)a$Ur+tL*S$(8-x(nbVE3A<&;KwwpcIe@+TZ%?|FK-d
z{h@Da$Fy#rR?F_B|D+EuycbRemGB#@#buvtiTJQ+BC{eN^I(291?M|mCx@2y8)oV{
zxf|X7L0Cag9Xs*eC)O`EgD_QsMuu2_2wPotwnlLAovdWXxw!O)Z<uK2Z>7^^7;BD;
z%Zh}jDKKv!!6D0z8R*M<!asi+nwX5h&_miO0j{!P>N!Z3)RYw{#+<4tRj(ulV5I)%
zMFrT<>g;JAKv61R_0xxngo^*YQkM?{Xda#~WUo-UKrr?yj}Sq|>luNEpHR!=lelBl
z@rU%?V<Nvoe;{+Q3rI8(P(+7f5&Y_qG;#2nQ5`B&H$(X;H7!1t^DTvNbM^DWFcTwV
zI%58(PbKm%1Awo5?r@PDJ81+aaC>#2fPEs&O6Q|qr|#=vfr<+49`46Zm-P2d)Qj8e
z((U`liSuNgPPMnI$hLazzu1}Dw54$ZK*o2k)wGVYSJrM#5w4k@b^F?1P3|Ym#(uC>
zIQ!D_%1?WSURhf>eD`DP!^&2^@76l(!n0+$j*3;Mxt%=AHf9NL+v9G?y^gp6vHOAl
z(J<9!`}?iHXPnk}vXoq7cAh!#G4l&RDyr=OQ^3$5|F_N6$8xm^tAn<VPS1m<gJx?q
z0)9e%H>aEIzy6dH+|JLLB1*bnMoTa{L~A7fxGO)s`4*qTG7p8mmrGr0f<T^X3T+lz
zN~0l&8RBv&H9wbDR@<oLFEV(+sgC=HExg=!S$t=QyDPE9RTV{LqGaeH2yC(Sv<XGN
za*FV85b-x-fYY4+`U7`%i`@5bI?(nMbgwFlFrzRQzEPa9U#(CI*#pDI+=4oYg{01o
zw+<=6C!uk^c8rMaSiwIagjbj6qq^;cuf5kdK7i95Lq2BEE)55-9m=3_F=M@$qomd}
zuj{crEhPp;TkGFo@k%bB|1G0PELd`WM5|2H<{N2sZKbRdp{0#QmI}PE*VXMvaegjr
zYg1Q=Np{}SJda!fHhZ810W#dMG7&=p@MpnV_b6f|Uf?Ju+Mg4m!wuUDfu3>S!q#W}
zvt#q7FYEg5#IKg^j*WL@mZ39im_^ZU!n7E-EmlwFEuSmS4V%c8_03GzC@}IxxBf33
zK&ZxS{BGddnLn%Z0uUCbi^ALC7R^S>W~>JPGjoacQ0B%~d~keC+e@UVGWKgM2$YBQ
zdwI!S1-8J>6c?Qy*Pr!ND6#g`pjkpURKxAN_h6$ZvKE8+l+-9(Ld&g(ycsr=jXS-P
z>`o`od%s2#ug4-v!I)SF;#jY@yT5=A=KOHVA|uM{5uTP?o|egZ33DL@2e1cA&c9*b
zHz!;|+CqN`m;0`QY~I3}3X5>t`=Q9dWF+94sWJa^swNG5ssauFVDf(ga666<uxw1l
z4%x&41h{Y`I*`<r#vmvG>U#xj+f8x=MLzx7wW&}kl{74_SG+qRt}s~%A~>6rZC5XZ
z*yMT7?&FYayt2e6zd0nbh8&xEgg=EDhg|~3rQz}RA@S11?LFE9BuSn=?e+*6JLU)2
zqfQ9*&Zq^9?FnMv8~SvI)J(-J1BS2a1GzYLvAL}`nh<J(+m(Gf%d8P1&xf<!)IXJU
z3c>%w-0Yt$F+)K#>+7AW51T)ZcHl*$>!dRe5JaFzqtz~7RQpe~kAe+tZ8hG?*mGBT
z3=DkL2M;9s6O}ltVWVUt$&QSQ{CYD>pe68LZ>QnS&WMFpS!TbPRsZeq6?2FCbb4-G
zU6%D0<+4WT*%egWcrz>7UJ|?&bY6JUf>#yAq)k-Ph(b!`VFh$simpOD@Hqq<-Qu;O
z;51kie!YY_9>g}b^1Qfe`RTtfh-u2SL(D<NjMnv5dr4XsI;@Uz%#I4o{b7*{@)vg1
zxVB$7YQS~)jZSZO^NG9uK-YWY9)glhx`1DmB_4XcBPIKt35Yp8e(vnnFmAzKcB@s)
zlcANqkERxiS#ww43W0bBjN6#sg|l*3C;yZ3Yg!oQx&)A6T%w2XK!Wx6&{1Qs0%H8O
zF|sk!@Q{QEFq`kzyJQHseNg)Ap0a#KqJP^pOK%Ew6^_Tg_Hy5cpR#=-ST_++cX*#H
z_OjxeLiZi(x?FeQ=I{T!9a3^jhcK=Xpu)HU?)l49)U001lSI6HJVmq0P-!mnF6a<N
z<-c!PEUnhQss9f$Mn=h!<+N!kQB=|5;<N$u_EoqvjTG!2;JhU-+a4+%>0`yI{cP~N
zT80`#lOzRek{f2%+$0pFk7ZX@iFg!jFe5$xOuGOre2e<w8xM~<%@@G~g<M@tzwvI;
zWq7!we3W@vyyC1?J^qra^$xx#sf(kEMw+O4x~QfaDl<=7GfVb0RwlQy)=%XTPn6y+
zfB==+lb7ukJ5P35#E8%mnMJv5Zv;0Xxjim?V@UJ@0_+nLGf1@v6Z%qn&|GC50@5YL
z>ywaUT|nTQMX)muxG?Tnz1mK1uKR(1l<NKO_i$T5El;Xs+#D(TJ~H$0c2tAtp2)z6
zZUazdB%2sds|24sgHWAnnlpbQ3B={q@ju<912GEv@!?uA{_(_<n3o?<{dltQZyy!E
z8)9V~i5WF5al<gFuYZd|8~8dnP7$z&E@0p)Nboas_^+TY=fK^Y6p%O6x>DOln|cl{
zK0#3P%c{!ENC^H98kluqsH*NmukwQWD-PE`-1DGRf}k;?M7|v!2>5XnWsgIHp}d+!
zMsdSk(C0NtFa*U`KU8ZgQ443%CLs2)n$mB4-3*s9VMa;*6$nhWQg>mmTTSj#es5cX
zfAECsqscLugYfdHFqMLj2?%5)2y>lnV!C}H;f7vO;<isBVw4%y&e|ow?ilQMB$d#1
z$G@s6|JbPF5`b-3zshR3d+rx<UpMe;Cf(SH{u;0K=ag1jr|TX>>}h-aO3l`u+Imn@
za1iYkhsx9~A}t=>Ym&v|+N7yViL<8`x(@vcK?V7##1P9u>cM(4L<OT{fi?G@b^Cs9
z8>*z5`ec!m4J=Gfa-zjHOHBv)0X;@-!Sh$%Q+ZMmQ)DJ)cIXuf{;&VfIVdGA76;{L
zIA6KZ{@zss5Ip00O>72>`7zb!ET#--sF8$>KV^Wxr@WRv2CbU@5h}y}QcHl|35rfn
z^LhXn#gl2&488>0k5^S1jpl!+BhNE)kQxMjNKN7CO3`5QJL&|<UuVZxs(f%w2puNN
z`lwQO{1f<jw{}+M`ssRRI?eT6E<#d#wGZ^QTDT`M1u%zY&_S}IAhkwJFnYbAJ4?F1
z8<kAh=hQ{}m&I}6pr`wYM!U<}nrq55Z+Q#MFc`9&;!<txc(<z#p9!olWz2{aVTq~O
zK~0!BHr|N^aY`jA445N|7NFhmVH2hQ{hp=AABr~f#g7?#zX;1jQ=&5m$45mma`B`m
zWJ<{3OG(KyO5hth*u*Ff3-s>3Ij(QWd+W8GkMreMc%s`aPbxcmI{Q1;1eyQ0DKa}w
zgTH29U8z608{;Ofy$&3x>Rd~BG9L3~r$ODPmve1p+?(r}1sbD$G6A)EQ)9?c=jVU6
z_s?vOlXDAXM<?jFFVIlHeu4bsM=6mDU$4oWyl5ARyBx76-65r4?y5k&Ob(MeU+<X8
z6G!9q6t;}3To#;*z>EuRt}vsj%?ZW1vcT@m>~`{N0vxGGYnAahkwdlstw%zIj$*OQ
z*_@`eG`Xaml;NKlizqk|g8=`Ozn?YyUyOm;dVb#5eTQJto7HA2&x3OZ{lX)bWK?`6
z$Di9GU6hn7o|7@QMgtS)^PZa#8Y5(R&$N2Yzs*m55aag=Ww@Jv4#82|kze<OD9#j)
zsWUr18B!%fxSb(<Xd%E>Pqdh&hA$xghNdnlI*dI#j9rhQS)ob9sQG=YG*1>KX}cUK
zLB+oD3ee<pADHJTr!^LR`D$}DyC}7Sg6T$P##z#LFvRXJP2J!Y9|PkF+v%39*t8k^
z@MLfO`~jPQ%3lh*SoQKQN?!$XhUD4&%$Bj8a1p~)336efQOwwY;8wwp!qgv;`{$q(
z$Cjj>!(4NR<<|)!{=wBJy2i@{(`B2yJj5RZL9w-B$AtJM9>)3WTU#whp>7ClA6TUb
zEy_u#pl9LX4yo=Jq>rVS=aTCy7;L4jw+nSec70ok;LMFa)cj|6Z#ci(wsellbbn;)
zJoOYDTJh*kd=7Mv+N+Qo(@INgBw;n(>b?(0-KUdu<u^T`fgX?6^$`gF`OwIh<DZ%N
zaYzEJkB*J)uz#xPyXlGJCM^dWfi4l(0srMFY{h=C5DD~Ehhii#gm1Oo({j^?^a-v|
zfQ3*3=J$@*FKK)+8+BZGQwCtpbLQ{t3R%p2^-1^1YV#0=C?X;Hgc->9Li~9Oa5L!o
z=5%i<W_&TqJ<A}xjf4ch5pz6m{g3#yt4B-;?f+|Ia|MJL70YjI0SR!2Pf#)EC&Z#T
zoR1Hpa4`J>VZmyj@*(tX&)P|++YdIgW2}JuqLU@_pZYdxxC<oC6AGX;ynbAYzHI65
zWGueeRa}BIsbTkHq(@<@^op87_I^`3)OiAO*rAga!y@0P@_Q+tthf=TL|DDUWF3C2
z#l*$Myg{-F%HbClQOvBx?Lj&+Z<eR%sw7dRZpoRrAEy>Gz()hWU>HLQ6d*x@H8dzt
zr(}p%A?9)}Ymynn9dhjf`8K67D5=x#NIx{;?@Hx_1Z)5K>|4EmvxL9LLwdLU3FlvI
zoRXpP4?ov=o3)+1n>sNt0bxNFlhDN^<7<7+;7{dc^!Qm)F?jfs967vVFpp2lth}kS
zcLw1r;>r_d!wsob<iZAaQDa9D<bNBtnR&gnn7hsSYc%J~z1{X9@7vmJ84`Z`G7FvM
zU=uUg@aZdDB3f;S%hx!6PUN`SG3{W({|4l^Ej>6*?~@}^hWWX(`~uml+iMBQC8h5V
z>Xf63uwNj)W>Yg=IEwyNuCCsuh!YG<O89u0rN`l2>~6s>ER0N;ThdUOlf)-^*7S?5
zF&~NwHc*Va#if^0aUx;JHtKX5O92rR+V2ZwzP_4@3_*5c9oX8%*g_<^ID|gKzsFzr
zORskOszc;Wy`!Vb$qVBDX5qPJ-~$B%XB)ucAwc}%Bqo<T;xuG5z*hkQraEiF5Sb)U
zuKKtG<H%QCm6zkTa`cb_(ucIgK<_}%aTSB?UR;8Ad+uv;7jbiSu5m{2LkOs*`BpBk
z?&6X4z!Wq78yQ%22|GhZJv=xCqM+L~y>$t%8Df!88Qa^4tWP1sc6XDuzq}aftdV7t
z7zbI{kg(s61EJb6#ZuBz-oh4spE=gq2&`!uiU`M|W&i$AYCFV6;~L8ty7|WZ#J8vt
zDT9c6Eefc0wY4eZc}MAZyl)kotJA1TAg>FG%N}b%s~_wN%3G9_l)sh_c}{e?{LS=X
z*uMrbYM1_B*hSSJ%3go}&|>A_7$rE2c=*Fp{9<63fg~;R>N|VAX}o1!TtxmCdy@an
zXlKu{<er}Q(dMt0oFvA@URf>s#om$Wh+5GugEXCX!uKZf3Jb|!-EsZ^5yk(_{^I`<
z1Wzb448(PKeW>V+`F<l>U^;vtAUNHhNPD>1QcXSd{7oxQ=}HmLlN`D+B8pR0M@%HU
zl9kl<eEK)y-a2!r&)Rqz*Y3!?nOu#2JUKkfUYA$1*)6cHtgIuaB+4+Y;p3D7SmoV=
z<nV}emgN-t6DF+7F7fQr0Kd#a*J{@yrUK$6!gd!Vgp6(nsqts_a(i|vHDZ#|@hRRG
zhscZ70xfk1eGxT1ac4?JJ+<&lRcXg}f&axDxdIIn<+@3<|0e6V{%v`G*&mrKUX!V9
z$?K0%U?%I)gyvU(kGf#zVq?pZPJRQnp^7@&?tLHdcpN+&WHzRZOy#ng9Y&ip;*01}
zP$OY0(>iU=fc*_{pL5;1s~8XsxIT*XIh^pj47zMq^a1Jb7-2x$ah!_#5FDM3&u8~5
zx$?D3kaW$^9pxC0-C;GL`Coo3A)s%AaK%~$1{qvhO?GmF9zage{zP(;DE#Ul6cNnR
zWlCRZV1VHn9G!xL!^_B%%V4t@5E|Zm=j+2-Itl}fo{8r|MorLWH5^{R<k>qO4HymN
zP~cVkWVse_+wBLOP>eZY1dsyI54hl=g}N#GNYM(CDph0+TBpx=sA<(UVm?t#=+mV6
z=R7)hQ`&wAlf_g_70_1fVqi!Zs#+Uca=(;OT7KLW#ziCe{={<*=W6{F$_p=lA<1Wd
zb2#RQ#v|CQK#6JCq(bu#IJ`rEr-P0`gP}3sQmWk<Z4V$a&R!+CpYSctE4ZmH)yj3X
zo6-V)ShcX3jwB|wT3gGsc<&i3Ma>3lO|MtVzEyJ-xVZkBs;$p0I5Lrj$VA--GysEx
zUy1(BAL|L1@-if!Qx1>dUED1+8|#Znw8-4FDBQnb?1jKyAYT#jdpbNW#nYgjXO2vG
zlE?227Fh32Yd7atANHO=yF2%bh#b=p&8n5v>E>ORLxMT(tn{<VHhgUKDIxMUtLdM_
zK6XKpd$Md&Eh4K!Xa}x0_=o5T$QUORb;o)cFl9y&Iaun%v279aRo$-vJsGfI+flGV
znog!>I-z>q-L30pb`x27>1Mv^61{ox8DtJ3JGUzRth6GEJtx`%VtFB=C*jWl5{xkY
z<&@CVH&P!fWVoLW;U^q344iYILuEUAzCS6yPb^Tr+|1Fge4zad0oIHZgAQQ{(5DRU
z@A|c&qTLC7ErwTG<rOA{wg_^L^7jLH+|WjAQ}=AVetn$8<MTu8?Q;ygPqXp;cd#I#
z*RO0-sa6h!?myLu8L~b(Z_uy%)^um=c>1-#2i#r(=RuD)aD>>ier{|MRU>1PLb;Qo
z9*t*aK=-<dIuj$26u`+8LxO*5JA($s80yQ~wIBeGiR%A=;-JyHVTs5nR`{?>Zmr$d
zPIbx>^zYXcb3Brc1rq&2s~_x3id%$ila*;JKO&dz88(Y__1ctt|A%ov(u7juE*YN<
z9k^<g_tjsGj3iCPQqu8$*phYA+81wakv<&>JI-K+zy}`}pfC%1R?mNh{(wfNoPpvr
z0K6yjhUzj~zk@9G_9h!v#IaQu`|~7tY3DZe#*^3MFBeJq9a@RH9iYTcP+}vf-9go@
zd-^7h!VFeg>1zMX^T#d+4DhBrg)OG%nPwN5$ehSi@$fj8YxXBnJ#Ov3pSP~`Q{00<
zMAGC{0X+xkSC3131q}8ZkP>UlO;)NdHpQt1RM5GhNl^yymYxE+RlZb&m{9VXF!=~8
z<B5M9CRrJs?~!15{6qw(#c{3Wv-FYH#{1V8c$nu`<B)9GCm=R_=yNc1XovQFF*3(9
zwc~stqhzVs6gAer6;gq>wsr`1O)m~c?ru!oVeHyHoB48dV{O;qfNL7TVt0`t=PN+j
zQ8fAi@d*gU?-Owhg)fI}f)qv)Q2ptG7Sc-}0<GqYN6Wqm5+F`+=|cZ|g9?8G$paO0
z^*0<PJj6e}8j*G2?$bB@$rONo4-~x-IUxp$)Ww5AXfLI(TrokIFoOCYeKLyxM&jP^
z5|5**;rwFxnouG8!f72KIbcznpF0^Hw@Si?yo*Hq-sbZ_@c6CC;^PuC4+(1MAqQ41
zqc0gDimgOWDXsivtOmV)7iHEay;J4eyo0!>a_uoJJW!d7d)%zG`6d1j@g~X@;I>Ur
zrlk{FrLyY2_i?OUf03O)y>MWjI#u^mg!7YiGZVfA04z;V20HQQUrOdPyKiDAxo_!5
z*CXjMsChhIXXXoVWw^MNlsT#R))Q+_E`RSD&F^vOxDq;VY>wjU!*GsX=8oD}j|$9Z
zkdui(8c18+ZLpFIvKihlEwZ;M0^dk~f#V%U5thYTM84?6WtN17Ha4zolC}fFy(YJ@
zT*s5-O3mLk=WSm@LxqL>{JB##&=G?~ERA&hII(9*KSMtWFhrqJdM?F$xI~E94@SpS
zT=$dhqVys6{DO>+v@$;BFS8>A_eI$}#OAEM7{wh6nFXG`Rjwf;#7ztaGfEbLZHbw;
z#KGCU!8t(QA>Uk`eW98@3X(}q5F<*^)}TH3hVbl+5NGX6j`>6m&_Iad7<1IJM6$Dh
z2IBW6?-|HK=BRXriUICapxB_D`k{2muXkiXI-C-CaEaf-fuL3);r!ZxJF!5tXCNd<
z&``vff%<$O0}2O<g#tATWf4a8_LLR7G!4)v_x!)YzB``k|BshQWMq{c8b(p#I7G<E
zh-2?f5yv^mEaKQIp+e#$4w7}ubI`FuHW|k`I98IqDtn!CKkEDa{_g$jo<Gmyv)=Fb
zYd&AAOh=tVRE;hF9FyMMw;%1!2UL>cAJc$I@$}Ko9QDeu>>IW`5@&!Ep9jO<7VBb-
zFW-kx*Hb5kMTNatqIx<V{`GN$hF>#BREN4R(-}ToupKyB7#V5vw$_U)u#w&(Q>yfH
z{<n_zFj2wNV<~R;(f`DJ%O?4T&#(gxSgthm7i<=;?-}KBX<EI1mxXXWvDhV+v~jW5
z;EY`7UC>u<=a<S~gy8v3B*VxTv^{Ap@kW9?M0bzCL5+`dH151Pwg{eCvQ{=@XcCJ>
z(qIpydLE9zc<)rYbl&VX`E8yXYWXU?@k+hh7Rq_3`%J2&qA5m#xlDX)#9in(1?Ei-
z1OS^N(pZ{Ioj5)V31|=9AP$0Ci(MkDkzsZ3@5EB=L7*GM_0qF^HsvdqI;pHC!g5O?
zphM+uJ2KyYjTN=0`hGeNj@yn*>T^CYz!d>~ytyV?GuD>6wtf76KB%adPYAcw`cc9k
zbT8rF{K;EUlh4#s8}2{6CB!DX67jM#AXbB}JN~QRo#D19`E=$BtZE7hd;-N(ymB2h
zVYA=Q(aNf`(P!Av2(uO663bQZHT=2EMKEm@Q84)>ah@@4gw~aGK(mu&p21E|iMinD
z7m!@<LDfDwJaDmNQZlT~U$oLzyKQR5tif_Ue)$vw0N18yuUQ9-QJUo|b?-@j)f=pp
zGTLc#o7u>DVUQ@Lpxh(I(IGytX_#%*CWW85$dtg0@8&H*_#_W>4zzu2e|!H@fHg14
zi3(CFSPQvTwEBapnYM50AFuP%uXE2K8v(ARH%)8A7FS6xUiUdAHH0`E*CRm686G#6
z5ZkOfFrFOn>`yG6YP}>4lac5j!i2L%MN52RmV9Xp<VqTj{}3UargP^(F?<<w8aX2}
zi!4kEsrs|hZY+9H`nFauFJ5UIZR)F6G$(Vi*|n&(omzw8?*63@jM&-l-YVnzopg4c
zMl%iwTAxj45&jYTjx}PyIRET8jhVQ;@Zp(qhBS8l2hKTKVagPCWPgM<T<-zkRYb3L
zmF-}h<QJ#q7RfX~`!%D>`2mu(^MUTK7YV=4apf)8r{x9*z8FYh5aDW1doOS=GzjBD
z)Gq2_tFp?G=t~$lmC5(OJM`W3r*b+`E!HzEpm%e79xCQY4X+&PuTkV;urH1O-vZ+k
zu=Lv1>36G%?Ikq|AsabSC%N7T9vWT;OO8`sd|5k=5jI=~zhc7p`D0&-u54n35<b6V
zt0?#wneKR71C3@3rhY3#yL|DnpU(5}OoJuZldB18QtEjiVRhTv`nx`<^xy%us-IcX
z6CM4(Dl;U~Y_BF{Fb{`A*YC~(arbw{aDmSI7SbmliwZz*^CY_)(y5`x86VPmKm%22
z9Xn!RXFkBhSy;m(Si}92!;{TWhf(G(aF1B?lP&|sWzWo`iF;?tbRG(|HXFSNBJ%E@
z8i|VFil6Dl>}Z8EsCmR(w3WkU#Fmt!|LB7-#$m43q5z5Dg+Q0|y<TziVOQ?)v_i_G
zh)%*Y%~a91_S{|%LnBr@Zww8op6d+p?@JJ|fA99lzv9O3_eV$f)F~vkF(-W?RGe9y
zch|b=Ie4u#=Iu<R0Yf_>mv#h%n4fv9n3-Vt<RK|9_UOU;x3$Zy=`EK%WbPW#fYBXd
z_9?F#9VwNKop#4X0M!EU<|E0!R^IPKEo6E{$_T9`fb;sUp0MP1@Ux;$Fk$T$rdl{9
zEJ~GS&_(pnt@_B^%~9xVZ1)x<3Ml=&q^olM1EjP$?v?hRKeH7MEPd-3M5bnDuhgW!
zzfw5SC3rBN?*7Ef`r}w7^LlST0@Sp-AT^PzjDSDe^S7H<$@>HrTpoE+f<We|E86mE
z)!nk6CxLP*XSSqc4wd?fMsKIPS|Hz)^RHUE#@biGHOt4G{`4vZdEnun^Y&^h9>79t
zKzkDv$#rIn(aQ<RA<rRkuQNH`Dgi6xN`O#;{{ks{2v(#UP~J)%u5_zDM?Gi1byM%f
z3RqsKIF)%qfCpZ<j;`M#rAIq*q=b)a=8k@9WfnYp^Zw5o<_)Ep9MNKXlI%n77Rk>s
zvk<AQzm3^yyhDu664>fsJ1fzMhIe=BRJy-)X$%%<pmo9pv=plOW`4Ij)=oWvfNarY
zdw9~d=erkue|m|sTi<^n3gh41$(wA1Y{2oU1RvIFe?;CKRnUfeC_-;zkMWO=7xufm
z`#R*hMedIh{XT~j^Rj(bpV&1MnDxtK$oI`QAVoqRe6;>gtqw&MmM!yYKm_Q091Nrs
ztczu4tu-_$y}NaxY#<Ntn{8SJ6i(wanjcpBc?;kkIUQz?nwV6765V`X_86Xc0|?0E
zOL)=H<o!pcmy22E9@MJXsXYR<!wjYx!2uK(o5aSp1M-c@gY{1GzEVM>JUd8&Omtk7
zTfYOZM)}5O+<<e@Rj02_dEQy@G8rd*d4;?zkI6XqbNJB?F{z#;aeBDzZ*!LIJR3$T
z<n}F_21@VJW`u0)^Rs~qT|@!#Q>8a;akuK-T2T?QJbOS@%f&&&*H4g|#`wRZL&#J7
zaOaBpm&0W>fpoAFu0ZZ@UjS2XmY0>01nrir=7!10`6^pEzQFa}y~<dar82bd%~SW8
z*i!3Juis21TJ&)<9{D>;<^aQNUMkw2QP~Kp7~kB~h|?jXV{6>LGE)?r${%N&9N2Ge
zhv%Ue5FY*7X!tX9J%nViu^(*r!y)OGwFn7oeSUW*B1}bepL|pDTjEU=LVp9UC|Y(T
z|KQ2QaZRPK+=Mk|X1b!jkC^+TSg+S1gJr}Nx2Apa5nOXGrl-q4?L!gEtbuJ{OZf)>
z#jjL=a)`c%r@a4Xl@4D-etf$1L$diZXaVFc^}B+z^}e@teQ9P<A1ByZp*yK7pz=G;
zGAM`?LuYw1=5=I?xN_6iCOgZ7P(NJlCkACw)Uu$?S|?&HB(R{hDin9`1R^mIMnn>e
zYyB&m5*lgKu%|JDKA^*-;)#gt;dD*d*?Xg~kau6JoT_L9WaoE}DoXesdhR+@Mj|qn
z@Xi6Zk-hcW9?lBR1hR=;&6CHoIDg-Bk|)$@!Q}!DhU89JKK(iMACu&pojb3hO!$W1
zT`^oK()|*>EcjGF{u$pbg7A|n-A%Pr&#M`=C4S50#QOQ5+Wc9^Qe|ZQfoFDf4|s>W
zsE;SV@6d`%=<|PKiLx>-a&9cOQ`3-v$I195hZIM%0ZdT#*8V$q&E)+AIacmCATp(3
zvSKH(vI1K@L|fWdNqAks$K9Lnc6`LWgh)I|?=7qP%x==*dmhtKFr;|<_WYc>T{`nU
zIl)z;XIb~UE!uT%6{JU!9rh@2-?osER?Ru1b<fVBo{f67wrnhh8=T2Sa>{-%rgNTG
zSAn98|2Rsz*68*0sM=tVTGH-Q=+QuusN>VmB2_cGS2{>#HyCReE?ycLM^xv{c~(HP
zBT6_ybS2SOIv9}JuC_Hx1fY=8*T?7d>C;`^-O*|&pksIUEP+56S!=_qGy%k;S7^73
z@b%=tQBh|s-kI5@x`O(dYpL=1R2f46$}zW2(4rJBZ+{<b`n}V+rjpz6qfE+--p7Of
zv<A}{ImoXB72e+7k(YUYtj%xDTX&x6ju@OtUt2pkz^y4n)<_b+u(O<z9Rq(U<T|j>
zJO!zoB5{)kiTkD7=MWelu%}E%gB`|Q=K72)CPDI@Kbe0vPj;fZx4EopCIcj@SPkLT
zwx0N;WbQ@d|Fd71(@pt7N0<xRLX58<X3IGVs=#jalOw`J{^oR{1CWofA8NeXOhM*A
zKrxEQnfAGTnN>F5jK~3tuc{qY8x|*$teK&CPwIj=pkRD#^Uq6Tdm|$UmgTqHB)sma
zAL=OBQZydV_X0+==Q1%U<Uun|KI6wL^KSJQ2RAW{D??pIjrFsF@OToY!fomesl2{k
zbxgiC!9MrR(3H(vEPO^=NaHO9eED1HtR0q%wt8et>tNS=qZdW-#w<egS<2X=ws<F^
zU5+A>qjLKnlr54ye<Ylj{%RU{@r<zOix1w@#%B{CH4T}jwLd9y<079$R4A5$jh^R2
zZ+JG?)t$hF*VEjytGl2Sa?jSbg}RW;0~CwB=ZuNX3C#6%WCCs_$J>|4g_hfUIIMVi
z&@cxu_4Cf`6r~acw{g9<dPs_VRn=rOeEx?RrwvyTI0<=39Qa<UvY^nIM1juSA0KSR
z_*=9I&eUV)V~@&(t9pO2Asl$rI~K@iw2;X#+6;VjcdD?dX2S_&e=xjIlRG~YhO0*O
z797yaz(;l;vVEyt7hh_LE;9e`Fd|1ZKGaHCz7N<A-%e;+uuk1BK_#qBvv@j{b^0?!
z*}cp}{pS4^WOp4H*#?08sal4x+j=TMtn`SlUh(!drB(%HlAnLs^rM|~17P0qfOHHC
zFD9W^0XqzW7O6r@RH374rM=gK8p*06OMKNw(WBE`*OLIr(#YaU0Z%QbW;|?!uMSAK
zI96^XAssS)ok1L?z&4}l-(b%ZzQUWM;KW1-YxYLFQ33pW^Hw>~^JD8Mccn2r?P*XR
z>z<b*hc40$Mtr9KK{1Ds^-+-4LG&h5+?pU>W}rznx%oE`g~nTse95B>o1WX|eD4#G
zEZGvNx+R342x*?l{vL}Lpb=v-kh%9H#T%e5aT)7ko_=Rtua?WyK_*9_xd8lv`f$P=
znMdy+9+l(XZynih-12icfEYEkst1a6U*&EDFSjhn_g3S9o(n+FS~#0z0+T1gXQi~g
z4O`b}z0;&gQ#?txWTL$fif}<|G4sHU_1p{j%$my?hPk4F?t1H@E)=x7T62N|9hftL
zmjk3UX80DE&D0~w&Gbgmkt24w&z~N^HM4RctWB=b2qkcV6i3GLvH&;VS;b2@U&_-3
z>hOV(+D*R26+Xy=1MbC{Wq{R06{=7nttJQf%ASBNkfMs#^~ZY1#Rk%mT`02@epA|m
zr+LU}iIPXrmC<YuxS<K3r?b{v!a#Tmv5F0QojSdV@t%S1>7Ad%f1vA`T~7t@_rN)v
zNc=_B;rpDgmE#?)mW|Xkk>4mE!6iDArB4b=zRIgi?`!-^S-@O}Fi2j87!mvxGJc;<
zffQ9o^>$i6C)jxLz1WrT6sFCsWw3Z$7>dph^Gq|K5{0vto=_|wM~?y(FR2A={MBp6
zLB!9|%iUKVUaR-;5h`EZ|5j!30HY{d{@BN%eo+<PwpX>>>OK~~5$h7n{5+tRY)_|~
zJ+`6?TE90CU{gm<AV-BTC~RCHZMuLr1_vFh1}{}Z2MWxJ^x-6D0@yH9ZSW(TgojeI
z7ScQ9>hws|@`27Mf<^|IB!H!lp|vxyQ$h-Qg^UFiznRZW&-EHq9iz$^qaC3gSAXCv
zH=L}={dDn;%cBdWmQF#ayvipFTap6$XvydZE{$S$PbP4Mr+nI~{@kPfPxe3-HIU>+
zMO}i(JyDb$*Z5Hcqs)q5YyBQ@(kApKX=lg(27K;h^*e!Wi$Ex2Z36H6ywzGoXyR`#
zxuF?@`2@)cKbsq5s3*Z5Uu@<ZS0#xiRZDy9#2M8(Y$Ck0_H$&-;WS&~mqK`(Du_Az
zT1csoD9AzJMZ@TlB@DfeRyl*(6Xp}PTMR&(hbe<DGGCca?0qJpT!oZ0>Pb^u-Vg$Y
zEmX!@ll!dDoY0hdN?$k=L?UJ6i{oQs_w!+p&pKg>Oo}R?6Pj9yhB=E*mxGNmeD2l&
z26L-OhkKJx#dOW!ijrl5VOLtGpNw>cnZ5Urr3|2QT+WtX^|G?JFKoQLok;VHt~>Z}
zG8V<7<IV-0AokTs+7w04di6?%dU)>H=q^uLBe5Rt<5eG=#^&f&k;_;w&yj`{qgwDj
zoV0+2>q5s~_m}XXLS%|bbay*7`)?lQh%Pp;BcT_&V&@ED#(<UaKj9XhCWOH_^{16M
zlznd_s#FERq2_bBgBdDVpHge_p|1MO?kv#uB?0Nn{64r-bX!a;s{)(@qJSR|XOWws
zOCQDm@fhv{%;#4VbnSqXuq+od%NjNwbdOlc9ln(0Cnj_Av4%HIOL2x$eNHfKdz($=
zJ8^zFJCkGi$bnA#Io7k**k&|F%a$IzgmF0}jDJ4^X>qXT!FW82*@xSN5x~prW7r`N
zylu6=%q3H9fVqq-jOxijur8J8YgfZq1STwAND@l=a=(b^8Qy)UwVtD4TcZqsXMh$;
zK9UPc(!X)}9lA>})0$b87m6hf75B6`ehPuk+GCCLQ-W1eRoy+Lfk_GXiO&*B*w=pW
zL)W=~d^<;1d~cn%D}c#wE5UhWk6KjqIl}GTM}&nGeo~MpdOs@dbKwZB+eu)K^Bf14
z*Y|~`F&X7-3af8PWlB9?6B9r~6b-T~ZwZMPbB=e@T(T2B#)pCB441?k9T3I1QQEX3
z*g@Kyhaa4-a}Pd~lqCa$UaD3n(L(Qom}<-P0C&mZFSlVCOYN$kq3C#^bWf&79zQ+^
z2-soT+GL6CCn#~N$tAKLV?C?DOw79Gn(avz{ZKb&)6_>D45M{VE&%EIj$BEr3Fq$n
zDp~QL0fsyP#Y`iN!nwOAHB?ol2{$fOSPYL)PiM^Z^JZ}lF`WdGb5Rof9bcPHU5TQH
z0n>?h78Us`#9bvqItziK*in06wqwZ}8=%fZg_R-|+X2(WonJ6ZP}(v&))28LB0$BF
zbv9%9SnS^a%*tp{8fJf#O(#N<e{Ahzd#srHzU&`a1RYHEB9EL0zgrl`5f#u#59|OH
z`vuHxwGY5X_@{eNou`%*=P>e7+aU+TnxmIRIsdgOO23FG;LpBw*KUpiVr-Y0kWV#(
zzA)2eQKzf!iAdw*q&PHAMAo)#^K%X>qI^x)fmklpZ6`J*YIN9hAaVkX#MwWoQHzVc
ztvbT!BFvY?&fOIOlv_!;kg@^rT<<-uOlzF=TOp8HzMUWl_Wo%prI7{B=Rdv8Cv^o>
zHxIz7fXy;Bke68AndEWmTeL*r;t#gzIgVZ*da8XRpV#R?zBZMOW4>rzcUV?UXvy>q
z>WQF0KB=Bg#i-^0S*e`-KV8a?o#EoC(2JD8$*en9)r#f>#@zg1MJR$k&07YnkE0Hu
z3+d+=86cTLwBY{h-U9p*qEZkr?Vv)^K;2YzoBuYmu+oR!3GiVElW+eT2h{km{w|Y0
zFIJoN?0BXJNZ_}+6_Cgv;H&0UuS);0gJ~;ER-H~e+&Ij^n-idfr!5Z$NLj_wC(=;X
zVvKuE9KW9^fl+dcVZl@}$^DTD+$fV|LvG`(VMh*y8{_FS&fWeWyvMn1&zu{M)by2>
zYst)Q*)sS79qy@u%N)H)SAc`4-};f<Uw+2U=s+D!J+w8Lf(H)#@_!8gR=UAorMEq0
zO{-2%jVy+xf%0a!^d8(a0_HT^@;%H$J=42$;mcX%^LP53IHf4l7@Ek{2$!%zP9DRn
zMaK67!fv_oKfevWe?8e4cHxxqN(2Cc@}QZ!4Q(Q!y<4O=U38kD%B%}%Z0Z?bhph3I
z&sm?<h;gK74)QFObbt2F77B=Z+2xb{c^Ybv*yJM(sxban{NA~V9nQjfxb|1@pdeSB
z$G|~o8=k6?NMY<lk)gZ!#xh1uf5Vjj8dlU7>2V?gm@S~T7U=z)Uezlh1_TKK6d$|k
zb>CO_3je@h49df?r0!e(AMG6Hb69kCHStXh9P|{9WE%tFy+(V=?#MVVzfnM^=b-d;
z{W+|$x6!!Ne%wjRkN%AR@9Tg`9}7u-pMh9XOCEf;uIr~Fw<G5Zd&}9ATJf?p*K8d)
zXNFzhtiJp-X)OuDq<gS}WVO>-y@)6tc4#$>T;R{@sK)fLBa&Cw{n(fix%`Ke#1Fg{
zh6d>UR$1F8o{~2&T>bm3WC$N~C6QM_5~P3`S{N}_ul*!qWWw=ifpH{P<3mEPtS}!`
z;zO&7?Hc>>9K64$y4?B@@!($XF<$3F(8OcVc>!1BS>PZn33L$y)q##0e>7us6!N>J
zlLBN)Ns3RP(&nbpc^zSuH<hayERy~T>!F~B<5Q!5G~%7KY9a_aW?O`v%Y=g{Fhbo$
zDU*#icdw|WF$fqKi(H8}=3D{HLkp9?-p2oZD-X86-(#X!y~wq(+MR6EJ%^x{aR+ko
z8M#FM^3c}zn#Rh%2P5rHct_haq&AcKCVkZgL_u4{HG+U+j%MTlB#!rVb99k@UV1w2
zd8baJEdDUZYJ-JWQlZc>X;2_t_P{3R<WfSfH39cYnr4WKtjj_91ptdt_c*TE0{0f0
zd_337WCLCvv7IS3?^VP=3-EQaC@YW4Oyco+M?@+gwefPEmmEvD#XpJYuYvV&9p6dl
ztninq3_$x?yOSqyqYjct4_Pl1TDn@t{Uq2)lP=9rt{qr92Y}c8^NCfBAUUrowU5|2
z2ed2&h8i$3F<~sO=n8w&%&Pi8UR>m+6A>B?@ltyrFP!u)eOiSK)J*<aCh$W4?8DO|
zLwdDX&DbhlfiWn%wd_SKR3C<a-jBPCbK`(!nD;WEWeG3pY(E6FdUL-2IeYD)><vIU
zF&=;JlE$7HzOJ6m(WE_qm(=LCR0S^?&WoPB4%dO((A-+A@-SI8&kg7u(u0ki_?@LW
z&4BoHx<usoEP(B0w8-dabf*F@Vu%a<`szg)bmdsO0y7z7Br%Fe&%kC~UF`3x#>Xtn
zF@~YSsl~hE-6z=p6NrBwP>k^MB**2cUS*yj@<y5S=2l5!ZNL{XFso(r)73+sglu&W
z$Pgf5$pmAX;t9>9A^qv9^e@(Ln*X3{^nj{9-bXXhF%_E;^5|eLItJ+aewDdCK+@kD
z3YGJU`IMHY@0*oBryz->5Y%Y=W6gOHVEnGSiF(lox&mg`BL~nH=U=Sue@{!$w^?#P
z_mH4(F$557czm-O90W&lAU)V^++JI|u_HYes-Uj@RhQomS#w~`WthwK8JUm3yltye
z$RkpZ>HmaI^zlafXCF<z_#G^>lqo3&U?qOLt$8ii=NhYT?0raCypD#DR7VQ&UaJz6
z-PWbV03xEQ958sJ@>Z?iR(rW`SSbE>fWtyP^vRWH_Y&U>vB1R<)#ZCRXaA;t0c;GM
z1y_l}4a9I3IZyRSy=C7561Sb62bX2Gf$~-lf#CR_Tx^~d5|A`DR!1aKMTl-(KzarV
zYJHgPKB-Cby{fS~_i(Z~FN1DtXD-=67LFib+)Le~r*c~en17i9dSCVWi4cZOvHsFz
zV2D=K|NaLOg5N|jS|qXlOVzKAg;m~_f9d2RBXCX-vwy!-^Bizpdf~rB94`S}Cu{aE
zQSw>=*Fg*a<tW(-;5vfomS9`n;U;Zg)aDZyP@mZ!J4D-uS`;jkw1wObG=CISQu7S{
zZC~(M8l@Nh1hm#MSr9t@$eEO*AL@5uI9$hsy0AgN7R61A+!^b>Cm?|i|K}~_tA8#e
z;LdN?gC~t0@zJd`Nxo1m<eG#9`(W%Q>ODh&m_|VxUtT6Fl8SBs>F1`=8KZr{r}mVY
zqzdtakhPIkVn?sC9)mi^Qq6Bypc7AU>huz!XlH#&#eZptCHlNdXt7?be3YAlM!(-H
z?c_IaVnog>1#zD4x-ad=bxqH^cVJtM*QGTBm#0c%+(T-9_?>Denu1^*n&nT=@)5PT
zj0mYdfeM$Fk#VSd^eQ=-7EbHr?k=9IPQM5=3xO^!Tm!Mu!V6&@wpg{2oBLbgn&Fw}
zUGPFG>i(-XW13eSa5xPOf68z5hFt&N9m-)G>yb!AKiC+|s<CwRIwJYmPxwjkvHiwl
z=9V>6YOE+po!K<WoXj;@4KqEU$M%*I4H6(iFQN=@8P9$R%9_tv`*clR0CquT>Mq9k
z{KCbizM_g#cV5v4nS%sEeFti!1>(g9PG67*6LJ#A?u;sChrr=7geiWv(ifUbIJ4aI
zpbagG^KG)W@}kQC*tm)j!wXZp(52bs=Q4&`bW@ManoxD)w?Hd5=ixLDYeJUcEO*Xt
zDn5PEqykke7J6N>KWjE;bedOp&m~GEGDf{Iaw}A4z|Tcp{Xk720dh=4&OzkE{>`AW
z#Sj6>+XkBh*Vzw;@|mztu%YAu5s=Y`Wi#!qcFv>ew%m@K?O?mw0v4Ms@`aY`#q5!{
zSuMyHuHpwApg`iOI3ht6imW;IIf3Yfpj;AkSxDfc@pJJ0Zlda^y<ZN|)<^kS2R%JK
zrU6O)3iExLu@KhW7JHE0Xh45g;k(?bXS%4wGM!o7&Czv<L88Ag=9Tpr!Lu;rF`-gC
zmnhaBu;5znV2o9v!uC?q{}Ozs8$RBpV>}P%aA^yG`=+j%MHya>>RUtzAYW##<NOw6
z&pwnrUs!Kxh{83{A(fBr&^3u1UO?<`#NRVfGOn5cjK9|(OYDTsuv^RvuXxcEsM=9f
zz^M8HUT~AhH_nx#aY3qUXJwg?oQ-$80>W=;+a8Io<n##Y?wu?p%r^u=;ir(9V9?*K
zd|gpp9eCK|#<6WeqawXDk~`_}B%a(}u7j3Cw~AmLevlx$Xp4fMGW(mUToc7RTvmI*
z@gju)s5Qh2+sCYO*8grtFm*w;N>!DNmqk*LS-`9xw66Ksmk)-KWsCSKlSAewhw<i~
z#H!uY%}?NnpZM#G^JJ?2|MugSf5psZPtZ9b!)--uRG1EYqiCy9nMC_IIS1Nd@agVO
zu|(VtRYi+j-IBy>(;v@ete<#DaIoKno9RdHj$g0vA=7TweAWZ#@uJIE$VsqpTFT>>
zhnA%;nAC<`%`rK@6E(17ZBbQ>Bzx$@rAygxTJd9yHz#N7woT4sZvs$a9ChD(PL;&w
zF?IdP<CH~z<D=JVwxeQhe5k3WpvGJ`+9(k<I>I7_A`8f}qJpl;P#+N-Ra0es<T*Pt
z=cKz+sC}Ewfpz1^%|?}KhD8^n%ehm<ky>~9o<r~8pgXpyf^62$maa=5)?Mfu6U*J-
zIK2pvqk4YN3+0H|dr7!t_>SyI)K>9nW=Nxn+;-SzMLxSR-i!?9RPxMtxj#_C3BL|X
zsAAI|z1?52<;?K~B?OckP2&7@M`ykl613t!{Kjvjtrtf`8KP?#9z!W~rj2z4g$_S)
zRhqfl7DunI@X?>$htP(s=@#zGQ87PH1RpPCanWbOCv~)w#*7FrTz0vArBPDwgWPQu
zVX$mNRxmjz-}GP>{_>j~@49nioGEUSV$knGMtZW7xyiq#fbpU9tV>0R)~q|^UtG-O
z^HdorHHQwzCK@28&6@d)1SyQW6ue5Ch}Ej?Js97x9KOB9l#)nh1|RAEXx<_e@-^)9
z9`V8U<y??qe^>(uA2kkX$$2)A=edUrVG)N5-&7Vdf1N8SeZ4e6z}4QQH1a-I79%@L
z7W&Z8TjUh2dBQ?Ch8nVBvd@4n5Z_%1bf+Ny2>fFU^pB<Z|4~@x9AEN+59TjTwSSjA
zX~hS24cXE&w}t5Zr_qRgVUWNiu3jtC#K5T*X^^%dAE$;oKa$+NuRmgHvVpik&m;v$
SpB|(FemZybHA>VRBmNJ?oXfEQ

literal 0
HcmV?d00001

diff --git a/assets/about/post.png b/assets/about/post.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba291ec6650c6a8c6ff47e06384808f3427b870c
GIT binary patch
literal 352793
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%0D&O$PZ($&LKOrRh9U
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

literal 0
HcmV?d00001

diff --git a/assets/about/reaction.png b/assets/about/reaction.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4e7e06bc07b357a553ae7c573ec395170b7615d
GIT binary patch
literal 24621
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
a4?4pSflEv~On?^u=kBR#-zio#5BV>ddVw(j

literal 0
HcmV?d00001

diff --git a/assets/about/ui.png b/assets/about/ui.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad102a31afb50dc3ca79eb69d2651e0e0bcaa7a9
GIT binary patch
literal 128212
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%0D=Vjb47qEZ4cQ=&VtJzmp+i
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
CEG63j

literal 0
HcmV?d00001

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 07d8e7f48c..9404cd6ba6 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -6,6 +6,19 @@ common:
   misskey: "A ⭐ of fediverse"
   about-title: "A ⭐ of fediverse."
   about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
+  intro:
+    title: "Misskeyって?"
+    about: "Misskeyはオープンソースの<b>分散型マイクロブログSNS</b>です。リッチで高度にカスタマイズできるUI、投稿へのリアクション、ファイルを一元管理できるドライブなど、先進的な機能を揃えています。また、Fediverseと呼ばれるネットワークに接続できるため、他のSNSともやり取りできます。例えば、あなたが何か投稿すると、その投稿はMisskeyだけでなく他のSNSにも伝わります。ちょうどある惑星から他の惑星に電波を発信している様子をイメージしてください。"
+    features: "特徴"
+    rich-contents: "投稿"
+    rich-contents-desc: "自分の考え、話題の出来事、皆と共有したいことについて発信してください。必要であれば、様々な構文を使って投稿を装飾したり、好きな画像、動画などのファイルやアンケートを添付することもできます。"
+    reaction: "リアクション"
+    reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
+    ui: "インターフェース"
+    ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
+    drive: "ドライブ"
+    drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
+    outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
   adblock:
     detected: "広告ブロッカーを無効にしてください"
     warning: "<strong>Misskeyは広告を掲載していません</strong>が、広告をブロックする機能が有効だと一部の機能が利用できなかったり、不具合が発生する場合があります。"
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 549d9175f3..441ce890d0 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -7,86 +7,128 @@
 
 	<mk-forkit class="forkit"/>
 
-	<div class="body">
-		<div class="main block">
-			<div>
-				<h1 v-if="name != 'Misskey'">{{ name }}</h1>
-				<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
-
-				<div class="info">
-					<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
-					<span class="stats" v-if="stats">
-						<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
-						<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
-					</span>
-				</div>
-
-				<p class="desc" v-html="description || '%i18n:common.about%'"></p>
-
-				<p class="sign">
-					<span class="signup" @click="signup">%i18n:@signup%</span>
-					<span class="divider">|</span>
-					<span class="signin" @click="signin">%i18n:@signin%</span>
-				</p>
-
-				<img src="/assets/pointer.png" alt="" class="char">
-			</div>
-		</div>
-
-		<div class="announcements block">
-			<header>%fa:broadcast-tower% %i18n:@announcements%</header>
-			<div v-if="announcements && announcements.length > 0">
-				<div v-for="announcement in announcements">
-					<h1 v-html="announcement.title"></h1>
-					<div v-html="announcement.text"></div>
-				</div>
-			</div>
-		</div>
-
-		<div class="photos block">
-			<header>%fa:images% %i18n:@photos%</header>
-			<div>
-				<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
-			</div>
-		</div>
-
-		<div class="tag-cloud block">
-			<div>
-				<mk-tag-cloud/>
-			</div>
-		</div>
-
-		<div class="nav block">
-			<div>
-				<mk-nav class="nav"/>
-			</div>
-		</div>
-
-		<div class="side">
-			<div class="trends block">
+	<main>
+		<div class="body">
+			<div class="main block">
 				<div>
-					<mk-trends/>
+					<h1 v-if="name != 'Misskey'">{{ name }}</h1>
+					<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
+
+					<div class="info">
+						<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
+						<span class="stats" v-if="stats">
+							<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
+							<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
+						</span>
+					</div>
+
+					<p class="desc" v-html="description || '%i18n:common.about%'"></p>
+					<a class="about" @click="about">%i18n:@about%</a>
+
+					<p class="sign">
+						<span class="signup" @click="signup">%i18n:@signup%</span>
+						<span class="divider">|</span>
+						<span class="signin" @click="signin">%i18n:@signin%</span>
+					</p>
+
+					<img src="/assets/pointer.png" alt="" class="char">
 				</div>
 			</div>
 
-			<div class="tl block">
-				<header>%fa:comment-alt R% %i18n:@timeline%</header>
-				<div>
-					<mk-welcome-timeline class="tl" :max="20"/>
+			<div class="announcements block">
+				<header>%fa:broadcast-tower% %i18n:@announcements%</header>
+				<div v-if="announcements && announcements.length > 0">
+					<div v-for="announcement in announcements">
+						<h1 v-html="announcement.title"></h1>
+						<div v-html="announcement.text"></div>
+					</div>
 				</div>
 			</div>
 
-			<div class="info block">
-				<header>%fa:info-circle% %i18n:@info%</header>
+			<div class="photos block">
+				<header>%fa:images% %i18n:@photos%</header>
 				<div>
-					<div v-if="meta" class="body">
-						<p>Version: <b>{{ meta.version }}</b></p>
-						<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+					<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
+				</div>
+			</div>
+
+			<div class="tag-cloud block">
+				<div>
+					<mk-tag-cloud/>
+				</div>
+			</div>
+
+			<div class="nav block">
+				<div>
+					<mk-nav class="nav"/>
+				</div>
+			</div>
+
+			<div class="side">
+				<div class="trends block">
+					<div>
+						<mk-trends/>
+					</div>
+				</div>
+
+				<div class="tl block">
+					<header>%fa:comment-alt R% %i18n:@timeline%</header>
+					<div>
+						<mk-welcome-timeline class="tl" :max="20"/>
+					</div>
+				</div>
+
+				<div class="info block">
+					<header>%fa:info-circle% %i18n:@info%</header>
+					<div>
+						<div v-if="meta" class="body">
+							<p>Version: <b>{{ meta.version }}</b></p>
+							<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+						</div>
 					</div>
 				</div>
 			</div>
 		</div>
-	</div>
+	</main>
+
+	<modal name="about" :class="$store.state.device.darkmode ? ['about', 'modal-dark'] : ['about', 'modal-light']" width="800px" height="auto" scrollable>
+		<article class="fpdezooorhntlzyeszemrsqdlgbysvxq">
+			<h1>%i18n:common.intro.title%</h1>
+			<p v-html="'%i18n:common.intro.about%'"></p>
+			<section>
+				<h2>%i18n:common.intro.features%</h2>
+				<section>
+					<div class="body">
+						<h3>%i18n:common.intro.rich-contents%</h3>
+						<p v-html="'%i18n:common.intro.rich-contents-desc%'"></p>
+					</div>
+					<div class="image"><img src="/assets/about/post.png" alt=""></div>
+				</section>
+				<section>
+					<div class="body">
+						<h3>%i18n:common.intro.reaction%</h3>
+						<p v-html="'%i18n:common.intro.reaction-desc%'"></p>
+					</div>
+					<div class="image"><img src="/assets/about/reaction.png" alt=""></div>
+				</section>
+				<section>
+					<div class="body">
+						<h3>%i18n:common.intro.ui%</h3>
+						<p v-html="'%i18n:common.intro.ui-desc%'"></p>
+					</div>
+					<div class="image"><img src="/assets/about/ui.png" alt=""></div>
+				</section>
+				<section>
+					<div class="body">
+						<h3>%i18n:common.intro.drive%</h3>
+						<p v-html="'%i18n:common.intro.drive-desc%'"></p>
+					</div>
+					<div class="image"><img src="/assets/about/drive.png" alt=""></div>
+				</section>
+			</section>
+			<p v-html="'%i18n:common.intro.outro%'"></p>
+		</article>
+	</modal>
 
 	<modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
 		<header class="formHeader">%i18n:@signup%</header>
@@ -147,6 +189,10 @@ export default Vue.extend({
 	},
 
 	methods: {
+		about() {
+			this.$modal.show('about');
+		},
+
 		signup() {
 			this.$modal.show('signup');
 		},
@@ -199,6 +245,54 @@ export default Vue.extend({
 		margin 0 48px
 		font-size 1.5em
 
+.v--modal-overlay.about
+	.v--modal-box.v--modal
+		margin 32px 0
+
+.fpdezooorhntlzyeszemrsqdlgbysvxq
+	padding 64px
+
+	> p:last-child
+		margin-bottom 0
+
+	> h1
+		margin-top 0
+
+	> section
+		> h2
+			border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+		> section
+			display grid
+			grid-template-rows 1fr
+			grid-template-columns 180px 1fr
+			gap 32px
+			margin-bottom 32px
+			padding-bottom 32px
+			border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+			&:nth-child(odd)
+				grid-template-columns 1fr 180px
+
+				> .body
+					grid-column 1
+
+				> .image
+					grid-column 2
+
+			> .body
+				grid-row 1
+				grid-column 2
+
+			> .image
+				grid-row 1
+				grid-column 1
+
+				> img
+					display block
+					width 100%
+					height 100%
+					object-fit cover
 </style>
 
 <style lang="stylus" scoped>
@@ -226,16 +320,11 @@ root(isDark)
 		font-size 18px
 		color isDark ? #fff : #444
 
-	> .body
-		display grid
-		grid-template-rows 1fr 1fr 256px 64px
-		grid-template-columns 1fr 1fr 350px
-		gap 16px
-		width 100%
-		max-width 1200px
-		height 1200px
+	> main
 		margin 0 auto
 		padding 64px
+		width 100%
+		max-width 1200px
 
 		.block
 			color isDark ? #fff : #444
@@ -259,137 +348,144 @@ root(isDark)
 			> div
 				overflow auto
 
-		> .main
-			grid-row 1
-			grid-column 1 / 3
-			border-top solid 5px $theme-color
+		> .body
+			display grid
+			grid-template-rows 1fr 1fr 256px 64px
+			grid-template-columns 1fr 1fr 350px
+			gap 16px
+			height 1200px
 
-			> div
-				padding 32px
-				min-height 100%
-
-				> h1
-					margin 0
-
-					> img
-						margin -8px 0 0 -16px
-						max-width 280px
-
-				> .info
-					margin 0 auto 16px auto
-					width $width
-					font-size 14px
-
-					> .stats
-						margin-left 16px
-						padding-left 16px
-						border-left solid 1px isDark ? #fff : #444
-
-						> *
-							margin-right 16px
-
-				> .sign
-					font-size 120%
-
-					> .divider
-						margin 0 16px
-
-					> .signin
-					> .signup
-						cursor pointer
-
-						&:hover
-							color $theme-color
-
-				> .char
-					display block
-					position absolute
-					right 16px
-					bottom 16px
-					width 180px
-					opacity 0.3
-
-				> *:not(.char)
-					z-index 1
-
-		> .announcements
-			grid-row 2
-			grid-column 1
-
-			> div
-				padding 32px
+			> .main
+				grid-row 1
+				grid-column 1 / 3
+				border-top solid 5px $theme-color
 
 				> div
-					padding 0 0 16px 0
-					margin 0 0 16px 0
-					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+					padding 32px
+					min-height 100%
 
 					> h1
 						margin 0
-						font-size 1.25em
 
-		> .photos
-			grid-row 2
-			grid-column 2
+						> img
+							margin -8px 0 0 -16px
+							max-width 280px
 
-			> div
-				display grid
-				grid-template-rows 1fr 1fr 1fr
-				grid-template-columns 1fr 1fr
-				gap 8px
-				height 100%
-				padding 16px
+					> .info
+						margin 0 auto 16px auto
+						width $width
+						font-size 14px
 
-				> div
-					//border-radius 4px
-					background-position center center
-					background-size cover
+						> .stats
+							margin-left 16px
+							padding-left 16px
+							border-left solid 1px isDark ? #fff : #444
 
-		> .tag-cloud
-			grid-row 3
-			grid-column 1 / 3
+							> *
+								margin-right 16px
 
-			> div
-				height 256px
-				padding 32px
+					> .sign
+						font-size 120%
 
-		> .nav
-			display flex
-			justify-content center
-			align-items center
-			grid-row 4
-			grid-column 1 / 3
-			font-size 14px
+						> .divider
+							margin 0 16px
 
-		> .side
-			display grid
-			grid-row 1 / 5
-			grid-column 3
-			grid-template-rows 1fr 350px
-			grid-template-columns 1fr
-			gap 16px
+						> .signin
+						> .signup
+							cursor pointer
 
-			> .tl
-				grid-row 1
-				grid-column 1
-				overflow auto
+							&:hover
+								color $theme-color
 
-			> .trends
+					> .char
+						display block
+						position absolute
+						right 16px
+						bottom 16px
+						width 180px
+						opacity 0.3
+
+					> *:not(.char)
+						z-index 1
+
+			> .announcements
 				grid-row 2
 				grid-column 1
-				padding 8px
-
-			> .info
-				grid-row 3
-				grid-column 1
 
 				> div
+					padding 32px
+
+					> div
+						padding 0 0 16px 0
+						margin 0 0 16px 0
+						border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+						> h1
+							margin 0
+							font-size 1.25em
+
+			> .photos
+				grid-row 2
+				grid-column 2
+
+				> div
+					display grid
+					grid-template-rows 1fr 1fr 1fr
+					grid-template-columns 1fr 1fr
+					gap 8px
+					height 100%
 					padding 16px
 
-					> .body
-						> p
-							display block
-							margin 0
+					> div
+						//border-radius 4px
+						background-position center center
+						background-size cover
+
+			> .tag-cloud
+				grid-row 3
+				grid-column 1 / 3
+
+				> div
+					height 256px
+					padding 32px
+
+			> .nav
+				display flex
+				justify-content center
+				align-items center
+				grid-row 4
+				grid-column 1 / 3
+				font-size 14px
+
+			> .side
+				display grid
+				grid-row 1 / 5
+				grid-column 3
+				grid-template-rows 1fr 350px
+				grid-template-columns 1fr
+				gap 16px
+
+				> .tl
+					grid-row 1
+					grid-column 1
+					overflow auto
+
+				> .trends
+					grid-row 2
+					grid-column 1
+					padding 8px
+
+				> .info
+					grid-row 3
+					grid-column 1
+
+					> div
+						padding 16px
+
+						> .body
+							> p
+								display block
+								margin 0
 
 .mk-welcome[data-darkmode]
 	root(true)

From 82ee3a538be54992fad21137a6ae66f662f59d0f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 15:28:38 +0900
Subject: [PATCH 172/539] Improve welcome page

---
 src/client/app/mobile/views/pages/welcome.vue | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index f5014d585f..74f43f2c71 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -30,6 +30,34 @@
 				<div v-html="announcement.text"></div>
 			</article>
 		</div>
+		<article class="about-misskey">
+			<h1>%i18n:common.intro.title%</h1>
+			<p v-html="'%i18n:common.intro.about%'"></p>
+			<section>
+				<h2>%i18n:common.intro.features%</h2>
+				<section>
+					<h3>%i18n:common.intro.rich-contents%</h3>
+					<div class="image"><img src="/assets/about/post.png" alt=""></div>
+					<p v-html="'%i18n:common.intro.rich-contents-desc%'"></p>
+				</section>
+				<section>
+					<h3>%i18n:common.intro.reaction%</h3>
+					<div class="image"><img src="/assets/about/reaction.png" alt=""></div>
+					<p v-html="'%i18n:common.intro.reaction-desc%'"></p>
+				</section>
+				<section>
+					<h3>%i18n:common.intro.ui%</h3>
+					<div class="image"><img src="/assets/about/ui.png" alt=""></div>
+					<p v-html="'%i18n:common.intro.ui-desc%'"></p>
+				</section>
+				<section>
+					<h3>%i18n:common.intro.drive%</h3>
+					<div class="image"><img src="/assets/about/drive.png" alt=""></div>
+					<p v-html="'%i18n:common.intro.drive-desc%'"></p>
+				</section>
+			</section>
+			<p v-html="'%i18n:common.intro.outro%'"></p>
+		</article>
 		<div class="info" v-if="meta">
 			<p>Version: <b>{{ meta.version }}</b></p>
 			<p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
@@ -206,6 +234,46 @@ root(isDark)
 				> .title
 					font-weight bold
 
+		> .about-misskey
+			margin 16px 0
+			padding 32px
+			font-size 14px
+			background #fff
+			border-radius 6px
+			overflow hidden
+			color #3a3e46
+
+			> h1
+				margin 0
+
+				& + p
+					margin-top 8px
+
+			> p:last-child
+				margin-bottom 0
+
+			> section
+				> h2
+					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+				> section
+					margin-bottom 16px
+					padding-bottom 16px
+					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+
+					> h3
+						margin-bottom 8px
+
+					> p
+						margin-bottom 0
+
+					> .image
+						> img
+							display block
+							width 100%
+							height 120px
+							object-fit cover
+
 		> .info
 			padding 16px 0
 			border solid 2px #ddd

From d44dc7e00d54d4c1cf0f18faf60b53b7e88545a6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 15:30:07 +0900
Subject: [PATCH 173/539] 8.32.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index a3e7786226..32396cb64e 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.31.0",
-	"clientVersion": "1.0.9486",
+	"version": "8.32.0",
+	"clientVersion": "1.0.9489",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 0e01fb5fc31f30c1075e0384bf38dfc345e9f161 Mon Sep 17 00:00:00 2001
From: "pengin.nu" <37444014+penginnu@users.noreply.github.com>
Date: Sat, 8 Sep 2018 17:10:47 +0900
Subject: [PATCH 174/539] Update setup.ja.md (#2663)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Sudoに関する記述を追加
---
 docs/setup.ja.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/setup.ja.md b/docs/setup.ja.md
index 2758e6f231..609f3e9aa5 100644
--- a/docs/setup.ja.md
+++ b/docs/setup.ja.md
@@ -109,6 +109,7 @@ Restart=always
 [Install]
 WantedBy=multi-user.target
 ```
+CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
 
 3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
 4. `systemctl start misskey` misskeyサービスの起動

From 08c278578d2dc9329776e48111e4e10bc6a917ae Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Sat, 8 Sep 2018 19:03:20 +0900
Subject: [PATCH 175/539] use svg and cdn to download reactions (#2665)

---
 .../common/views/components/reaction-icon.vue |  22 +++++++++---------
 src/client/assets/reactions/angry.png         | Bin 4606 -> 0 bytes
 src/client/assets/reactions/confused.png      | Bin 6058 -> 0 bytes
 src/client/assets/reactions/congrats.png      | Bin 10000 -> 0 bytes
 src/client/assets/reactions/hmm.png           | Bin 5874 -> 0 bytes
 src/client/assets/reactions/laugh.png         | Bin 6933 -> 0 bytes
 src/client/assets/reactions/like.png          | Bin 4822 -> 0 bytes
 src/client/assets/reactions/love.png          | Bin 2805 -> 0 bytes
 src/client/assets/reactions/pudding.png       | Bin 7595 -> 0 bytes
 src/client/assets/reactions/rip.png           | Bin 6793 -> 0 bytes
 src/client/assets/reactions/surprise.png      | Bin 3806 -> 0 bytes
 src/client/assets/reactions/sushi.png         | Bin 8651 -> 0 bytes
 12 files changed, 11 insertions(+), 11 deletions(-)
 delete mode 100644 src/client/assets/reactions/angry.png
 delete mode 100644 src/client/assets/reactions/confused.png
 delete mode 100644 src/client/assets/reactions/congrats.png
 delete mode 100644 src/client/assets/reactions/hmm.png
 delete mode 100644 src/client/assets/reactions/laugh.png
 delete mode 100644 src/client/assets/reactions/like.png
 delete mode 100644 src/client/assets/reactions/love.png
 delete mode 100644 src/client/assets/reactions/pudding.png
 delete mode 100644 src/client/assets/reactions/rip.png
 delete mode 100644 src/client/assets/reactions/surprise.png
 delete mode 100644 src/client/assets/reactions/sushi.png

diff --git a/src/client/app/common/views/components/reaction-icon.vue b/src/client/app/common/views/components/reaction-icon.vue
index 46886b8ab2..61a3baa273 100644
--- a/src/client/app/common/views/components/reaction-icon.vue
+++ b/src/client/app/common/views/components/reaction-icon.vue
@@ -1,17 +1,17 @@
 <template>
 <span class="mk-reaction-icon">
-	<img v-if="reaction == 'like'" src="/assets/reactions/like.png" alt="%i18n:common.reactions.like%">
-	<img v-if="reaction == 'love'" src="/assets/reactions/love.png" alt="%i18n:common.reactions.love%">
-	<img v-if="reaction == 'laugh'" src="/assets/reactions/laugh.png" alt="%i18n:common.reactions.laugh%">
-	<img v-if="reaction == 'hmm'" src="/assets/reactions/hmm.png" alt="%i18n:common.reactions.hmm%">
-	<img v-if="reaction == 'surprise'" src="/assets/reactions/surprise.png" alt="%i18n:common.reactions.surprise%">
-	<img v-if="reaction == 'congrats'" src="/assets/reactions/congrats.png" alt="%i18n:common.reactions.congrats%">
-	<img v-if="reaction == 'angry'" src="/assets/reactions/angry.png" alt="%i18n:common.reactions.angry%">
-	<img v-if="reaction == 'confused'" src="/assets/reactions/confused.png" alt="%i18n:common.reactions.confused%">
-	<img v-if="reaction == 'rip'" src="/assets/reactions/rip.png" alt="%i18n:common.reactions.rip%">
+	<img v-if="reaction == 'like'" src="https://twemoji.maxcdn.com/2/svg/1f44d.svg" alt="%i18n:common.reactions.like%">
+	<img v-if="reaction == 'love'" src="https://twemoji.maxcdn.com/2/svg/2764.svg" alt="%i18n:common.reactions.love%">
+	<img v-if="reaction == 'laugh'" src="https://twemoji.maxcdn.com/2/svg/1f606.svg" alt="%i18n:common.reactions.laugh%">
+	<img v-if="reaction == 'hmm'" src="https://twemoji.maxcdn.com/2/svg/1f914.svg" alt="%i18n:common.reactions.hmm%">
+	<img v-if="reaction == 'surprise'" src="https://twemoji.maxcdn.com/2/svg/1f62e.svg" alt="%i18n:common.reactions.surprise%">
+	<img v-if="reaction == 'congrats'" src="https://twemoji.maxcdn.com/2/svg/1f389.svg" alt="%i18n:common.reactions.congrats%">
+	<img v-if="reaction == 'angry'" src="https://twemoji.maxcdn.com/2/svg/1f4a2.svg" alt="%i18n:common.reactions.angry%">
+	<img v-if="reaction == 'confused'" src="https://twemoji.maxcdn.com/2/svg/1f622.svg" alt="%i18n:common.reactions.confused%">
+	<img v-if="reaction == 'rip'" src="https://twemoji.maxcdn.com/2/svg/1f607.svg" alt="%i18n:common.reactions.rip%">
 	<template v-if="reaction == 'pudding'">
-		<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="/assets/reactions/sushi.png" alt="%i18n:common.reactions.pudding%">
-		<img v-else src="/assets/reactions/pudding.png" alt="%i18n:common.reactions.pudding%">
+		<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="https://twemoji.maxcdn.com/2/svg/1f363.svg" alt="%i18n:common.reactions.pudding%">
+		<img v-else src="https://twemoji.maxcdn.com/2/svg/1f36e.svg" alt="%i18n:common.reactions.pudding%">
 	</template>
 </span>
 </template>
diff --git a/src/client/assets/reactions/angry.png b/src/client/assets/reactions/angry.png
deleted file mode 100644
index 7e32dd6809bc85dfd060498d2170ebd181f4700e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4606
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

diff --git a/src/client/assets/reactions/confused.png b/src/client/assets/reactions/confused.png
deleted file mode 100644
index c791854183a4520c7a1af198c8f5858da26a2c61..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6058
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

diff --git a/src/client/assets/reactions/congrats.png b/src/client/assets/reactions/congrats.png
deleted file mode 100644
index fdea27fcb9ec608ef2b8a5e9bd85a2f3d7a2aa5e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10000
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

diff --git a/src/client/assets/reactions/hmm.png b/src/client/assets/reactions/hmm.png
deleted file mode 100644
index 725fe3898d5273f8464b4a33e829439c336708e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5874
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
X<mTa!aUjov{|Nw5)mABgW*PoJdACul

diff --git a/src/client/assets/reactions/laugh.png b/src/client/assets/reactions/laugh.png
deleted file mode 100644
index 3b3c10a27a8fd0b634f64cdf259e2155ae806f8b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6933
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

diff --git a/src/client/assets/reactions/like.png b/src/client/assets/reactions/like.png
deleted file mode 100644
index 526b391f96fa204e070e3f2d1e45d7f1fab1137c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4822
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

diff --git a/src/client/assets/reactions/love.png b/src/client/assets/reactions/love.png
deleted file mode 100644
index 9fe82cd070052b0aa11a154d1547cae8e5beb4ee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2805
zcmZ{mc{~%0AII04+U6l_C})Y7W9V^ZQ<3`&BaGy}nIoGc8flIm6q|BWQgS|X42vZs
zN2C%l=Bhj!rotRg{q)!G_50)ZdA+{h_v?FnUf+Me8JBI%1fUX7001ChVQ%bjK*H|;
zA34b9e09bT017a)F$4gba`^YX_zvomKIRTK06_d10N~~=0ATl^b@M9#a9slc_~#k`
zpno3#5XTjF*rN{yN4%}fj1PFAolBj`2Y}$rU84bj>b>7_2z|**;Gj2dVQh#Yd|LIu
zhPr<cWoAoDr4zJ{B}_<PLM+>41TZy^DLgr*Y*|!}896EfhGaMhUpA?zx`-togOZ_P
z^Qq1$--O6ebHgfye7S|rdPq4iO*VJjq5PPPg%udmaPeg1Zse$5w$H0lLVsz(^R{Mr
zt5(ib$PTA-ed-G*?DKy$;l1V39?Z_x9|6TeRUsTv!fi%0s2)yuz!>67!m{{)-AG&$
zV-$*ZvG;S%q%H4@1OfvfXuZS<g?Xx{P+~ip*Ls#0f16=KOnqY}h??3R`jD8ZJm%2o
zaV>}82W$|fxv}(#l6*-@xK2jNX$>W=4{;ru=*02_%_?w3h&K=f*2S30swdX%b`a&(
zj>HrQ`tmhZt~arbG|CI+4a**tHQjA7;L$a4+*}45RI0!olV7aqGx<xIvh|~ou`_>R
zCzhxV-4BG5*nQ;;8{kpURcYrQ4yehXoy&W?)BHIdW?ilz96;)hBQr28tPj{#{XA5P
zDXfPrKU-JTyQaSR>7Te)E-rO*!aNKwf;lDs2Xy8nw+(0~uBUitwJLQ`;QPv^>b{#q
zUv$qL4a?d+lA$kl9?pvavq|+UZlM-I5|;=PeUx%<pg5S0VSNYUweH@0+i1eN0W5gZ
zD@dNadD+_P@(MVPVK5(IU1f&?bqR?L8C7^^);RvUBdSd0LyFRzS&EL<J?3--_XyD-
z)7$as&w!Y58!IYz@-#O9_)B->{0$MB#~IvK{;kyyZy_z5CX`S|T%pDB6CGu*f37Ta
z+@r7@I~fgWbDEPzNnv7yhm3F&QAs`D$UNsTMC&8^fYFhu3j*_mN`i{KceJ8hln_4L
zynHs;zAP5>=2^(Y^Hy7@jQ+ASdO9xF)0d@Y*@Fv(5uP#XpJzz*u0k(#svS*wu7nH9
zq}6$yLct2CJwv;@Qn?yv-v;RDd!~-)u6<p`G%U$q!z`&zoM3w|XgpmYYgUK&<+ibZ
zfZ)baqJ6s2<8<xFhur7r-5-w`(eE7AyBd5=M6E2FAnr1=DE#N++t6b1TP@tp=jXPA
zQW?vT_`0>a8Tp#`>3U8qt8<E#lt(l2I9rB|TCw~@YC($WW(JzG)7%P>f8VIhk@b}7
zLS}k~gv6Ojqt0>Q1S_KX6EDY$Z}&SCFzo*6EA{t<iWpSBt}7SiGBdYR{1Y0Q1^7os
z^@G}9dTvY9h`yE4+cbv}{>md`-Km4NXHBG{H)RyLqKe9G1QS+MLhV9x{^}3#enwt?
zf_u@A-d602R_&}E|9%lHKcN;zm>g4f4hqD7!ScoJl&wr6xkkh(s@{m;zzBr2P+acK
zdeP{k3oo^U^E?$FYfK7hNsI7$ipj%Liv^b5h_PB(vMX>s#sNw~9jW}M_S4gWfa2Vq
z`4dEb>uU-DirP}J3p@6jL=~v>`Dl)EPSVRB1w`^MHJMm2eHip}=CzV)xYlTSR*40c
zHofQzhiyM#?3JYVc$3p4V{A<|H&8I1q+(?wZ3J|6-54(R(N#~8&U~#TbzYb@4ocG2
z5{h)lOvCe)2F>SAbe9}l_5|i=5|1L-R~H|_`9%oj2D2Vv->o}xY1cP<2w#m~;eRjv
zJ#QBK1{0ltJ@>c^L+Hm5bGXLOaFB_4;D`f8)x<BGaRH^7_M+@|eO^6cd%}4mr{sPQ
z%gpc{v%Ws@tu7i$eX+5_M3(ar#leYhAj-W4^E;i8;*{1i>~~*Z;lJfb-b-&a^O<PO
z>{g9n=5BKncb~NFr!vY!c#mLYEE>tp)dXdS$R*EZ464<epLQFUUT=X6Z4CMg>3Qw+
zB<HuVj#m%a!rKxyPL=hg!9(p{vB}z;5&|`kA{i>i<Fk1*?IA=+CU)Z&qEh!r;XiUv
zp*~kev#I-JggC*@^<k`)Wu%7<;|p~EA#Cy+;Ueo$O?5<b2k8?;{rkTwl(|V4<+1l8
zHv*T-`Zg0v1}J?7nP+$$X4XJ8qI-2e>y9p2ptpEfNxIN7RGdJCeTt$X5PhqK!@d)w
zq3ZX}8}{FHNOiZa8^YM@g`6dFI>lekvobWX28Mpl({tAip2;8Q4hd4)P@#P2<IRCA
z`1)Ff<vZ`Vp{kW$NyEb-y^lT^+`j&!U_pm?;m36PyOdR6a`~ENQK5E*R_($LP&T%w
zdRd8s){Y(yJr4GeyuYly`1Iv7pq+4F5WcT4*eEndRj;1nl)SX0D=iD98<P^>!25I*
z#GE${eUrgD5>agA8Li7pqu|6(CV>*AP^syBtb;_nOtJ-wjWm6^5wGX!llLjRn1lT2
z^J=q@kp)U(Rcieq3#JE_?_r84A5fN0*5HJP^pLRAji+%_=T;Z8h2l#8j$A>GFE!Sz
ztas)K?SP4PH1oYXia^pt6vgyI;lPcG;^mYNp1@jY^Uo-LXtA_Vy3G`U_a|T1=SrL7
z4UqlJ{-R&g$`$%6`t3Tt@ei|fkvdTH-rf4VT7^sBT^j5xdUgB`x3$vJeY~?6{CjVw
zDb2fs%*6+PxJfi!VpS#GOd3ASE`V|dMh2y|-BYPA$(T9tRND4oMQXIl+M2Fddl}<d
ziVrfpzb~m>91p+SP&_Z!Evu)LO*^e)wB@Li&MrBjw1#@Iy^w)2S`s9x@P!u|E`*EF
z9E4GDQOwM|T=kP?essj`;xTu1E*-+`QqQa^7ceHb;*Rbt1GD!2W>7Ky*!e4KGI9mp
z30myDc4HQm559elXmvzv%T>fF)YPqmo&ULMUMXC-fB2X(dnTdQvROVe%(O^M(5d1i
zSBE$qrMlM2It(flD-8{Q`6s6~tk(%R_ojjt!B2N%xf79Jzb^Mz><y?y#d>V61Ft-)
zI+2gC``o@C_&xwAp2n7_OFR~AHXt4U(b&n#3b_V)c^yqBZEmW$Ma{@@tLOhLBrV^V
zg?pKSr$*ayY3gA2yD8E#_Y{LHo_Zf%J`W@K()ydOOQbQCxk#efQ%u;ui`sEbEu<(y
zR^RvPmCJMb#4jofKY?L3c4hqU?l2ojf)~0b;GZWD!Q)%ugf@fSCS>x2t)EkkBkSAP
zGX2DZtu35wTsy-y?l!t*!n1xtqB<6`U&=_<qM75;7)X=If5U)G33?%Q@crAt$NhB8
z*W<J5AelVV=V3D0SnIE#P;ql&w+O95&`TG*-@<UYyKdUjI%Xeg0mp+Xk`df8AI#Gu
zWPv5R>$T#g9o|28m;zY~uBR5e&dyNgB;v24r86bWs;6r3Jy9w#?cOV1S-~H%1yJ|L
zB3~4lPL7D!l$rm^bn@3B7ad;HDy2>B;N??@F>#6U^@{P+_lfd50N|{Krk<LHu9~J6
zMpH}wtcLzsT@?)teGLtlp`?5NV+f1z4f2os{{{r5A9-Ln@%w^fgnta)E6NXm$K#Pf
e;UUpJUN}EwL{vc08d~CD31DGjYg})1E#*Ic3_c|Q

diff --git a/src/client/assets/reactions/pudding.png b/src/client/assets/reactions/pudding.png
deleted file mode 100644
index e4d10a229d94c68f4018a3d197a473a5123bb3f9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7595
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
L=&4t$T15O0PI-TJ

diff --git a/src/client/assets/reactions/rip.png b/src/client/assets/reactions/rip.png
deleted file mode 100644
index 4800fdb91b18be14cddce63fe372f9dba4c4172a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6793
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
VoCVYnXG#EoqO7V+m6U1Ne*w3M^8^3@

diff --git a/src/client/assets/reactions/surprise.png b/src/client/assets/reactions/surprise.png
deleted file mode 100644
index aa55592ded7b1b6c349487f834853935ad91c027..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3806
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
G*#7|`E*nPx

diff --git a/src/client/assets/reactions/sushi.png b/src/client/assets/reactions/sushi.png
deleted file mode 100644
index c30d44eb153709dc080dd295254fb9580cc5f3a8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8651
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
b;bzU@>S3F8Dn|Zq6F^yBL#|rJJmP-<^mT%V


From 67f60ab3071521838c1886716066c8a22ddb2e1a Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Sat, 8 Sep 2018 19:25:59 +0900
Subject: [PATCH 176/539]  fix wrong reaction img  (#2666)

* use svg and cdn to download reactions

* fix wrong reaction img
---
 src/client/app/common/views/components/reaction-icon.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/reaction-icon.vue b/src/client/app/common/views/components/reaction-icon.vue
index 61a3baa273..c668efac6b 100644
--- a/src/client/app/common/views/components/reaction-icon.vue
+++ b/src/client/app/common/views/components/reaction-icon.vue
@@ -7,7 +7,7 @@
 	<img v-if="reaction == 'surprise'" src="https://twemoji.maxcdn.com/2/svg/1f62e.svg" alt="%i18n:common.reactions.surprise%">
 	<img v-if="reaction == 'congrats'" src="https://twemoji.maxcdn.com/2/svg/1f389.svg" alt="%i18n:common.reactions.congrats%">
 	<img v-if="reaction == 'angry'" src="https://twemoji.maxcdn.com/2/svg/1f4a2.svg" alt="%i18n:common.reactions.angry%">
-	<img v-if="reaction == 'confused'" src="https://twemoji.maxcdn.com/2/svg/1f622.svg" alt="%i18n:common.reactions.confused%">
+	<img v-if="reaction == 'confused'" src="https://twemoji.maxcdn.com/2/svg/1f625.svg" alt="%i18n:common.reactions.confused%">
 	<img v-if="reaction == 'rip'" src="https://twemoji.maxcdn.com/2/svg/1f607.svg" alt="%i18n:common.reactions.rip%">
 	<template v-if="reaction == 'pudding'">
 		<img v-if="$store.getters.isSignedIn && $store.state.settings.iLikeSushi" src="https://twemoji.maxcdn.com/2/svg/1f363.svg" alt="%i18n:common.reactions.pudding%">

From 5a13c38a6d27535da21894ca8642d722873c017f Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sat, 8 Sep 2018 21:44:28 +0900
Subject: [PATCH 177/539] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF?=
 =?UTF-8?q?=E3=83=B3=E3=82=B9=E5=90=8D=E3=81=8C=E3=83=96=E3=83=A9=E3=82=A6?=
 =?UTF-8?q?=E3=82=B6=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB=E3=81=AB=E5=8F=8D?=
 =?UTF-8?q?=E6=98=A0=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E3=81=AE=E3=82=92?=
 =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20(#2668)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* titleが反映されないのを修正

* deckでtitleが反映されるように修正
---
 src/client/app/config.ts                         | 2 ++
 src/client/app/desktop/views/pages/deck/deck.vue | 1 +
 src/client/app/mios.ts                           | 4 ++--
 src/server/web/views/note.pug                    | 2 +-
 src/server/web/views/user.pug                    | 2 +-
 webpack.config.ts                                | 4 +++-
 6 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/client/app/config.ts b/src/client/app/config.ts
index a326c521db..2e464c50f3 100644
--- a/src/client/app/config.ts
+++ b/src/client/app/config.ts
@@ -5,6 +5,7 @@ declare const _COPYRIGHT_: string;
 declare const _VERSION_: string;
 declare const _CODENAME_: string;
 declare const _ENV_: string;
+declare const _NAME_: string;
 
 const address = new URL(location.href);
 
@@ -20,3 +21,4 @@ export const copyright = _COPYRIGHT_;
 export const version = _VERSION_;
 export const codename = _CODENAME_;
 export const env = _ENV_;
+export const name = _NAME_;
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 26b989656e..5e7a07ea6b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -85,6 +85,7 @@ export default Vue.extend({
 	},
 
 	mounted() {
+		document.title = (this as any).os.instanceName;
 		document.documentElement.style.overflow = 'hidden';
 	},
 
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index 0f72cd2f34..d9d4ee9a07 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -3,7 +3,7 @@ import { EventEmitter } from 'eventemitter3';
 import * as uuid from 'uuid';
 
 import initStore from './store';
-import { apiUrl, version, lang } from './config';
+import { apiUrl, version, lang, name } from './config';
 import Progress from './common/scripts/loading';
 import Connection from './common/scripts/streaming/stream';
 import { HomeStreamManager } from './common/scripts/streaming/home';
@@ -72,7 +72,7 @@ export default class MiOS extends EventEmitter {
 	};
 
 	public get instanceName() {
-		return this.meta ? this.meta.data.name : 'Misskey';
+		return this.meta ? this.meta.data.name : name;
 	}
 
 	private isMetaFetching = false;
diff --git a/src/server/web/views/note.pug b/src/server/web/views/note.pug
index 4f7c3d7777..234ecabe22 100644
--- a/src/server/web/views/note.pug
+++ b/src/server/web/views/note.pug
@@ -6,7 +6,7 @@ block vars
 	- const url = `${config.url}/notes/${note.id}`;
 
 block title
-	= `${title} | Misskey`
+	= `${title} | ${config.name}`
 
 block desc
 	meta(name='description' content= summary)
diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug
index 63d2f75156..506a889d98 100644
--- a/src/server/web/views/user.pug
+++ b/src/server/web/views/user.pug
@@ -6,7 +6,7 @@ block vars
 	- const img = user.avatarId ? `${config.drive_url}/${user.avatarId}` : null;
 
 block title
-	= `${title} | Misskey`
+	= `${title} | ${config.name}`
 
 block desc
 	meta(name='description' content= user.description)
diff --git a/webpack.config.ts b/webpack.config.ts
index a50d6c40cc..bc1c0ddbcf 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -22,6 +22,7 @@ const locales = require('./locales');
 const meta = require('./package.json');
 const version = `${meta.clientVersion}-${rndstr({ length: 8, chars: '0-9a-z' })}`;
 const codename = meta.codename;
+import config from './src/config';
 
 declare var global: {
 	faReplacement: typeof faReplacement;
@@ -75,7 +76,8 @@ const consts = {
 	_CODENAME_: codename,
 	_LANG_: '%lang%',
 	_LANGS_: Object.keys(locales).map(l => [l, locales[l].meta.lang]),
-	_ENV_: process.env.NODE_ENV
+	_ENV_: process.env.NODE_ENV,
+	_NAME_: config.name
 };
 
 const _consts: { [ key: string ]: any } = {};

From c87b98c2af72cf8395808fcab43a6ce0555737da Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:15:39 +0900
Subject: [PATCH 178/539] Add ai illust

---
 assets/ai-orig.png | Bin 0 -> 261679 bytes
 assets/ai.png      | Bin 0 -> 249271 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 assets/ai-orig.png
 create mode 100644 assets/ai.png

diff --git a/assets/ai-orig.png b/assets/ai-orig.png
new file mode 100644
index 0000000000000000000000000000000000000000..b684e2c07834bb5181207144367eb364795a9c76
GIT binary patch
literal 261679
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%0ACFn5w
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
IE+ZfQKRcoOV*mgE

literal 0
HcmV?d00001

diff --git a/assets/ai.png b/assets/ai.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c6ca566324a0868889585a500aa609d25ba7c1d
GIT binary patch
literal 249271
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

literal 0
HcmV?d00001


From 5d4e9aa9498c94f1c352432d7bc89f427d067723 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:16:02 +0900
Subject: [PATCH 179/539] Show ai image in welcome page

---
 .../app/desktop/views/pages/welcome.vue       | 22 ++++++++++++-------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 441ce890d0..ea1734f8c7 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -22,8 +22,10 @@
 						</span>
 					</div>
 
-					<p class="desc" v-html="description || '%i18n:common.about%'"></p>
-					<a class="about" @click="about">%i18n:@about%</a>
+					<div class="desc">
+						<span class="desc" v-html="description || '%i18n:common.about%'"></span>
+						<a class="about" @click="about">%i18n:@about%</a>
+					</div>
 
 					<p class="sign">
 						<span class="signup" @click="signup">%i18n:@signup%</span>
@@ -31,7 +33,7 @@
 						<span class="signin" @click="signin">%i18n:@signin%</span>
 					</p>
 
-					<img src="/assets/pointer.png" alt="" class="char">
+					<img src="/assets/ai.png" alt="" title="藍" class="char">
 				</div>
 			</div>
 
@@ -350,10 +352,10 @@ root(isDark)
 
 		> .body
 			display grid
-			grid-template-rows 1fr 1fr 256px 64px
+			grid-template-rows 390px 1fr 256px 64px
 			grid-template-columns 1fr 1fr 350px
 			gap 16px
-			height 1200px
+			height 1150px
 
 			> .main
 				grid-row 1
@@ -384,8 +386,12 @@ root(isDark)
 							> *
 								margin-right 16px
 
+					> .desc
+						max-width calc(100% - 150px)
+
 					> .sign
 						font-size 120%
+						margin-bottom 0
 
 						> .divider
 							margin 0 16px
@@ -401,9 +407,9 @@ root(isDark)
 						display block
 						position absolute
 						right 16px
-						bottom 16px
-						width 180px
-						opacity 0.3
+						bottom 0
+						height 320px
+						opacity 0.7
 
 					> *:not(.char)
 						z-index 1

From 6a45bb21c384e722b0c67b0c65608cc62ae62b6a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:19:11 +0900
Subject: [PATCH 180/539] =?UTF-8?q?#2668=20=E3=81=AE=E4=B8=80=E9=83=A8?=
 =?UTF-8?q?=E3=82=92Revert?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/config.ts | 2 --
 src/client/app/mios.ts   | 4 ++--
 webpack.config.ts        | 4 +---
 3 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/client/app/config.ts b/src/client/app/config.ts
index 2e464c50f3..a326c521db 100644
--- a/src/client/app/config.ts
+++ b/src/client/app/config.ts
@@ -5,7 +5,6 @@ declare const _COPYRIGHT_: string;
 declare const _VERSION_: string;
 declare const _CODENAME_: string;
 declare const _ENV_: string;
-declare const _NAME_: string;
 
 const address = new URL(location.href);
 
@@ -21,4 +20,3 @@ export const copyright = _COPYRIGHT_;
 export const version = _VERSION_;
 export const codename = _CODENAME_;
 export const env = _ENV_;
-export const name = _NAME_;
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index d9d4ee9a07..0f72cd2f34 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -3,7 +3,7 @@ import { EventEmitter } from 'eventemitter3';
 import * as uuid from 'uuid';
 
 import initStore from './store';
-import { apiUrl, version, lang, name } from './config';
+import { apiUrl, version, lang } from './config';
 import Progress from './common/scripts/loading';
 import Connection from './common/scripts/streaming/stream';
 import { HomeStreamManager } from './common/scripts/streaming/home';
@@ -72,7 +72,7 @@ export default class MiOS extends EventEmitter {
 	};
 
 	public get instanceName() {
-		return this.meta ? this.meta.data.name : name;
+		return this.meta ? this.meta.data.name : 'Misskey';
 	}
 
 	private isMetaFetching = false;
diff --git a/webpack.config.ts b/webpack.config.ts
index bc1c0ddbcf..a50d6c40cc 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -22,7 +22,6 @@ const locales = require('./locales');
 const meta = require('./package.json');
 const version = `${meta.clientVersion}-${rndstr({ length: 8, chars: '0-9a-z' })}`;
 const codename = meta.codename;
-import config from './src/config';
 
 declare var global: {
 	faReplacement: typeof faReplacement;
@@ -76,8 +75,7 @@ const consts = {
 	_CODENAME_: codename,
 	_LANG_: '%lang%',
 	_LANGS_: Object.keys(locales).map(l => [l, locales[l].meta.lang]),
-	_ENV_: process.env.NODE_ENV,
-	_NAME_: config.name
+	_ENV_: process.env.NODE_ENV
 };
 
 const _consts: { [ key: string ]: any } = {};

From 408118a1e8595a8f50e0a002416b25b0c463e23a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:20:15 +0900
Subject: [PATCH 181/539] 8.33.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 32396cb64e..0112967b43 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.32.0",
-	"clientVersion": "1.0.9489",
+	"version": "8.33.0",
+	"clientVersion": "1.0.9497",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 02c1515a0fe56969d4441e54597a43ef5606dc88 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:30:29 +0900
Subject: [PATCH 182/539] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9412222614..b5c39f39ba 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-<img src="https://github.com/syuilo/misskey/blob/b3f42e62af698a67c2250533c437569559f1fdf9/src/himasaku/resources/himasaku.png?raw=true" align="right" width="320px"/>
+<img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/>
 
 [![Misskey](/assets/title.png)](https://misskey.xyz/)
 ================================================================

From 2fe872a9c98e98335324068fb89237165a2d830c Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 8 Sep 2018 23:34:51 +0900
Subject: [PATCH 183/539] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b5c39f39ba..863731b14e 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 [![][dependencies-badge]][dependencies-link]
 [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Greenkeeper badge](https://badges.greenkeeper.io/syuilo/misskey.svg)](https://greenkeeper.io/)
 
-Sophisticated microblogging platform, evolving forever.
+**Sophisticated microblogging platform, evolving forever.**
 
 [Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
 Since it exists within the Fediverse (a universe where various social media platforms are organized),

From 0790dd7a2c02a94698f50aad15236ec05bf77437 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 9 Sep 2018 02:45:29 +0900
Subject: [PATCH 184/539] 8.33.1

---
 package.json       |  2 +-
 src/models/note.ts | 10 ----------
 2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/package.json b/package.json
index 0112967b43..9323ab0ea3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.33.0",
+	"version": "8.33.1",
 	"clientVersion": "1.0.9497",
 	"codename": "nighthike",
 	"main": "./built/index.js",
diff --git a/src/models/note.ts b/src/models/note.ts
index 98d37caf22..181ebecf24 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -21,16 +21,6 @@ Note.createIndex('_files.contentType');
 Note.createIndex({
 	createdAt: -1
 });
-
-// 後方互換性のため
-Note.update({}, {
-	$rename: {
-		mediaIds: 'fileIds'
-	}
-}, {
-	multi: true
-});
-
 export default Note;
 
 export function isValidText(text: string): boolean {

From ea4e2da58d09a664d79f51fa1b6b9d0592839dbf Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sun, 9 Sep 2018 02:59:14 +0900
Subject: [PATCH 185/539] Fix AP Announce detection (#2672)

---
 src/remote/activitypub/misc/get-note-html.ts | 3 +--
 src/server/activitypub/outbox.ts             | 2 +-
 src/services/note/create.ts                  | 2 +-
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/remote/activitypub/misc/get-note-html.ts b/src/remote/activitypub/misc/get-note-html.ts
index 8df440930b..f92e91c34e 100644
--- a/src/remote/activitypub/misc/get-note-html.ts
+++ b/src/remote/activitypub/misc/get-note-html.ts
@@ -4,9 +4,8 @@ import parse from '../../../mfm/parse';
 import config from '../../../config';
 
 export default function(note: INote) {
-	if (note.text == null) return null;
-
 	let html = toHtml(parse(note.text), note.mentionedRemoteUsers);
+	if (html == null) html = '';
 
 	if (note.poll != null) {
 		const url = `${config.url}/notes/${note._id}`;
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index 9a4c881774..1d062f61a1 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -105,7 +105,7 @@ export default async (ctx: Router.IRouterContext) => {
  * @param note Note
  */
 export async function packActivity(note: INote): Promise<object> {
-	if (note.renoteId && note.text == null) {
+	if (note.renoteId && note.text == null && note.poll == null && (note.fileIds == null || note.fileIds.length == 0)) {
 		const renote = await Note.findOne(note.renoteId);
 		return renderAnnounce(renote.uri ? renote.uri : `${config.url}/notes/${renote._id}`, note);
 	}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index c08836c94b..ceb2ab2e2d 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -239,7 +239,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 });
 
 async function renderActivity(data: Option, note: INote) {
-	const content = data.renote && data.text == null
+	const content = data.renote && data.text == null && data.poll == null && (data.files == null || data.files.length == 0)
 		? renderAnnounce(data.renote.uri ? data.renote.uri : `${config.url}/notes/${data.renote._id}`, note)
 		: renderCreate(await renderNote(note, false), note);
 

From fd06fd4dc18313100db3f06e771c3c4258f24176 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 01:51:46 +0900
Subject: [PATCH 186/539] Resolve #2560

---
 src/server/api/endpoints/notes/create.ts | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 47b53c943b..96745132a3 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -132,25 +132,14 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 	let files: IDriveFile[] = [];
 	const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
 	if (fileIds != null) {
-		// Fetch files
-		// forEach だと途中でエラーなどがあっても return できないので
-		// 敢えて for を使っています。
-		for (const fileId of fileIds) {
-			// Fetch file
-			// SELECT _id
-			const entity = await DriveFile.findOne({
+		files = await Promise.all(fileIds.map(fileId => {
+			return DriveFile.findOne({
 				_id: fileId,
 				'metadata.userId': user._id
 			});
+		}));
 
-			if (entity === null) {
-				return rej('file not found');
-			} else {
-				files.push(entity);
-			}
-		}
-	} else {
-		files = null;
+		files = files.filter(file => file != null);
 	}
 
 	let renote: INote = null;

From 6f3996c061023619067bfb043f8b44e688826ae0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 01:51:57 +0900
Subject: [PATCH 187/539] Update theme color

---
 src/const.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/const.json b/src/const.json
index b93226b2d2..af9a22bce8 100644
--- a/src/const.json
+++ b/src/const.json
@@ -1,5 +1,5 @@
 {
 	"copyright": "Copyright (c) 2014-2018 syuilo",
-	"themeColor": "#f6584f",
+	"themeColor": "#fb4e4e",
 	"themeColorForeground": "#fff"
 }

From e07210524f4a43f8bde80468fb2808ba12bfc8be Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 01:54:08 +0900
Subject: [PATCH 188/539] Refactor: Add comments

---
 src/services/note/create.ts | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index ceb2ab2e2d..1ae363d915 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -107,20 +107,22 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 		data.visibleUsers = erase(null, data.visibleUsers);
 	}
 
+	// リプライ対象が削除された投稿だったらreject
 	if (data.reply && data.reply.deletedAt != null) {
 		return rej();
 	}
 
+	// Renote対象が削除された投稿だったらreject
 	if (data.renote && data.renote.deletedAt != null) {
 		return rej();
 	}
 
-	// リプライ先が自分以外の非公開の投稿なら禁止
+	// リプライ対象が自分以外の非公開の投稿なら禁止
 	if (data.reply && data.reply.visibility == 'private' && !data.reply.userId.equals(user._id)) {
 		return rej();
 	}
 
-	// Renote先が自分以外の非公開の投稿なら禁止
+	// Renote対象が自分以外の非公開の投稿なら禁止
 	if (data.renote && data.renote.visibility == 'private' && !data.renote.userId.equals(user._id)) {
 		return rej();
 	}

From 1344ffa67dbe74505bd922ac7185a4d41dfdddd7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 01:55:14 +0900
Subject: [PATCH 189/539] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=95=E3=82=8C?=
 =?UTF-8?q?=E3=81=9F=E6=8A=95=E7=A8=BF=E3=81=AB=E3=83=AA=E3=82=A2=E3=82=AF?=
 =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #1778
---
 src/server/api/endpoints/notes/reactions/create.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/server/api/endpoints/notes/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts
index 0781db16c5..ec68f065d8 100644
--- a/src/server/api/endpoints/notes/reactions/create.ts
+++ b/src/server/api/endpoints/notes/reactions/create.ts
@@ -43,6 +43,10 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		return rej('note not found');
 	}
 
+	if (note.deletedAt != null) {
+		return rej('this not is already deleted');
+	}
+
 	try {
 		await create(user, note, ps.reaction);
 	} catch (e) {

From e32884f07f0b05028a581c73073fa87da08d9fd0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 01:57:19 +0900
Subject: [PATCH 190/539] Fix #1740

---
 src/server/api/endpoints/notes/search_by_tag.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 77082c2600..fadebe4efe 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -128,7 +128,8 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	let q: any = {
 		$and: [{
 			tagsLower: ps.tag.toLowerCase()
-		}]
+		}],
+		deletedAt: { $exists: false }
 	};
 
 	const push = (x: any) => q.$and.push(x);
@@ -339,7 +340,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	}
 
 	if (q.$and.length == 0) {
-		q = {};
+		delete q.$and;
 	}
 
 	// Search notes

From e36d45507ad97f2590fba941d7ab22ebb524486d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:07:13 +0900
Subject: [PATCH 191/539] Fix #2513

---
 src/services/note/create.ts | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 1ae363d915..7062bc481b 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -269,13 +269,16 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 		}
 
 		if (['private', 'followers', 'specified'].includes(note.visibility)) {
-			// Publish event to myself's stream
-			publishUserStream(note.userId, 'note', await pack(note, user, {
+			const detailPackedNote = await pack(note, user, {
 				detail: true
-			}));
+			});
+			// Publish event to myself's stream
+			publishUserStream(note.userId, 'note', detailPackedNote);
+			publishHybridTimelineStream(note.userId, detailPackedNote);
 		} else {
 			// Publish event to myself's stream
 			publishUserStream(note.userId, 'note', noteObj);
+			publishHybridTimelineStream(note.userId, noteObj);
 
 			// Publish note to local and hybrid timeline stream
 			if (note.visibility != 'home') {

From eb4f625bbdadd63a32b9d6f09714b721e510defe Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:09:33 +0900
Subject: [PATCH 192/539] Fix #2096

---
 src/server/api/endpoints/i/update.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 585339e249..953a6aec2a 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -84,6 +84,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 		});
 
 		if (avatar == null) return rej('avatar not found');
+		if (!avatar.contentType.startsWith('image/')) return rej('avatar not an image');
 
 		updates.avatarUrl = avatar.metadata.thumbnailUrl || avatar.metadata.url || `${config.drive_url}/${avatar._id}`;
 
@@ -98,6 +99,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 		});
 
 		if (banner == null) return rej('banner not found');
+		if (!banner.contentType.startsWith('image/')) return rej('banner not an image');
 
 		updates.bannerUrl = banner.metadata.url || `${config.drive_url}/${banner._id}`;
 

From a32071541a0f76c25a8246e1d324f912a6843cfc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:20:09 +0900
Subject: [PATCH 193/539] Clean up

---
 src/server/api/endpoints/notes/hybrid-timeline.ts | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 0eb7b61830..5e39d8c78a 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -79,9 +79,6 @@ export const meta = {
 	}
 };
 
-/**
- * Get hybrid timeline of myself
- */
 export default async (params: any, user: ILocalUser) => {
 	const [ps, psErr] = getParams(meta, params);
 	if (psErr) throw psErr;

From d9a1cd082c53e27fe984157b99c26d8e623aeee7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:21:16 +0900
Subject: [PATCH 194/539] #2623

---
 src/server/api/endpoints/i/update.ts | 155 ++++++++++++++++-----------
 1 file changed, 92 insertions(+), 63 deletions(-)

diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 953a6aec2a..6aa4cc1148 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -6,6 +6,7 @@ import acceptAllFollowRequests from '../../../../services/following/requests/acc
 import { IApp } from '../../../../models/app';
 import config from '../../../../config';
 import { publishToFollowers } from '../../../../services/i/update';
+import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
@@ -15,72 +16,100 @@ export const meta = {
 
 	requireCredential: true,
 
-	kind: 'account-write'
+	kind: 'account-write',
+
+	params: {
+		name: $.str.optional.nullable.pipe(isValidName).note({
+			desc: {
+				'ja-JP': '名前(ハンドルネームやニックネーム)'
+			}
+		}),
+
+		description: $.str.optional.nullable.pipe(isValidDescription).note({
+			desc: {
+				'ja-JP': 'アカウントの説明や自己紹介'
+			}
+		}),
+
+		location: $.str.optional.nullable.pipe(isValidLocation).note({
+			desc: {
+				'ja-JP': '住んでいる地域、所在'
+			}
+		}),
+
+		birthday: $.str.optional.nullable.pipe(isValidBirthday).note({
+			desc: {
+				'ja-JP': '誕生日 (YYYY-MM-DD形式)'
+			}
+		}),
+
+		avatarId: $.type(ID).optional.nullable.note({
+			desc: {
+				'ja-JP': 'アイコンに設定する画像のドライブファイルID'
+			}
+		}),
+
+		bannerId: $.type(ID).optional.nullable.note({
+			desc: {
+				'ja-JP': 'バナーに設定する画像のドライブファイルID'
+			}
+		}),
+
+		wallpaperId: $.type(ID).optional.nullable.note({
+			desc: {
+				'ja-JP': '壁紙に設定する画像のドライブファイルID'
+			}
+		}),
+
+		isLocked: $.bool.optional.note({
+			desc: {
+				'ja-JP': '鍵アカウントか否か'
+			}
+		}),
+
+		isBot: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'Botか否か'
+			}
+		}),
+
+		isCat: $.bool.optional.note({
+			desc: {
+				'ja-JP': '猫か否か'
+			}
+		}),
+
+		autoWatch: $.bool.optional.note({
+			desc: {
+				'ja-JP': '投稿の自動ウォッチをするか否か'
+			}
+		}),
+	}
 };
 
 export default async (params: any, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
+
 	const isSecure = user != null && app == null;
 
 	const updates = {} as any;
 
-	// Get 'name' parameter
-	const [name, nameErr] = $.str.optional.nullable.pipe(isValidName).get(params.name);
-	if (nameErr) return rej('invalid name param');
-	if (name) updates.name = name;
+	if (ps.name !== undefined) updates.name = ps.name;
+	if (ps.description !== undefined) updates.description = ps.description;
+	if (ps.location !== undefined) updates['profile.location'] = ps.location;
+	if (ps.birthday !== undefined) updates['profile.birthday'] = ps.birthday;
+	if (ps.avatarId !== undefined) updates.avatarId = ps.avatarId;
+	if (ps.bannerId !== undefined) updates.bannerId = ps.bannerId;
+	if (ps.wallpaperId !== undefined) updates.wallpaperId = ps.wallpaperId;
+	if (typeof ps.isLocked == 'boolean') updates.isLocked = ps.isLocked;
+	if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
+	if (typeof ps.isCat == 'boolean') updates.isCat = ps.isCat;
+	if (typeof ps.autoWatch == 'boolean') updates['settings.autoWatch'] = ps.autoWatch;
 
-	// Get 'description' parameter
-	const [description, descriptionErr] = $.str.optional.nullable.pipe(isValidDescription).get(params.description);
-	if (descriptionErr) return rej('invalid description param');
-	if (description !== undefined) updates.description = description;
-
-	// Get 'location' parameter
-	const [location, locationErr] = $.str.optional.nullable.pipe(isValidLocation).get(params.location);
-	if (locationErr) return rej('invalid location param');
-	if (location !== undefined) updates['profile.location'] = location;
-
-	// Get 'birthday' parameter
-	const [birthday, birthdayErr] = $.str.optional.nullable.pipe(isValidBirthday).get(params.birthday);
-	if (birthdayErr) return rej('invalid birthday param');
-	if (birthday !== undefined) updates['profile.birthday'] = birthday;
-
-	// Get 'avatarId' parameter
-	const [avatarId, avatarIdErr] = $.type(ID).optional.nullable.get(params.avatarId);
-	if (avatarIdErr) return rej('invalid avatarId param');
-	if (avatarId !== undefined) updates.avatarId = avatarId;
-
-	// Get 'bannerId' parameter
-	const [bannerId, bannerIdErr] = $.type(ID).optional.nullable.get(params.bannerId);
-	if (bannerIdErr) return rej('invalid bannerId param');
-	if (bannerId !== undefined) updates.bannerId = bannerId;
-
-	// Get 'wallpaperId' parameter
-	const [wallpaperId, wallpaperIdErr] = $.type(ID).optional.nullable.get(params.wallpaperId);
-	if (wallpaperIdErr) return rej('invalid wallpaperId param');
-	if (wallpaperId !== undefined) updates.wallpaperId = wallpaperId;
-
-	// Get 'isLocked' parameter
-	const [isLocked, isLockedErr] = $.bool.optional.get(params.isLocked);
-	if (isLockedErr) return rej('invalid isLocked param');
-	if (isLocked != null) updates.isLocked = isLocked;
-
-	// Get 'isBot' parameter
-	const [isBot, isBotErr] = $.bool.optional.get(params.isBot);
-	if (isBotErr) return rej('invalid isBot param');
-	if (isBot != null) updates.isBot = isBot;
-
-	// Get 'isCat' parameter
-	const [isCat, isCatErr] = $.bool.optional.get(params.isCat);
-	if (isCatErr) return rej('invalid isCat param');
-	if (isCat != null) updates.isCat = isCat;
-
-	// Get 'autoWatch' parameter
-	const [autoWatch, autoWatchErr] = $.bool.optional.get(params.autoWatch);
-	if (autoWatchErr) return rej('invalid autoWatch param');
-	if (autoWatch != null) updates['settings.autoWatch'] = autoWatch;
-
-	if (avatarId) {
+	if (ps.avatarId) {
 		const avatar = await DriveFile.findOne({
-			_id: avatarId
+			_id: ps.avatarId
 		});
 
 		if (avatar == null) return rej('avatar not found');
@@ -93,9 +122,9 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 		}
 	}
 
-	if (bannerId) {
+	if (ps.bannerId) {
 		const banner = await DriveFile.findOne({
-			_id: bannerId
+			_id: ps.bannerId
 		});
 
 		if (banner == null) return rej('banner not found');
@@ -108,13 +137,13 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 		}
 	}
 
-	if (wallpaperId !== undefined) {
-		if (wallpaperId === null) {
+	if (ps.wallpaperId !== undefined) {
+		if (ps.wallpaperId === null) {
 			updates.wallpaperUrl = null;
 			updates.wallpaperColor = null;
 		} else {
 			const wallpaper = await DriveFile.findOne({
-				_id: wallpaperId
+				_id: ps.wallpaperId
 			});
 
 			if (wallpaper == null) return rej('wallpaper not found');
@@ -144,7 +173,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 	publishUserStream(user._id, 'meUpdated', iObj);
 
 	// 鍵垢を解除したとき、溜まっていたフォローリクエストがあるならすべて承認
-	if (user.isLocked && isLocked === false) {
+	if (user.isLocked && ps.isLocked === false) {
 		acceptAllFollowRequests(user);
 	}
 

From 6ac92ac4b86a2e9aeac55b7e1259a9dedcb7e379 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:43:16 +0900
Subject: [PATCH 195/539] Fix #2321

---
 src/models/note.ts          | 127 +++++++++++++++++++-----------------
 src/services/note/create.ts |   9 ++-
 2 files changed, 75 insertions(+), 61 deletions(-)

diff --git a/src/models/note.ts b/src/models/note.ts
index 181ebecf24..624bdbdfe8 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -162,6 +162,66 @@ export async function deleteNote(note: string | mongo.ObjectID | INote) {
 	console.log(`Note: deleted ${n._id}`);
 }
 
+export const hideNote = async (packedNote: any, meId: mongo.ObjectID) => {
+	let hide = false;
+
+	// visibility が private かつ投稿者のIDが自分のIDではなかったら非表示
+	if (packedNote.visibility == 'private' && (meId == null || !meId.equals(packedNote.userId))) {
+		hide = true;
+	}
+
+	// visibility が specified かつ自分が指定されていなかったら非表示
+	if (packedNote.visibility == 'specified') {
+		if (meId == null) {
+			hide = true;
+		} else if (meId.equals(packedNote.userId)) {
+			hide = false;
+		} else {
+			// 指定されているかどうか
+			const specified = packedNote.visibleUserIds.some((id: mongo.ObjectID) => id.equals(meId));
+
+			if (specified) {
+				hide = false;
+			} else {
+				hide = true;
+			}
+		}
+	}
+
+	// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
+	if (packedNote.visibility == 'followers') {
+		if (meId == null) {
+			hide = true;
+		} else if (meId.equals(packedNote.userId)) {
+			hide = false;
+		} else {
+			// フォロワーかどうか
+			const following = await Following.findOne({
+				followeeId: packedNote.userId,
+				followerId: meId
+			});
+
+			if (following == null) {
+				hide = true;
+			} else {
+				hide = false;
+			}
+		}
+	}
+
+	if (hide) {
+		packedNote.fileIds = [];
+		packedNote.files = [];
+		packedNote.text = null;
+		packedNote.poll = null;
+		packedNote.cw = null;
+		packedNote.tags = [];
+		packedNote.tagsLower = [];
+		packedNote.geo = null;
+		packedNote.isHidden = true;
+	}
+};
+
 /**
  * Pack a note for API response
  *
@@ -174,11 +234,13 @@ export const pack = async (
 	note: string | mongo.ObjectID | INote,
 	me?: string | mongo.ObjectID | IUser,
 	options?: {
-		detail: boolean
+		detail?: boolean;
+		skipHide?: boolean;
 	}
 ) => {
 	const opts = Object.assign({
-		detail: true
+		detail: true,
+		skipHide: false
 	}, options);
 
 	// Me
@@ -207,52 +269,6 @@ export const pack = async (
 
 	if (!_note) throw `invalid note arg ${note}`;
 
-	let hide = false;
-
-	// visibility が private かつ投稿者のIDが自分のIDではなかったら非表示
-	if (_note.visibility == 'private' && (meId == null || !meId.equals(_note.userId))) {
-		hide = true;
-	}
-
-	// visibility が specified かつ自分が指定されていなかったら非表示
-	if (_note.visibility == 'specified') {
-		if (meId == null) {
-			hide = true;
-		} else if (meId.equals(_note.userId)) {
-			hide = false;
-		} else {
-			// 指定されているかどうか
-			const specified = _note.visibleUserIds.some((id: mongo.ObjectID) => id.equals(meId));
-
-			if (specified) {
-				hide = false;
-			} else {
-				hide = true;
-			}
-		}
-	}
-
-	// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
-	if (_note.visibility == 'followers') {
-		if (meId == null) {
-			hide = true;
-		} else if (meId.equals(_note.userId)) {
-			hide = false;
-		} else {
-			// フォロワーかどうか
-			const following = await Following.findOne({
-				followeeId: _note.userId,
-				followerId: meId
-			});
-
-			if (following == null) {
-				hide = true;
-			} else {
-				hide = false;
-			}
-		}
-	}
-
 	const id = _note._id;
 
 	// Rename _id to id
@@ -274,7 +290,7 @@ export const pack = async (
 	}
 
 	// Populate files
-	_note.files = hide ? [] : Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) =>
+	_note.files = Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) =>
 		packFile(fileId)
 	));
 
@@ -304,7 +320,7 @@ export const pack = async (
 		}
 
 		// Poll
-		if (meId && _note.poll && !hide) {
+		if (meId && _note.poll) {
 			_note.poll = (async poll => {
 				const vote = await PollVote
 					.findOne({
@@ -349,15 +365,8 @@ export const pack = async (
 		_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
 	}
 
-	if (hide) {
-		_note.fileIds = [];
-		_note.text = null;
-		_note.poll = null;
-		_note.cw = null;
-		_note.tags = [];
-		_note.tagsLower = [];
-		_note.geo = null;
-		_note.isHidden = true;
+	if (!opts.skipHide) {
+		await hideNote(_note, meId);
 	}
 
 	return _note;
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 7062bc481b..ede3a01014 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -447,6 +447,11 @@ async function publishToUserLists(note: INote, noteObj: any) {
 }
 
 async function publishToFollowers(note: INote, noteObj: any, user: IUser, noteActivity: any) {
+	const detailPackedNote = await pack(note, null, {
+		detail: true,
+		skipHide: true
+	});
+
 	const followers = await Following.find({
 		followeeId: note.userId
 	});
@@ -465,10 +470,10 @@ async function publishToFollowers(note: INote, noteObj: any, user: IUser, noteAc
 			}
 
 			// Publish event to followers stream
-			publishUserStream(following.followerId, 'note', noteObj);
+			publishUserStream(following.followerId, 'note', detailPackedNote);
 
 			if (isRemoteUser(user) || note.visibility != 'public') {
-				publishHybridTimelineStream(following.followerId, noteObj);
+				publishHybridTimelineStream(following.followerId, detailPackedNote);
 			}
 		} else {
 			// フォロワーがリモートユーザーかつ投稿者がローカルユーザーなら投稿を配信

From ba05f236bd9588b2f780d8d3e95117a59891b671 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 02:47:34 +0900
Subject: [PATCH 196/539] Resolve #2101

---
 src/remote/activitypub/models/note.ts   | 2 +-
 src/remote/activitypub/renderer/note.ts | 1 +
 src/remote/activitypub/type.ts          | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index 97188b44a6..b4afda765a 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -91,7 +91,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
 	const reply = note.inReplyTo ? await resolveNote(note.inReplyTo, resolver) : null;
 
 	// テキストのパース
-	const text = htmlToMFM(note.content);
+	const text = note._misskey_content ? note._misskey_content : htmlToMFM(note.content);
 
 	// ユーザーの情報が古かったらついでに更新しておく
 	if (actor.updatedAt == null || Date.now() - actor.updatedAt.getTime() > 1000 * 60 * 60 * 24) {
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 6b30324ae7..04e131637a 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -87,6 +87,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 		attributedTo,
 		summary: note.cw,
 		content: toHtml(note),
+		_misskey_content_: note.text,
 		published: note.createdAt.toISOString(),
 		to,
 		cc,
diff --git a/src/remote/activitypub/type.ts b/src/remote/activitypub/type.ts
index 3d40ad48cb..28763d3e83 100644
--- a/src/remote/activitypub/type.ts
+++ b/src/remote/activitypub/type.ts
@@ -40,6 +40,7 @@ export interface IOrderedCollection extends IObject {
 
 export interface INote extends IObject {
 	type: 'Note';
+	_misskey_content: string;
 }
 
 export interface IPerson extends IObject {

From bc3a5f35124fff69e11e7c23bbd9798be8f9077c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 03:02:06 +0900
Subject: [PATCH 197/539] Fix #2596

---
 src/client/app/desktop/views/components/post-form.vue | 8 ++++----
 src/client/app/mobile/views/components/post-form.vue  | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index b2f0954d97..fd489283f1 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -63,6 +63,7 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
 import { erase } from '../../../../../prelude/array';
+import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
 	components: {
@@ -337,10 +338,9 @@ export default Vue.extend({
 		addVisibleUser() {
 			(this as any).apis.input({
 				title: '%i18n:@enter-username%'
-			}).then(username => {
-				(this as any).api('users/show', {
-					username
-				}).then(user => {
+			}).then(acct => {
+				if (acct.startsWith('@')) acct = acct.substr(1);
+				(this as any).api('users/show', parseAcct(acct)).then(user => {
 					this.visibleUsers.push(user);
 				});
 			});
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index dcb2f16fa4..7e6a4c38e1 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -60,6 +60,7 @@ import getFace from '../../../common/scripts/get-face';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
 import { erase } from '../../../../../prelude/array';
+import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
 	components: {
@@ -253,10 +254,9 @@ export default Vue.extend({
 		addVisibleUser() {
 			(this as any).apis.input({
 				title: '%i18n:@username-prompt%'
-			}).then(username => {
-				(this as any).api('users/show', {
-					username
-				}).then(user => {
+			}).then(acct => {
+				if (acct.startsWith('@')) acct = acct.substr(1);
+				(this as any).api('users/show', parseAcct(acct)).then(user => {
 					this.visibleUsers.push(user);
 				});
 			});

From 5b2f15726fffd41e77e7a4b1e594f0f2713eb193 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 03:15:46 +0900
Subject: [PATCH 198/539] Fix #2675

---
 src/services/note/create.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index ede3a01014..94ca246e5b 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -184,7 +184,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 
 	const noteActivity = await renderActivity(data, note);
 
-	if (isLocalUser(user)) {
+	if (isLocalUser(user) && note.visibility != 'private') {
 		deliverNoteToMentionedRemoteUsers(mentionedUsers, user, noteActivity);
 	}
 

From 23efaae85ebfa722fba132004a52c2444a614808 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 03:39:00 +0900
Subject: [PATCH 199/539] lint

---
 src/server/api/endpoints/notes/search_by_tag.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index fadebe4efe..11bfe34724 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -125,7 +125,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		ids.forEach(id => ps.excludeUserIds.push(id));
 	}
 
-	let q: any = {
+	const q: any = {
 		$and: [{
 			tagsLower: ps.tag.toLowerCase()
 		}],

From 0fabb6a057cfc92e2d76070a1baa1f934da4fbb8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 03:40:01 +0900
Subject: [PATCH 200/539] 8.34.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 9323ab0ea3..d981dbf25a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.33.1",
-	"clientVersion": "1.0.9497",
+	"version": "8.34.0",
+	"clientVersion": "1.0.9559",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 507a19248925ad9098956709dfaaba25ed070f54 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 05:45:29 +0900
Subject: [PATCH 201/539] Fix bug

---
 src/services/note/create.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 94ca246e5b..771e9cade8 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -278,7 +278,6 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 		} else {
 			// Publish event to myself's stream
 			publishUserStream(note.userId, 'note', noteObj);
-			publishHybridTimelineStream(note.userId, noteObj);
 
 			// Publish note to local and hybrid timeline stream
 			if (note.visibility != 'home') {
@@ -287,6 +286,9 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 
 			if (note.visibility == 'public') {
 				publishHybridTimelineStream(null, noteObj);
+			} else {
+				// Publish event to myself's stream
+				publishHybridTimelineStream(note.userId, noteObj);
 			}
 		}
 	}

From eebed9944c85bbf47381cbd21582321012692b90 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 05:45:59 +0900
Subject: [PATCH 202/539] 8.34.1

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index d981dbf25a..410b23bc52 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.34.0",
-	"clientVersion": "1.0.9559",
+	"version": "8.34.1",
+	"clientVersion": "1.0.9561",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 20a9c25d70bac9a87edb04f62515eea290850b4a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 14:48:19 +0900
Subject: [PATCH 203/539] Fix #2677

---
 src/services/note/delete.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index 32e736b7a5..b164d59781 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -25,7 +25,8 @@ export default async function(user: IUser, note: INote) {
 			tags: [],
 			fileIds: [],
 			poll: null,
-			geo: null
+			geo: null,
+			cw: null
 		}
 	});
 

From 77d9ae92f6da8a7a403c5aa276ee789df223ee99 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 15:07:37 +0900
Subject: [PATCH 204/539] 8.34.2

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 410b23bc52..c8f8718439 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.34.1",
-	"clientVersion": "1.0.9561",
+	"version": "8.34.2",
+	"clientVersion": "1.0.9567",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From f3ab8199a53543f231cdf7c0678b331896b4a133 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 17:40:41 +0900
Subject: [PATCH 205/539] Fix bug

---
 src/services/drive/add-file.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index d1c7051ab0..a7a5ab5726 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -36,8 +36,8 @@ async function save(path: string, name: string, type: string, hash: string, size
 
 	if (config.drive && config.drive.storage == 'minio') {
 		const minio = new Minio.Client(config.drive.config);
-		const key = `${config.drive.prefix}/${uuid.v4()}/${name}`;
-		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
+		const key = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}`;
+		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}.thumbnail.jpg`;
 
 		const baseUrl = config.drive.baseUrl
 			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;

From 4dc8351f56416832f156e7e67f548810fc8e4960 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 17:50:34 +0900
Subject: [PATCH 206/539] Optimize booting script

---
 src/client/app/boot.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index f14cebe7d5..25aa26dd19 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -18,6 +18,8 @@
 		return;
 	}
 
+	const langs = LANGS;
+
 	//#region Load settings
 	let settings = null;
 	const vuex = localStorage.getItem('vuex');
@@ -40,10 +42,10 @@
 	//#region Detect the user language
 	let lang = null;
 
-	if (LANGS.includes(navigator.language)) {
+	if (langs.includes(navigator.language)) {
 		lang = navigator.language;
 	} else {
-		lang = LANGS.find(x => x.split('-')[0] == navigator.language);
+		lang = langs.find(x => x.split('-')[0] == navigator.language);
 
 		if (lang == null) {
 			// Fallback
@@ -52,7 +54,7 @@
 	}
 
 	if (settings && settings.device.lang &&
-		LANGS.includes(settings.device.lang)) {
+		langs.includes(settings.device.lang)) {
 		lang = settings.device.lang;
 	}
 	//#endregion

From b24f368d3f207554735e4edc5c5a2b7e16a6d281 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Mon, 10 Sep 2018 18:02:46 +0900
Subject: [PATCH 207/539] =?UTF-8?q?=E3=82=B5=E3=83=AD=E3=82=B2=E3=83=BC?=
 =?UTF-8?q?=E3=83=88=E3=83=9A=E3=82=A2=E3=82=92=E5=AD=97=E6=95=B0=E3=81=AB?=
 =?UTF-8?q?=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=97=E3=81=AA=E3=81=84?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B=20(#2661)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Update post-form.vue

* Update messaging-message.ts

* Update post-form.vue

* Update note.ts

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update messaging-message.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update note.ts

refs: https://github.com/syuilo/misskey/pull/2661#issuecomment-419579444

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216175581

* Update post-form.vue

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242002

* Update post-form.vue

refs: https://github.com/syuilo/misskey/pull/2661#discussion_r216242105
---
 src/client/app/desktop/views/components/post-form.vue | 9 +++++++--
 src/client/app/mobile/views/components/post-form.vue  | 7 ++++++-
 src/models/messaging-message.ts                       | 3 ++-
 src/models/note.ts                                    | 5 +++--
 4 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index fd489283f1..483a51b0ae 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -45,7 +45,7 @@
 		<span v-if="visibility === 'specified'">%fa:envelope%</span>
 		<span v-if="visibility === 'private'">%fa:lock%</span>
 	</button>
-	<p class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</p>
+	<p class="text-count" :class="{ over: this.trimmedLength(text) > 1000 }">{{ 1000 - this.trimmedLength(text) }}</p>
 	<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
 		{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
 	</button>
@@ -63,6 +63,7 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
 import { erase } from '../../../../../prelude/array';
+import { length } from 'stringz';
 import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
@@ -147,7 +148,7 @@ export default Vue.extend({
 		canPost(): boolean {
 			return !this.posting &&
 				(1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) &&
-				(this.text.trim().length <= 1000);
+				(length(this.text.trim()) <= 1000);
 		}
 	},
 
@@ -199,6 +200,10 @@ export default Vue.extend({
 	},
 
 	methods: {
+	  trimmedLength(text: string) {
+			return length(text.trim());
+		},
+
 		addTag(tag: string) {
 			insertTextAtCursor(this.$refs.text, ` #${tag} `);
 		},
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 7e6a4c38e1..be20b11f14 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -4,7 +4,7 @@
 		<header>
 			<button class="cancel" @click="cancel">%fa:times%</button>
 			<div>
-				<span class="text-count" :class="{ over: text.length > 1000 }">{{ 1000 - text.length }}</span>
+				<span class="text-count" :class="{ over: trimmedLength(text) > 1000 }">{{ 1000 - trimmedLength(text) }}</span>
 				<span class="geo" v-if="geo">%fa:map-marker-alt%</span>
 				<button class="submit" :disabled="!canPost" @click="post">{{ submitText }}</button>
 			</div>
@@ -60,6 +60,7 @@ import getFace from '../../../common/scripts/get-face';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
 import { erase } from '../../../../../prelude/array';
+import { length } from 'stringz';
 import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
@@ -180,6 +181,10 @@ export default Vue.extend({
 	},
 
 	methods: {
+		trimmedLength(text: string) {
+			return length(text.trim());
+		},
+
 		addTag(tag: string) {
 			insertTextAtCursor(this.$refs.text, ` #${tag} `);
 		},
diff --git a/src/models/messaging-message.ts b/src/models/messaging-message.ts
index f46abd506d..d778164de0 100644
--- a/src/models/messaging-message.ts
+++ b/src/models/messaging-message.ts
@@ -4,6 +4,7 @@ import { pack as packUser } from './user';
 import { pack as packFile } from './drive-file';
 import db from '../db/mongodb';
 import MessagingHistory, { deleteMessagingHistory } from './messaging-history';
+import { length } from 'stringz';
 
 const MessagingMessage = db.get<IMessagingMessage>('messagingMessages');
 export default MessagingMessage;
@@ -19,7 +20,7 @@ export interface IMessagingMessage {
 }
 
 export function isValidText(text: string): boolean {
-	return text.length <= 1000 && text.trim() != '';
+	return length(text.trim()) <= 1000 && text.trim() != '';
 }
 
 /**
diff --git a/src/models/note.ts b/src/models/note.ts
index 624bdbdfe8..6530d0b324 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -2,6 +2,7 @@ import * as mongo from 'mongodb';
 const deepcopy = require('deepcopy');
 import rap from '@prezzemolo/rap';
 import db from '../db/mongodb';
+import { length } from 'stringz';
 import { IUser, pack as packUser } from './user';
 import { pack as packApp } from './app';
 import PollVote, { deletePollVote } from './poll-vote';
@@ -24,11 +25,11 @@ Note.createIndex({
 export default Note;
 
 export function isValidText(text: string): boolean {
-	return text.length <= 1000 && text.trim() != '';
+	return length(text.trim()) <= 1000 && text.trim() != '';
 }
 
 export function isValidCw(text: string): boolean {
-	return text.length <= 100;
+	return length(text.trim()) <= 100;
 }
 
 export type INote = {

From c6e69ffae479a986d09f70001d09dfd35a89615c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 18:07:38 +0900
Subject: [PATCH 208/539] 8.34.3

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index c8f8718439..6c24ae56a6 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.34.2",
-	"clientVersion": "1.0.9567",
+	"version": "8.34.3",
+	"clientVersion": "1.0.9572",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From b847886254329e6e249c920bc58b51becfa17e4b Mon Sep 17 00:00:00 2001
From: rinsuki <428rinsuki+git@gmail.com>
Date: Mon, 10 Sep 2018 18:32:51 +0900
Subject: [PATCH 209/539] fix docs (#2678)

---
 docs/setup.ja.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/setup.ja.md b/docs/setup.ja.md
index 609f3e9aa5..e1ed63cab4 100644
--- a/docs/setup.ja.md
+++ b/docs/setup.ja.md
@@ -10,7 +10,7 @@ Misskeyサーバーの構築にご関心をお寄せいただきありがとう
 
 *1.* Misskeyユーザーの作成
 ----------------------------------------------------------------
-Misskeyのrootで実行しない方がよいため、代わりにユーザーを作成します。
+Misskeyはrootユーザーで実行しない方がよいため、代わりにユーザーを作成します。
 Debianの例:
 
 ```

From 62db650e3c279952d7a16d3c53614890b50e930b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 21:17:49 +0900
Subject: [PATCH 210/539] Revert "Fix bug"

This reverts commit f3ab8199a53543f231cdf7c0678b331896b4a133.
---
 src/services/drive/add-file.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index a7a5ab5726..d1c7051ab0 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -36,8 +36,8 @@ async function save(path: string, name: string, type: string, hash: string, size
 
 	if (config.drive && config.drive.storage == 'minio') {
 		const minio = new Minio.Client(config.drive.config);
-		const key = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}`;
-		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${encodeURIComponent(name)}.thumbnail.jpg`;
+		const key = `${config.drive.prefix}/${uuid.v4()}/${name}`;
+		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
 
 		const baseUrl = config.drive.baseUrl
 			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;

From 5b09209ef9f406ef7f6c3bcac7ec59c303e51fc4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 21:36:43 +0900
Subject: [PATCH 211/539] Fix bug

---
 src/services/drive/add-file.ts | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index d1c7051ab0..828ebcbb94 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -36,8 +36,11 @@ async function save(path: string, name: string, type: string, hash: string, size
 
 	if (config.drive && config.drive.storage == 'minio') {
 		const minio = new Minio.Client(config.drive.config);
-		const key = `${config.drive.prefix}/${uuid.v4()}/${name}`;
-		const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}/${name}.thumbnail.jpg`;
+
+		const keyDir = `${config.drive.prefix}/${uuid.v4()}`;
+		const key = `${keyDir}/${name}`;
+		const thumbnailKeyDir = `${config.drive.prefix}/${uuid.v4()}`;
+		const thumbnailKey = `${thumbnailKeyDir}/${name}.thumbnail.jpg`;
 
 		const baseUrl = config.drive.baseUrl
 			|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;
@@ -61,8 +64,8 @@ async function save(path: string, name: string, type: string, hash: string, size
 				key: key,
 				thumbnailKey: thumbnailKey
 			},
-			url: `${ baseUrl }/${ key }`,
-			thumbnailUrl: thumbnail ? `${ baseUrl }/${ thumbnailKey }` : null
+			url: `${ baseUrl }/${ keyDir }/${ encodeURIComponent(name) }`,
+			thumbnailUrl: thumbnail ? `${ baseUrl }/${ thumbnailKeyDir }/${ encodeURIComponent(name) }.thumbnail.jpg` : null
 		});
 
 		const file = await DriveFile.insert({

From fe3dd25bc392032f5212b0769ff70950c857fd99 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 10 Sep 2018 21:40:14 +0900
Subject: [PATCH 212/539] 8.34.4

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 6c24ae56a6..304c309a52 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.34.3",
+	"version": "8.34.4",
 	"clientVersion": "1.0.9572",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From 1fea2cdcbe341bb56be1cd2b79a8115b482fab65 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 11 Sep 2018 20:57:25 +0900
Subject: [PATCH 213/539] Fix bug

---
 src/server/api/stream/home.ts            | 14 +++++++-------
 src/server/api/stream/hybrid-timeline.ts | 14 +++++++-------
 src/server/api/stream/local-timeline.ts  | 14 +++++++-------
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts
index dc3ce9d19f..5f3b6744b2 100644
--- a/src/server/api/stream/home.ts
+++ b/src/server/api/stream/home.ts
@@ -36,6 +36,13 @@ export default async function(
 
 	// Subscribe Home stream channel
 	subscriber.on(`user-stream:${user._id}`, async x => {
+		// Renoteなら再pack
+		if (x.type == 'note' && x.body.renoteId != null) {
+			x.body.renote = await pack(x.body.renoteId, user, {
+				detail: true
+			});
+		}
+
 		//#region 流れてきたメッセージがミュートしているユーザーが関わるものだったら無視する
 		if (x.type == 'note') {
 			if (mutedUserIds.includes(x.body.userId)) {
@@ -54,13 +61,6 @@ export default async function(
 		}
 		//#endregion
 
-		// Renoteなら再pack
-		if (x.type == 'note' && x.body.renoteId != null) {
-			x.body.renote = await pack(x.body.renoteId, user, {
-				detail: true
-			});
-		}
-
 		connection.send(JSON.stringify(x));
 	});
 
diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts
index c401145abe..d0dae9b0dd 100644
--- a/src/server/api/stream/hybrid-timeline.ts
+++ b/src/server/api/stream/hybrid-timeline.ts
@@ -19,6 +19,13 @@ export default async function(
 	subscriber.on(`hybrid-timeline:${user._id}`, onEvent);
 
 	async function onEvent(note: any) {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, user, {
+				detail: true
+			});
+		}
+
 		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 		if (mutedUserIds.indexOf(note.userId) != -1) {
 			return;
@@ -31,13 +38,6 @@ export default async function(
 		}
 		//#endregion
 
-		// Renoteなら再pack
-		if (note.renoteId != null) {
-			note.renote = await pack(note.renoteId, user, {
-				detail: true
-			});
-		}
-
 		connection.send(JSON.stringify({
 			type: 'note',
 			body: note
diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts
index 25e0e00c9f..e21c071bab 100644
--- a/src/server/api/stream/local-timeline.ts
+++ b/src/server/api/stream/local-timeline.ts
@@ -16,6 +16,13 @@ export default async function(
 
 	// Subscribe stream
 	subscriber.on('local-timeline', async note => {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, user, {
+				detail: true
+			});
+		}
+
 		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 		if (mutedUserIds.indexOf(note.userId) != -1) {
 			return;
@@ -28,13 +35,6 @@ export default async function(
 		}
 		//#endregion
 
-		// Renoteなら再pack
-		if (note.renoteId != null) {
-			note.renote = await pack(note.renoteId, user, {
-				detail: true
-			});
-		}
-
 		connection.send(JSON.stringify({
 			type: 'note',
 			body: note

From bb8139196ec337d58f6e519e197cdc5ab567026e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 12 Sep 2018 01:48:30 +0900
Subject: [PATCH 214/539] Fix wrong indentation

---
 src/stream.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/stream.ts b/src/stream.ts
index be7a8c4ba1..38a640c5da 100644
--- a/src/stream.ts
+++ b/src/stream.ts
@@ -10,7 +10,7 @@ function publish(channel: string, type: string, value?: any): void {
 		{ type: type } :
 		{ type: type, body: value };
 
-		ev.emit(channel, message);
+	ev.emit(channel, message);
 }
 
 export function publishUserStream(userId: ID, type: string, value?: any): void {

From 046976dffc1aa8bc02259ab4a65e74b1216a0ec3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 12 Sep 2018 02:48:19 +0900
Subject: [PATCH 215/539] Resolve #2691

---
 .../app/desktop/views/components/timeline.vue |  11 +-
 .../views/pages/admin/admin.dashboard.vue     |  35 +++--
 src/client/app/mobile/views/pages/home.vue    |  11 +-
 src/models/meta.ts                            |   1 +
 src/server/api/endpoints/admin/update-meta.ts |  10 ++
 src/server/api/endpoints/meta.ts              |   1 +
 src/stream.ts                                 | 135 +++++++++++-------
 7 files changed, 142 insertions(+), 62 deletions(-)

diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 52a7753438..8d72016f22 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -2,8 +2,8 @@
 <div class="mk-timeline">
 	<header>
 		<span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span>
-		<span :data-active="src == 'local'" @click="src = 'local'">%fa:R comments% %i18n:@local%</span>
-		<span :data-active="src == 'hybrid'" @click="src = 'hybrid'">%fa:share-alt% %i18n:@hybrid%</span>
+		<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
+		<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 		<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
 		<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
 		<button @click="chooseList" title="%i18n:@list%">%fa:list%</button>
@@ -29,7 +29,8 @@ export default Vue.extend({
 	data() {
 		return {
 			src: 'home',
-			list: null
+			list: null,
+			enableLocalTimeline: false
 		};
 	},
 
@@ -44,6 +45,10 @@ export default Vue.extend({
 	},
 
 	created() {
+		(this as any).os.getMeta().then(meta => {
+			this.enableLocalTimeline = !meta.disableLocalTimeline;
+		});
+
 		if (this.$store.state.device.tl) {
 			this.src = this.$store.state.device.tl.src;
 			if (this.src == 'list') {
diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index ebb54d782e..c86c30db17 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -1,22 +1,34 @@
 <template>
 <div class="obdskegsannmntldydackcpzezagxqfy mk-admin-card">
 	<header>%i18n:@dashboard%</header>
+
 	<div v-if="stats" class="stats">
 		<div><b>%fa:user% {{ stats.originalUsersCount | number }}</b><span>%i18n:@original-users%</span></div>
 		<div><span>%fa:user% {{ stats.usersCount | number }}</span><span>%i18n:@all-users%</span></div>
 		<div><b>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</b><span>%i18n:@original-notes%</span></div>
 		<div><span>%fa:pencil-alt% {{ stats.notesCount | number }}</span><span>%i18n:@all-notes%</span></div>
 	</div>
+
 	<div class="cpu-memory">
 		<x-cpu-memory :connection="connection"/>
 	</div>
-	<div>
-		<label>
-			<input type="checkbox" v-model="disableRegistration" @change="updateMeta">
-			<span>disableRegistration</span>
-		</label>
-		<button class="ui" @click="invite">%i18n:@invite%</button>
-		<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
+
+	<div class="form">
+		<div>
+			<label>
+				<input type="checkbox" v-model="disableRegistration" @change="updateMeta">
+				<span>%i18n:@disableRegistration%</span>
+			</label>
+			<button class="ui" @click="invite">%i18n:@invite%</button>
+			<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
+		</div>
+
+		<div>
+			<label>
+				<input type="checkbox" v-model="disableLocalTimeline" @change="updateMeta">
+				<span>%i18n:@disableLocalTimeline%</span>
+			</label>
+		</div>
 	</div>
 </div>
 </template>
@@ -33,6 +45,7 @@ export default Vue.extend({
 		return {
 			stats: null,
 			disableRegistration: false,
+			disableLocalTimeline: false,
 			inviteCode: null,
 			connection: null,
 			connectionId: null
@@ -44,6 +57,7 @@ export default Vue.extend({
 
 		(this as any).os.getMeta().then(meta => {
 			this.disableRegistration = meta.disableRegistration;
+			this.disableLocalTimeline = meta.disableLocalTimeline;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -61,7 +75,8 @@ export default Vue.extend({
 		},
 		updateMeta() {
 			(this as any).api('admin/update-meta', {
-				disableRegistration: this.disableRegistration
+				disableRegistration: this.disableRegistration,
+				disableLocalTimeline: this.disableLocalTimeline
 			});
 		}
 	}
@@ -97,4 +112,8 @@ export default Vue.extend({
 		border solid 1px #eee
 		border-radius: 8px
 
+	> .form
+		> div
+			border-bottom solid 1px #eee
+
 </style>
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 706c9cd28b..333ca1a7a1 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -24,8 +24,8 @@
 			<div class="body">
 				<div>
 					<span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span>
-					<span :data-active="src == 'local'" @click="src = 'local'">%fa:R comments% %i18n:@local%</span>
-					<span :data-active="src == 'hybrid'" @click="src = 'hybrid'">%fa:share-alt% %i18n:@hybrid%</span>
+					<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
+					<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 					<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
 					<template v-if="lists">
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
@@ -60,7 +60,8 @@ export default Vue.extend({
 			src: 'home',
 			list: null,
 			lists: null,
-			showNav: false
+			showNav: false,
+			enableLocalTimeline: false
 		};
 	},
 
@@ -85,6 +86,10 @@ export default Vue.extend({
 	},
 
 	created() {
+		(this as any).os.getMeta().then(meta => {
+			this.enableLocalTimeline = !meta.disableLocalTimeline;
+		});
+
 		if (this.$store.state.device.tl) {
 			this.src = this.$store.state.device.tl.src;
 			if (this.src == 'list') {
diff --git a/src/models/meta.ts b/src/models/meta.ts
index 4f1977f3b5..8ca68416f8 100644
--- a/src/models/meta.ts
+++ b/src/models/meta.ts
@@ -12,5 +12,6 @@ export type IMeta = {
 		originalUsersCount: number;
 	};
 	disableRegistration?: boolean;
+	disableLocalTimeline?: boolean;
 	hidedTags?: string[];
 };
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index f903628774..3f5cd56b2f 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -23,6 +23,12 @@ export const meta = {
 			}
 		}),
 
+		disableLocalTimeline: $.bool.optional.nullable.note({
+			desc: {
+				'ja-JP': 'ローカルタイムライン(とソーシャルタイムライン)を無効にするか否か'
+			}
+		}),
+
 		hidedTags: $.arr($.str).optional.nullable.note({
 			desc: {
 				'ja-JP': '統計などで無視するハッシュタグ'
@@ -45,6 +51,10 @@ export default (params: any) => new Promise(async (res, rej) => {
 		set.disableRegistration = ps.disableRegistration;
 	}
 
+	if (typeof ps.disableLocalTimeline === 'boolean') {
+		set.disableLocalTimeline = ps.disableLocalTimeline;
+	}
+
 	if (Array.isArray(ps.hidedTags)) {
 		set.hidedTags = ps.hidedTags;
 	}
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 4472d8d779..18b0882f76 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -34,6 +34,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		},
 		broadcasts: meta.broadcasts,
 		disableRegistration: meta.disableRegistration,
+		disableLocalTimeline: meta.disableLocalTimeline,
 		driveCapacityPerLocalUserMb: config.localDriveCapacityMb,
 		recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null,
 		swPublickey: config.sw ? config.sw.public_key : null,
diff --git a/src/stream.ts b/src/stream.ts
index 38a640c5da..ebc75c875c 100644
--- a/src/stream.ts
+++ b/src/stream.ts
@@ -1,58 +1,97 @@
 import * as mongo from 'mongodb';
 import Xev from 'xev';
-
-const ev = new Xev();
+import Meta, { IMeta } from './models/meta';
 
 type ID = string | mongo.ObjectID;
 
-function publish(channel: string, type: string, value?: any): void {
-	const message = type == null ? value : value == null ?
-		{ type: type } :
-		{ type: type, body: value };
+class Publisher {
+	private ev: Xev;
+	private meta: IMeta;
 
-	ev.emit(channel, message);
+	constructor() {
+		this.ev = new Xev();
+
+		setInterval(async () => {
+			this.meta = await Meta.findOne({});
+		}, 5000);
+	}
+
+	public getMeta = async () => {
+		if (this.meta != null) return this.meta;
+
+		this.meta = await Meta.findOne({});
+		return this.meta;
+	}
+
+	private publish = (channel: string, type: string, value?: any): void => {
+		const message = type == null ? value : value == null ?
+			{ type: type } :
+			{ type: type, body: value };
+
+		this.ev.emit(channel, message);
+	}
+
+	public publishUserStream = (userId: ID, type: string, value?: any): void => {
+		this.publish(`user-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishDriveStream = (userId: ID, type: string, value?: any): void => {
+		this.publish(`drive-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishNoteStream = (noteId: ID, type: string): void => {
+		this.publish(`note-stream:${noteId}`, null, noteId);
+	}
+
+	public publishUserListStream = (listId: ID, type: string, value?: any): void => {
+		this.publish(`user-list-stream:${listId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishMessagingStream = (userId: ID, otherpartyId: ID, type: string, value?: any): void => {
+		this.publish(`messaging-stream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishMessagingIndexStream = (userId: ID, type: string, value?: any): void => {
+		this.publish(`messaging-index-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishReversiStream = (userId: ID, type: string, value?: any): void => {
+		this.publish(`reversi-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishReversiGameStream = (gameId: ID, type: string, value?: any): void => {
+		this.publish(`reversi-game-stream:${gameId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishLocalTimelineStream = async (note: any): Promise<void> => {
+		const meta = await this.getMeta();
+		if (meta.disableLocalTimeline) return;
+		this.publish('local-timeline', null, note);
+	}
+
+	public publishHybridTimelineStream = async (userId: ID, note: any): Promise<void> => {
+		const meta = await this.getMeta();
+		if (meta.disableLocalTimeline) return;
+		this.publish(userId ? `hybrid-timeline:${userId}` : 'hybrid-timeline', null, note);
+	}
+
+	public publishGlobalTimelineStream = (note: any): void => {
+		this.publish('global-timeline', null, note);
+	}
 }
 
-export function publishUserStream(userId: ID, type: string, value?: any): void {
-	publish(`user-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
-}
+const publisher = new Publisher();
 
-export function publishDriveStream(userId: ID, type: string, value?: any): void {
-	publish(`drive-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
-}
+export default publisher;
 
-export function publishNoteStream(noteId: ID, type: string): void {
-	publish(`note-stream:${noteId}`, null, noteId);
-}
-
-export function publishUserListStream(listId: ID, type: string, value?: any): void {
-	publish(`user-list-stream:${listId}`, type, typeof value === 'undefined' ? null : value);
-}
-
-export function publishMessagingStream(userId: ID, otherpartyId: ID, type: string, value?: any): void {
-	publish(`messaging-stream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value);
-}
-
-export function publishMessagingIndexStream(userId: ID, type: string, value?: any): void {
-	publish(`messaging-index-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
-}
-
-export function publishReversiStream(userId: ID, type: string, value?: any): void {
-	publish(`reversi-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
-}
-
-export function publishReversiGameStream(gameId: ID, type: string, value?: any): void {
-	publish(`reversi-game-stream:${gameId}`, type, typeof value === 'undefined' ? null : value);
-}
-
-export function publishLocalTimelineStream(note: any): void {
-	publish('local-timeline', null, note);
-}
-
-export function publishHybridTimelineStream(userId: ID, note: any): void {
-	publish(userId ? `hybrid-timeline:${userId}` : 'hybrid-timeline', null, note);
-}
-
-export function publishGlobalTimelineStream(note: any): void {
-	publish('global-timeline', null, note);
-}
+export const publishUserStream = publisher.publishUserStream;
+export const publishDriveStream = publisher.publishDriveStream;
+export const publishNoteStream = publisher.publishNoteStream;
+export const publishUserListStream = publisher.publishUserListStream;
+export const publishMessagingStream = publisher.publishMessagingStream;
+export const publishMessagingIndexStream = publisher.publishMessagingIndexStream;
+export const publishReversiStream = publisher.publishReversiStream;
+export const publishReversiGameStream = publisher.publishReversiGameStream;
+export const publishLocalTimelineStream = publisher.publishLocalTimelineStream;
+export const publishHybridTimelineStream = publisher.publishHybridTimelineStream;
+export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream;

From 0ed197d4d9d40ca93f492a5ecd20e9c861a7f7d2 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Wed, 12 Sep 2018 03:02:14 +0900
Subject: [PATCH 216/539] Use unique (#2695)

---
 src/client/app/desktop/views/components/post-form.vue | 4 ++--
 src/client/app/mobile/views/components/post-form.vue  | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 483a51b0ae..c371940aa3 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -62,7 +62,7 @@ import getFace from '../../../common/scripts/get-face';
 import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
-import { erase } from '../../../../../prelude/array';
+import { erase, unique } from '../../../../../prelude/array';
 import { length } from 'stringz';
 import parseAcct from '../../../../../misc/acct/parse';
 
@@ -397,7 +397,7 @@ export default Vue.extend({
 			if (this.text && this.text != '') {
 				const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
 				const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[];
-				localStorage.setItem('hashtags', JSON.stringify(hashtags.concat(history).reduce((a, c) => a.includes(c) ? a : [...a, c], [])));
+				localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history))));
 			}
 		},
 
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index be20b11f14..212451a5bc 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -308,7 +308,7 @@ export default Vue.extend({
 			if (this.text && this.text != '') {
 				const hashtags = parse(this.text).filter(x => x.type == 'hashtag').map(x => x.hashtag);
 				const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[];
-				localStorage.setItem('hashtags', JSON.stringify(hashtags.concat(history).reduce((a, c) => a.includes(c) ? a : [...a, c], [])));
+				localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history))));
 			}
 		},
 

From ca2230f690a77f368126282ba51ec28a46e92dca Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 12 Sep 2018 03:32:47 +0900
Subject: [PATCH 217/539] Refactor

---
 .../components/misskey-flavored-markdown.ts   | 57 +++++++++----------
 1 file changed, 28 insertions(+), 29 deletions(-)

diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.ts b/src/client/app/common/views/components/misskey-flavored-markdown.ts
index 44680751f7..224bd6f5de 100644
--- a/src/client/app/common/views/components/misskey-flavored-markdown.ts
+++ b/src/client/app/common/views/components/misskey-flavored-markdown.ts
@@ -1,4 +1,4 @@
-import Vue from 'vue';
+import Vue, { VNode } from 'vue';
 import * as emojilib from 'emojilib';
 import { length } from 'stringz';
 import parse from '../../../../../mfm/parse';
@@ -6,10 +6,7 @@ import getAcct from '../../../../../misc/acct/render';
 import { url } from '../../../config';
 import MkUrl from './url.vue';
 import MkGoogle from './google.vue';
-
-const flatten = list => list.reduce(
-	(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
-);
+import { concat } from '../../../../../prelude/array';
 
 export default Vue.component('misskey-flavored-markdown', {
 	props: {
@@ -32,20 +29,20 @@ export default Vue.component('misskey-flavored-markdown', {
 	},
 
 	render(createElement) {
-		let ast;
+		let ast: any[];
 
 		if (this.ast == null) {
 			// Parse text to ast
 			ast = parse(this.text);
 		} else {
-			ast = this.ast;
+			ast = this.ast as any[];
 		}
 
 		let bigCount = 0;
 		let motionCount = 0;
 
 		// Parse ast to DOM
-		const els = flatten(ast.map(token => {
+		const els = concat(ast.map((token): VNode[] => {
 			switch (token.type) {
 				case 'text': {
 					const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
@@ -56,12 +53,12 @@ export default Vue.component('misskey-flavored-markdown', {
 						x[x.length - 1].pop();
 						return x;
 					} else {
-						return createElement('span', text.replace(/\n/g, ' '));
+						return [createElement('span', text.replace(/\n/g, ' '))];
 					}
 				}
 
 				case 'bold': {
-					return createElement('b', token.bold);
+					return [createElement('b', token.bold)];
 				}
 
 				case 'big': {
@@ -95,23 +92,23 @@ export default Vue.component('misskey-flavored-markdown', {
 				}
 
 				case 'url': {
-					return createElement(MkUrl, {
+					return [createElement(MkUrl, {
 						props: {
 							url: token.content,
 							target: '_blank'
 						}
-					});
+					})];
 				}
 
 				case 'link': {
-					return createElement('a', {
+					return [createElement('a', {
 						attrs: {
 							class: 'link',
 							href: token.url,
 							target: '_blank',
 							title: token.url
 						}
-					}, token.title);
+					}, token.title)];
 				}
 
 				case 'mention': {
@@ -129,16 +126,16 @@ export default Vue.component('misskey-flavored-markdown', {
 				}
 
 				case 'hashtag': {
-					return createElement('a', {
+					return [createElement('a', {
 						attrs: {
 							href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
 							target: '_blank'
 						}
-					}, token.content);
+					}, token.content)];
 				}
 
 				case 'code': {
-					return createElement('pre', {
+					return [createElement('pre', {
 						class: 'code'
 					}, [
 						createElement('code', {
@@ -146,15 +143,15 @@ export default Vue.component('misskey-flavored-markdown', {
 								innerHTML: token.html
 							}
 						})
-					]);
+					])];
 				}
 
 				case 'inline-code': {
-					return createElement('code', {
+					return [createElement('code', {
 						domProps: {
 							innerHTML: token.html
 						}
-					});
+					})];
 				}
 
 				case 'quote': {
@@ -164,43 +161,45 @@ export default Vue.component('misskey-flavored-markdown', {
 						const x = text2.split('\n')
 							.map(t => [createElement('span', t), createElement('br')]);
 						x[x.length - 1].pop();
-						return createElement('div', {
+						return [createElement('div', {
 							attrs: {
 								class: 'quote'
 							}
-						}, x);
+						}, x)];
 					} else {
-						return createElement('span', {
+						return [createElement('span', {
 							attrs: {
 								class: 'quote'
 							}
-						}, text2.replace(/\n/g, ' '));
+						}, text2.replace(/\n/g, ' '))];
 					}
 				}
 
 				case 'title': {
-					return createElement('div', {
+					return [createElement('div', {
 						attrs: {
 							class: 'title'
 						}
-					}, token.title);
+					}, token.title)];
 				}
 
 				case 'emoji': {
 					const emoji = emojilib.lib[token.emoji];
-					return createElement('span', emoji ? emoji.char : token.content);
+					return [createElement('span', emoji ? emoji.char : token.content)];
 				}
 
 				case 'search': {
-					return createElement(MkGoogle, {
+					return [createElement(MkGoogle, {
 						props: {
 							q: token.query
 						}
-					});
+					})];
 				}
 
 				default: {
 					console.log('unknown ast type:', token.type);
+
+					return [];
 				}
 			}
 		}));

From 2118fadc48bd4e0756349bffff452426ee2d09c5 Mon Sep 17 00:00:00 2001
From: Aya Morisawa <AyaMorisawa4869@gmail.com>
Date: Wed, 12 Sep 2018 03:51:33 +0900
Subject: [PATCH 218/539] Add toUpperCase function (#2697)

---
 src/mfm/parse/core/syntax-highlighter.ts | 4 ++--
 src/prelude/string.ts                    | 6 +++++-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/mfm/parse/core/syntax-highlighter.ts b/src/mfm/parse/core/syntax-highlighter.ts
index c5157ca1d3..83aac89f1b 100644
--- a/src/mfm/parse/core/syntax-highlighter.ts
+++ b/src/mfm/parse/core/syntax-highlighter.ts
@@ -1,4 +1,4 @@
-import { capitalize } from "../../../prelude/string";
+import { capitalize, toUpperCase } from "../../../prelude/string";
 
 function escape(text: string) {
 	return text
@@ -92,7 +92,7 @@ const _keywords = [
 
 const keywords = _keywords
 	.concat(_keywords.map(capitalize))
-	.concat(_keywords.map(k => k.toUpperCase()))
+	.concat(_keywords.map(toUpperCase))
 	.sort((a, b) => b.length - a.length);
 
 const symbols = [
diff --git a/src/prelude/string.ts b/src/prelude/string.ts
index 2b89304f16..8855adb905 100644
--- a/src/prelude/string.ts
+++ b/src/prelude/string.ts
@@ -1,3 +1,7 @@
 export function capitalize(s: string): string {
-	return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
+	return toUpperCase(s.charAt(0)) + s.slice(1).toLowerCase();
+}
+
+export function toUpperCase(s: string): string {
+	return s.toUpperCase();
 }

From 25ec5a24ab025e3ccc0082ce37946e9b67458bf0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 12 Sep 2018 06:33:02 +0900
Subject: [PATCH 219/539] Add toLowerCase

---
 src/prelude/string.ts | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/prelude/string.ts b/src/prelude/string.ts
index 8855adb905..cae776bc3d 100644
--- a/src/prelude/string.ts
+++ b/src/prelude/string.ts
@@ -1,7 +1,11 @@
 export function capitalize(s: string): string {
-	return toUpperCase(s.charAt(0)) + s.slice(1).toLowerCase();
+	return toUpperCase(s.charAt(0)) + toLowerCase(s.slice(1));
 }
 
 export function toUpperCase(s: string): string {
 	return s.toUpperCase();
 }
+
+export function toLowerCase(s: string): string {
+	return s.toLowerCase();
+}

From aa1817737eab9289d8b3fb098dde2f3b62f182dd Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 01:06:18 +0900
Subject: [PATCH 220/539] Fix glitch

---
 .../app/common/views/components/avatar.vue    | 21 ++++++++++++-------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue
index c5ac74e537..a2b0fc6bd3 100644
--- a/src/client/app/common/views/components/avatar.vue
+++ b/src/client/app/common/views/components/avatar.vue
@@ -1,15 +1,15 @@
 <template>
-	<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
-		<span class="inner" :style="style"></span>
+	<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
+		<span class="inner" :style="icon"></span>
 	</span>
-	<span class="mk-avatar" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
-		<span class="inner" :style="style"></span>
+	<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
+		<span class="inner" :style="icon"></span>
 	</span>
-	<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
-		<span class="inner" :style="style"></span>
+	<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
+		<span class="inner" :style="icon"></span>
 	</router-link>
-	<router-link class="mk-avatar" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
-		<span class="inner" :style="style"></span>
+	<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
+		<span class="inner" :style="icon"></span>
 	</router-link>
 </template>
 
@@ -42,6 +42,11 @@ export default Vue.extend({
 			return this.user.isCat && this.$store.state.settings.circleIcons;
 		},
 		style(): any {
+			return {
+				borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
+			};
+		},
+		icon(): any {
 			return {
 				backgroundColor: this.lightmode
 					? `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`

From e1a946ab4562e343b9f770788d9d3380dbaf6aa0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 01:50:21 +0900
Subject: [PATCH 221/539] Fix bug

---
 src/server/api/endpoints/following/create.ts | 2 +-
 src/server/api/endpoints/following/delete.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts
index c9bea0e3d2..00aa904f08 100644
--- a/src/server/api/endpoints/following/create.ts
+++ b/src/server/api/endpoints/following/create.ts
@@ -57,7 +57,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	}
 
 	// Create following
-	create(follower, followee);
+	await create(follower, followee);
 
 	// Send response
 	res(await pack(followee._id, user));
diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts
index f3b4a73ae8..cdfbf43cd1 100644
--- a/src/server/api/endpoints/following/delete.ts
+++ b/src/server/api/endpoints/following/delete.ts
@@ -57,7 +57,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	}
 
 	// Delete following
-	deleteFollowing(follower, followee);
+	await deleteFollowing(follower, followee);
 
 	// Send response
 	res(await pack(followee._id, user));

From f19f92c53886735b5efe166a912209c42a80bfbf Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 01:50:36 +0900
Subject: [PATCH 222/539] Clean up: Remove unused import

---
 src/client/app/common/views/pages/follow.vue | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 05c1329f6d..80a870a257 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -32,7 +32,6 @@
 <script lang="ts">
 import Vue from 'vue';
 import parseAcct from '../../../../../misc/acct/parse';
-import getUserName from '../../../../../misc/get-user-name';
 import Progress from '../../../common/scripts/loading';
 
 export default Vue.extend({

From b4a30e2a2596be3ebe24235cde1763458c1cac92 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 02:07:03 +0900
Subject: [PATCH 223/539] Refactor: remove needless await

---
 src/server/api/endpoints/users/followers.ts | 3 +--
 src/server/api/endpoints/users/following.ts | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/server/api/endpoints/users/followers.ts b/src/server/api/endpoints/users/followers.ts
index 9411873573..7fe3ca9943 100644
--- a/src/server/api/endpoints/users/followers.ts
+++ b/src/server/api/endpoints/users/followers.ts
@@ -73,8 +73,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	}
 
 	// Serialize
-	const users = await Promise.all(following.map(async f =>
-		await pack(f.followerId, me, { detail: true })));
+	const users = await Promise.all(following.map(f => pack(f.followerId, me, { detail: true })));
 
 	// Response
 	res({
diff --git a/src/server/api/endpoints/users/following.ts b/src/server/api/endpoints/users/following.ts
index 7a64d15d7b..0e564fd1b6 100644
--- a/src/server/api/endpoints/users/following.ts
+++ b/src/server/api/endpoints/users/following.ts
@@ -73,8 +73,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	}
 
 	// Serialize
-	const users = await Promise.all(following.map(async f =>
-		await pack(f.followeeId, me, { detail: true })));
+	const users = await Promise.all(following.map(f => pack(f.followeeId, me, { detail: true })));
 
 	// Response
 	res({

From 8a8c079b2fd974716f85f859c5aa5b64d4361133 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 02:08:17 +0900
Subject: [PATCH 224/539] Improve following/followers view

Closes #2235
---
 .../views/components/users-list.item.vue      | 128 ++++++++----------
 .../desktop/views/components/users-list.vue   |  26 ++--
 2 files changed, 74 insertions(+), 80 deletions(-)

diff --git a/src/client/app/desktop/views/components/users-list.item.vue b/src/client/app/desktop/views/components/users-list.item.vue
index 262fd38cd1..f42d577fce 100644
--- a/src/client/app/desktop/views/components/users-list.item.vue
+++ b/src/client/app/desktop/views/components/users-list.item.vue
@@ -1,17 +1,16 @@
 <template>
-<div class="root item">
-	<mk-avatar class="avatar" :user="user"/>
-	<div class="main">
-		<header>
-			<router-link class="name" :to="user | userPage" v-user-preview="user.id">{{ user | userName }}</router-link>
-			<span class="username">@{{ user | acct }}</span>
-		</header>
-		<div class="body">
-			<p class="followed" v-if="user.isFollowed">%i18n:@followed%</p>
-			<div class="description">{{ user.description }}</div>
+<div class="zvdbznxvfixtmujpsigoccczftvpiwqh">
+	<div class="banner" :style="bannerStyle"></div>
+	<mk-avatar class="avatar" :user="user" :disable-preview="true"/>
+	<div class="body">
+		<router-link :to="user | userPage" class="name">{{ user | userName }}</router-link>
+		<span class="username">@{{ user | acct }}</span>
+		<div class="description">
+			<misskey-flavored-markdown v-if="user.description" :text="user.description" :i="$store.state.i"/>
 		</div>
+		<p class="followed" v-if="user.isFollowed">%i18n:@followed%</p>
+		<mk-follow-button :user="user" :size="'big'"/>
 	</div>
-	<mk-follow-button :user="user"/>
 </div>
 </template>
 
@@ -19,76 +18,69 @@
 import Vue from 'vue';
 
 export default Vue.extend({
-	props: ['user']
+	props: ['user'],
+
+	computed: {
+		bannerStyle(): any {
+			if (this.user.bannerUrl == null) return {};
+			return {
+				backgroundColor: this.user.bannerColor && this.user.bannerColor.length == 3 ? `rgb(${ this.user.bannerColor.join(',') })` : null,
+				backgroundImage: `url(${ this.user.bannerUrl })`
+			};
+		}
+	},
 });
 </script>
 
 <style lang="stylus" scoped>
-.root.item
-	padding 16px
-	font-size 16px
+.zvdbznxvfixtmujpsigoccczftvpiwqh
+	$bg = #fff
 
-	&:after
-		content ""
-		display block
-		clear both
+	margin 16px auto
+	max-width calc(100% - 32px)
+	font-size 16px
+	text-align center
+	background $bg
+	box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
+
+	> .banner
+		height 100px
+		background-color #f9f4f4
+		background-position center
+		background-size cover
 
 	> .avatar
 		display block
-		float left
-		margin 0 16px 0 0
-		width 58px
-		height 58px
-		border-radius 8px
+		margin -40px auto 0 auto
+		width 80px
+		height 80px
+		border-radius 100%
+		border solid 4px $bg
 
-	> .main
-		float left
-		width calc(100% - 74px)
+	> .body
+		padding 4px 32px 32px 32px
 
-		> header
-			margin-bottom 2px
+		@media (max-width 400px)
+			padding 4px 16px 16px 16px
 
-			> .name
-				display inline
-				margin 0
-				padding 0
-				color #777
-				font-size 1em
-				font-weight 700
-				text-align left
-				text-decoration none
+		> .name
+			font-size 20px
+			font-weight bold
 
-				&:hover
-					text-decoration underline
+		> .username
+			display block
+			opacity 0.7
 
-			> .username
-				text-align left
-				margin 0 0 0 8px
-				color #ccc
+		> .description
+			margin 16px 0
 
-		> .body
-			> .followed
-				display inline-block
-				margin 0 0 4px 0
-				padding 2px 8px
-				vertical-align top
-				font-size 10px
-				color #71afc7
-				background #eefaff
-				border-radius 4px
-
-			> .description
-				cursor default
-				display block
-				margin 0
-				padding 0
-				overflow-wrap break-word
-				font-size 1.1em
-				color #717171
-
-	> .mk-follow-button
-		position absolute
-		top 16px
-		right 16px
+		> .followed
+			margin 0 0 16px 0
+			padding 0
+			line-height 24px
+			font-size 0.8em
+			color #71afc7
+			background #eefaff
+			border-radius 4px
 
 </style>
diff --git a/src/client/app/desktop/views/components/users-list.vue b/src/client/app/desktop/views/components/users-list.vue
index 0423db8ed7..05e2f4e5b3 100644
--- a/src/client/app/desktop/views/components/users-list.vue
+++ b/src/client/app/desktop/views/components/users-list.vue
@@ -33,7 +33,7 @@ export default Vue.extend({
 	props: ['fetch', 'count', 'youKnowCount'],
 	data() {
 		return {
-			limit: 30,
+			limit: 20,
 			mode: 'all',
 			fetching: true,
 			moreFetching: false,
@@ -73,10 +73,14 @@ export default Vue.extend({
 
 .mk-users-list
 	height 100%
-	background #fff
+	overflow auto
+	background #eee
 
 	> nav
-		z-index 1
+		z-index 10
+		position sticky
+		top 0
+		background #fff
 		box-shadow 0 1px 0 rgba(#000, 0.1)
 
 		> div
@@ -114,16 +118,14 @@ export default Vue.extend({
 					background #eee
 					border-radius 20px
 
-	> .users
-		height calc(100% - 54px)
-		overflow auto
+	> button
+		display block
+		width calc(100% - 32px)
+		margin 16px
+		padding 16px
 
-		> *
-			border-bottom solid 1px rgba(#000, 0.05)
-
-			> *
-				max-width 600px
-				margin 0 auto
+		&:hover
+			background rgba(#000, 0.1)
 
 	> .no
 		margin 0

From 6d536c61e84c007f92ec8f24682b5a5b8885e1f9 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 12 Sep 2018 17:48:43 +0000
Subject: [PATCH 225/539] fix(package): update systeminformation to version
 3.45.6

Closes #2617
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 304c309a52..88fac6d521 100644
--- a/package.json
+++ b/package.json
@@ -194,7 +194,7 @@
 		"stylus": "0.54.5",
 		"stylus-loader": "3.0.2",
 		"summaly": "2.2.0",
-		"systeminformation": "3.45.1",
+		"systeminformation": "3.45.6",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",
 		"tmp": "0.0.33",

From c3c885de479cd091f742826f9a3ccfe373880ef5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 02:52:29 +0900
Subject: [PATCH 226/539] 8.35.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 304c309a52..17be739743 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.34.4",
-	"clientVersion": "1.0.9572",
+	"version": "8.35.0",
+	"clientVersion": "1.0.9589",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 111f44ce09b6886daab193da1f946cc5d056bef3 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 05:35:11 +0900
Subject: [PATCH 227/539] Update README.md

---
 README.md | 43 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 863731b14e..3eff702a5a 100644
--- a/README.md
+++ b/README.md
@@ -20,13 +20,42 @@ Why don't you take a short break from the hustle and bustle of the city, and div
 
 :sparkles: Features
 ----------------------------------------------------------------
-* Rich text contents
-* Reactions
-* User lists
-* Customizable column view (called MisskeyDeck)
-* Customizable widgets
-* Private messages
-* ActivityPub support
+
+<img src="/assets/about/post.png" align="left" height="200px"/>
+
+<h3 align="left">Posting</h3>
+<p align="left">
+Just post your idea, hot topics and anything you want to share. You may want to decorate your words, attach your favorite pictures, send files including movies and create a poll - those are the things you can do on Misskey!
+</p>
+
+---
+
+<img src="/assets/about/reaction.png" align="right" height="200px"/>
+
+<h3 align="right">Reactions</h3>
+<p align="right">
+Easiest way to tell your emotions. Misskey allows you to add various type of reactions to other’s post. The emotional experience on Misskey will never be on other SNSs which only able to push “likes”.
+</p>
+
+---
+
+<img src="/assets/about/ui.png" align="left" height="200px"/>
+
+<h3 align="left">Interface</h3>
+<p align="left">
+No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. You can edit layouts of your timeline, place selectable widgets you can easily move and create your unique home as this place will be your home.
+</p>
+
+---
+
+<img src="/assets/about/drive.png" align="right" width="300px"/>
+
+<h3 align="right">Misskey Drive</h3>
+<p align="right">
+Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online.
+</p>
+
+---
 
 and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
 

From 44099c551c354b7c029b9a05e81a15e8729e954f Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 05:39:12 +0900
Subject: [PATCH 228/539] Update README.md

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 3eff702a5a..4de6151080 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
 [Misskey](https://misskey.xyz) is a decentralized microblogging platform born on Earth.
 Since it exists within the Fediverse (a universe where various social media platforms are organized),
 it is mutually linked with other social media platforms.
-Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet?
+Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? [Find instance!](https://joinmisskey.github.io/)
 
 <a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
 
@@ -57,7 +57,7 @@ Wanna post a picture you have already uploaded? Wish to organize, name and creat
 
 ---
 
-and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
+and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz) or [other instances](https://joinmisskey.github.io/).
 
 :package: Create your own instance
 ----------------------------------------------------------------

From 700f8c9bb4899e684da0cb218f848a60ac4260ab Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 17:44:36 +0900
Subject: [PATCH 229/539] =?UTF-8?q?CW=E3=81=8C=E9=81=A9=E7=94=A8=E3=81=95?=
 =?UTF-8?q?=E3=82=8C=E3=81=AA=E3=81=84=E7=AE=87=E6=89=80=E3=82=92=E4=BF=AE?=
 =?UTF-8?q?=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../desktop/views/components/note-detail.vue  | 106 +++++++++++-----
 .../desktop/views/components/note-preview.vue |  50 +++++++-
 .../views/components/notes.note.sub.vue       |  63 ++++++++--
 .../desktop/views/components/notes.note.vue   |  13 +-
 .../desktop/views/components/renote-form.vue  |   4 +-
 .../desktop/views/pages/deck/deck.note.vue    |   2 +-
 .../mobile/views/components/note-detail.vue   | 115 +++++++++++-------
 .../mobile/views/components/note-preview.vue  |  56 +++++++--
 .../app/mobile/views/components/note.sub.vue  |  56 +++++++--
 .../app/mobile/views/components/note.vue      |   6 +-
 .../app/mobile/views/components/post-form.vue |   6 +-
 11 files changed, 355 insertions(+), 122 deletions(-)

diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 1e068bd1cd..a0ad089f92 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -37,20 +37,26 @@
 			</router-link>
 		</header>
 		<div class="body">
-			<div class="text">
-				<span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span>
-				<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
-				<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
-			</div>
-			<div class="files" v-if="p.files.length > 0">
-				<mk-media-list :media-list="p.files" :raw="true"/>
-			</div>
-			<mk-poll v-if="p.poll" :note="p"/>
-			<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
-			<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
-			<div class="map" v-if="p.geo" ref="map"></div>
-			<div class="renote" v-if="p.renote">
-				<mk-note-preview :note="p.renote"/>
+			<p v-if="p.cw != null" class="cw">
+				<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="p.cw == null || showContent">
+				<div class="text">
+					<span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span>
+					<span v-if="p.deletedAt" style="opacity: 0.5">%i18n:@deleted%</span>
+					<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
+				</div>
+				<div class="files" v-if="p.files.length > 0">
+					<mk-media-list :media-list="p.files" :raw="true"/>
+				</div>
+				<mk-poll v-if="p.poll" :note="p"/>
+				<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
+				<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
+				<div class="map" v-if="p.geo" ref="map"></div>
+				<div class="renote" v-if="p.renote">
+					<mk-note-preview :note="p.renote"/>
+				</div>
 			</div>
 		</div>
 		<footer>
@@ -105,6 +111,7 @@ export default Vue.extend({
 
 	data() {
 		return {
+			showContent: false,
 			conversation: [],
 			conversationFetching: false,
 			replies: []
@@ -118,17 +125,21 @@ export default Vue.extend({
 				this.note.fileIds.length == 0 &&
 				this.note.poll == null);
 		},
+
 		p(): any {
 			return this.isRenote ? this.note.renote : this.note;
 		},
+
 		reactionsCount(): number {
 			return this.p.reactionCounts
 				? sum(Object.values(this.p.reactionCounts))
 				: 0;
 		},
+
 		title(): string {
 			return new Date(this.p.createdAt).toLocaleString();
 		},
+
 		urls(): string[] {
 			if (this.p.text) {
 				const ast = parse(this.p.text);
@@ -183,22 +194,26 @@ export default Vue.extend({
 				this.conversation = conversation.reverse();
 			});
 		},
+
 		reply() {
 			(this as any).os.new(MkPostFormWindow, {
 				reply: this.p
 			});
 		},
+
 		renote() {
 			(this as any).os.new(MkRenoteFormWindow, {
 				note: this.p
 			});
 		},
+
 		react() {
 			(this as any).os.new(MkReactionPicker, {
 				source: this.$refs.reactButton,
 				note: this.p
 			});
 		},
+
 		menu() {
 			(this as any).os.new(MkNoteMenu, {
 				source: this.$refs.menuButton,
@@ -326,37 +341,62 @@ root(isDark)
 		> .body
 			padding 8px 0
 
-			> .text
+			> .cw
 				cursor default
 				display block
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				font-size 1.5em
 				color isDark ? #fff : #717171
 
-			> .renote
-				margin 8px 0
+				> .text
+					margin-right 8px
 
-				> .mk-note-preview
-					padding 16px
-					border dashed 1px #c0dac6
-					border-radius 8px
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
 
-			> .location
-				margin 4px 0
-				font-size 12px
-				color #ccc
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
 
-			> .map
-				width 100%
-				height 300px
+			> .content
+				> .text
+					cursor default
+					display block
+					margin 0
+					padding 0
+					overflow-wrap break-word
+					font-size 1.5em
+					color isDark ? #fff : #717171
 
-				&:empty
-					display none
+				> .renote
+					margin 8px 0
 
-			> .mk-url-preview
-				margin-top 8px
+					> *
+						padding 16px
+						border dashed 1px #c0dac6
+						border-radius 8px
+
+				> .location
+					margin 4px 0
+					font-size 12px
+					color #ccc
+
+				> .map
+					width 100%
+					height 300px
+
+					&:empty
+						display none
+
+				> .mk-url-preview
+					margin-top 8px
 
 		> footer
 			font-size 1.2em
diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue
index c723db98c0..e7e878849b 100644
--- a/src/client/app/desktop/views/components/note-preview.vue
+++ b/src/client/app/desktop/views/components/note-preview.vue
@@ -1,10 +1,16 @@
 <template>
-<div class="mk-note-preview" :title="title">
+<div class="qiziqtywpuaucsgarwajitwaakggnisj" :title="title">
 	<mk-avatar class="avatar" :user="note.user" v-if="!mini"/>
 	<div class="main">
 		<mk-note-header class="header" :note="note" :mini="true"/>
 		<div class="body">
-			<mk-sub-note-content class="text" :note="note"/>
+			<p v-if="note.cw != null" class="cw">
+				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="note.cw == null || showContent">
+				<mk-sub-note-content class="text" :note="note"/>
+			</div>
 		</div>
 	</div>
 </div>
@@ -25,6 +31,13 @@ export default Vue.extend({
 			default: false
 		}
 	},
+
+	data() {
+		return {
+			showContent: false
+		};
+	},
+
 	computed: {
 		title(): string {
 			return new Date(this.note.createdAt).toLocaleString();
@@ -52,16 +65,41 @@ root(isDark)
 
 		> .body
 
-			> .text
+			> .cw
 				cursor default
+				display block
 				margin 0
 				padding 0
-				color isDark ? #959ba7 : #717171
+				overflow-wrap break-word
+				color isDark ? #fff : #717171
 
-.mk-note-preview[data-darkmode]
+				> .text
+					margin-right 8px
+
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
+
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
+
+			> .content
+				> .text
+					cursor default
+					margin 0
+					padding 0
+					color isDark ? #959ba7 : #717171
+
+.qiziqtywpuaucsgarwajitwaakggnisj[data-darkmode]
 	root(true)
 
-.mk-note-preview:not([data-darkmode])
+.qiziqtywpuaucsgarwajitwaakggnisj:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index fc851e83e9..15944bebd1 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -1,10 +1,16 @@
 <template>
-<div class="sub" :title="title">
+<div class="tkfdzaxtkdeianobciwadajxzbddorql" :title="title">
 	<mk-avatar class="avatar" :user="note.user"/>
 	<div class="main">
 		<mk-note-header class="header" :note="note"/>
 		<div class="body">
-			<mk-sub-note-content class="text" :note="note"/>
+			<p v-if="note.cw != null" class="cw">
+				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="note.cw == null || showContent">
+				<mk-sub-note-content class="text" :note="note"/>
+			</div>
 		</div>
 	</div>
 </div>
@@ -14,7 +20,19 @@
 import Vue from 'vue';
 
 export default Vue.extend({
-	props: ['note'],
+	props: {
+		note: {
+			type: Object,
+			required: true
+		}
+	},
+
+	data() {
+		return {
+			showContent: false
+		};
+	},
+
 	computed: {
 		title(): string {
 			return new Date(this.note.createdAt).toLocaleString();
@@ -48,20 +66,45 @@ root(isDark)
 
 		> .body
 
-			> .text
+			> .cw
 				cursor default
+				display block
 				margin 0
 				padding 0
-				color isDark ? #959ba7 : #717171
+				overflow-wrap break-word
+				color isDark ? #fff : #717171
 
-				pre
-					max-height 120px
-					font-size 80%
+				> .text
+					margin-right 8px
 
-.sub[data-darkmode]
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
+
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
+
+			> .content
+				> .text
+					cursor default
+					margin 0
+					padding 0
+					color isDark ? #959ba7 : #717171
+
+					pre
+						max-height 120px
+						font-size 80%
+
+.tkfdzaxtkdeianobciwadajxzbddorql[data-darkmode]
 	root(true)
 
-.sub:not([data-darkmode])
+.tkfdzaxtkdeianobciwadajxzbddorql:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 75d6ebd628..e1bc8be5a5 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -34,9 +34,7 @@
 					<mk-poll v-if="p.poll" :note="p" ref="pollViewer"/>
 					<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% 位置情報</a>
 					<div class="map" v-if="p.geo" ref="map"></div>
-					<div class="renote" v-if="p.renote">
-						<mk-note-preview :note="p.renote"/>
-					</div>
+					<div class="renote" v-if="p.renote"><mk-note-preview :note="p.renote"/></div>
 					<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
 				</div>
 			</div>
@@ -96,7 +94,12 @@ export default Vue.extend({
 		XSub
 	},
 
-	props: ['note'],
+	props: {
+		note: {
+			type: Object,
+			required: true
+		}
+	},
 
 	data() {
 		return {
@@ -469,7 +472,7 @@ root(isDark)
 					> .renote
 						margin 8px 0
 
-						> .mk-note-preview
+						> *
 							padding 16px
 							border dashed 1px isDark ? #4e945e : #c0dac6
 							border-radius 8px
diff --git a/src/client/app/desktop/views/components/renote-form.vue b/src/client/app/desktop/views/components/renote-form.vue
index 38eab3362f..c5192ecaac 100644
--- a/src/client/app/desktop/views/components/renote-form.vue
+++ b/src/client/app/desktop/views/components/renote-form.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="mk-renote-form">
-	<mk-note-preview :note="note"/>
+	<mk-note-preview class="preview" :note="note"/>
 	<template v-if="!quote">
 		<footer>
 			<a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a>
@@ -61,7 +61,7 @@ export default Vue.extend({
 
 root(isDark)
 
-	> .mk-note-preview
+	> .preview
 		margin 16px 22px
 
 	> footer
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index b42df1f347..ec4b9182b7 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -394,7 +394,7 @@ root(isDark)
 					> .renote
 						margin 8px 0
 
-						> .mk-note-preview
+						> *
 							padding 16px
 							border dashed 1px isDark ? #4e945e : #c0dac6
 							border-radius 8px
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index d48d9a7790..752e44fd60 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -35,20 +35,26 @@
 			</div>
 		</header>
 		<div class="body">
-			<div class="text">
-				<span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@private%)</span>
-				<span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span>
-				<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
-			</div>
-			<div class="files" v-if="p.files.length > 0">
-				<mk-media-list :media-list="p.files" :raw="true"/>
-			</div>
-			<mk-poll v-if="p.poll" :note="p"/>
-			<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
-			<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
-			<div class="map" v-if="p.geo" ref="map"></div>
-			<div class="renote" v-if="p.renote">
-				<mk-note-preview :note="p.renote"/>
+			<p v-if="p.cw != null" class="cw">
+				<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="p.cw == null || showContent">
+				<div class="text">
+					<span v-if="p.isHidden" style="opacity: 0.5">(%i18n:@private%)</span>
+					<span v-if="p.deletedAt" style="opacity: 0.5">(%i18n:@deleted%)</span>
+					<misskey-flavored-markdown v-if="p.text" :text="p.text" :i="$store.state.i"/>
+				</div>
+				<div class="files" v-if="p.files.length > 0">
+					<mk-media-list :media-list="p.files" :raw="true"/>
+				</div>
+				<mk-poll v-if="p.poll" :note="p"/>
+				<mk-url-preview v-for="url in urls" :url="url" :key="url" :detail="true"/>
+				<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
+				<div class="map" v-if="p.geo" ref="map"></div>
+				<div class="renote" v-if="p.renote">
+					<mk-note-preview :note="p.renote"/>
+				</div>
 			</div>
 		</div>
 		<router-link class="time" :to="p | notePage">
@@ -104,6 +110,7 @@ export default Vue.extend({
 
 	data() {
 		return {
+			showContent: false,
 			conversation: [],
 			conversationFetching: false,
 			replies: []
@@ -334,44 +341,70 @@ root(isDark)
 		> .body
 			padding 8px 0
 
-			> .text
+			> .cw
+				cursor default
 				display block
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				font-size 16px
 				color isDark ? #fff : #717171
 
-				@media (min-width 500px)
-					font-size 24px
+				> .text
+					margin-right 8px
 
-			> .renote
-				margin 8px 0
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
 
-				> .mk-note-preview
-					padding 16px
-					border dashed 1px #c0dac6
-					border-radius 8px
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
 
-			> .location
-				margin 4px 0
-				font-size 12px
-				color #ccc
+			> .content
 
-			> .map
-				width 100%
-				height 200px
-
-				&:empty
-					display none
-
-			> .mk-url-preview
-				margin-top 8px
-
-			> .files
-				> img
+				> .text
 					display block
-					max-width 100%
+					margin 0
+					padding 0
+					overflow-wrap break-word
+					font-size 16px
+					color isDark ? #fff : #717171
+
+					@media (min-width 500px)
+						font-size 24px
+
+				> .renote
+					margin 8px 0
+
+					> *
+						padding 16px
+						border dashed 1px #c0dac6
+						border-radius 8px
+
+				> .location
+					margin 4px 0
+					font-size 12px
+					color #ccc
+
+				> .map
+					width 100%
+					height 200px
+
+					&:empty
+						display none
+
+				> .mk-url-preview
+					margin-top 8px
+
+				> .files
+					> img
+						display block
+						max-width 100%
 
 		> .time
 			font-size 16px
diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue
index 5d56d2d326..a85434407f 100644
--- a/src/client/app/mobile/views/components/note-preview.vue
+++ b/src/client/app/mobile/views/components/note-preview.vue
@@ -1,10 +1,16 @@
 <template>
-<div class="mk-note-preview" :class="{ smart: $store.state.device.postStyle == 'smart' }">
+<div class="yohlumlkhizgfkvvscwfcrcggkotpvry" :class="{ smart: $store.state.device.postStyle == 'smart' }">
 	<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle != 'smart'"/>
 	<div class="main">
 		<mk-note-header class="header" :note="note" :mini="true"/>
 		<div class="body">
-			<mk-sub-note-content class="text" :note="note"/>
+			<p v-if="note.cw != null" class="cw">
+				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="note.cw == null || showContent">
+				<mk-sub-note-content class="text" :note="note"/>
+			</div>
 		</div>
 	</div>
 </div>
@@ -14,7 +20,18 @@
 import Vue from 'vue';
 
 export default Vue.extend({
-	props: ['note']
+	props: {
+		note: {
+			type: Object,
+			required: true
+		}
+	},
+
+	data() {
+		return {
+			showContent: false
+		};
+	}
 });
 </script>
 
@@ -65,16 +82,41 @@ root(isDark)
 
 		> .body
 
-			> .text
+			> .cw
 				cursor default
+				display block
 				margin 0
 				padding 0
-				color isDark ? #959ba7 : #717171
+				overflow-wrap break-word
+				color isDark ? #fff : #717171
 
-.mk-note-preview[data-darkmode]
+				> .text
+					margin-right 8px
+
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
+
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
+
+			> .content
+				> .text
+					cursor default
+					margin 0
+					padding 0
+					color isDark ? #959ba7 : #717171
+
+.yohlumlkhizgfkvvscwfcrcggkotpvry[data-darkmode]
 	root(true)
 
-.mk-note-preview:not([data-darkmode])
+.yohlumlkhizgfkvvscwfcrcggkotpvry:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue
index a68aec40a1..77527a1498 100644
--- a/src/client/app/mobile/views/components/note.sub.vue
+++ b/src/client/app/mobile/views/components/note.sub.vue
@@ -1,10 +1,16 @@
 <template>
-<div class="sub" :class="{ smart: $store.state.device.postStyle == 'smart' }">
+<div class="zlrxdaqttccpwhpaagdmkawtzklsccam" :class="{ smart: $store.state.device.postStyle == 'smart' }">
 	<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle != 'smart'"/>
 	<div class="main">
 		<mk-note-header class="header" :note="note" :mini="true"/>
 		<div class="body">
-			<mk-sub-note-content class="text" :note="note"/>
+			<p v-if="note.cw != null" class="cw">
+				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
+				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+			</p>
+			<div class="content" v-show="note.cw == null || showContent">
+				<mk-sub-note-content class="text" :note="note"/>
+			</div>
 		</div>
 	</div>
 </div>
@@ -24,6 +30,12 @@ export default Vue.extend({
 			type: Boolean,
 			default: true
 		}
+	},
+
+	data() {
+		return {
+			showContent: false
+		};
 	}
 });
 </script>
@@ -77,20 +89,44 @@ root(isDark)
 			margin-bottom 2px
 
 		> .body
-
-			> .text
+			> .cw
+				cursor default
+				display block
 				margin 0
 				padding 0
-				color isDark ? #959ba7 : #717171
+				overflow-wrap break-word
+				color isDark ? #fff : #717171
 
-				pre
-					max-height 120px
-					font-size 80%
+				> .text
+					margin-right 8px
 
-.sub[data-darkmode]
+				> .toggle
+					display inline-block
+					padding 4px 8px
+					font-size 0.7em
+					color isDark ? #393f4f : #fff
+					background isDark ? #687390 : #b1b9c1
+					border-radius 2px
+					cursor pointer
+					user-select none
+
+					&:hover
+						background isDark ? #707b97 : #bbc4ce
+
+			> .content
+				> .text
+					margin 0
+					padding 0
+					color isDark ? #959ba7 : #717171
+
+					pre
+						max-height 120px
+						font-size 80%
+
+.zlrxdaqttccpwhpaagdmkawtzklsccam[data-darkmode]
 	root(true)
 
-.sub:not([data-darkmode])
+.zlrxdaqttccpwhpaagdmkawtzklsccam:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 907e728984..c608451e51 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -35,9 +35,7 @@
 					<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
 					<a class="location" v-if="p.geo" :href="`https://maps.google.com/maps?q=${p.geo.coordinates[1]},${p.geo.coordinates[0]}`" target="_blank">%fa:map-marker-alt% %i18n:@location%</a>
 					<div class="map" v-if="p.geo" ref="map"></div>
-					<div class="renote" v-if="p.renote">
-						<mk-note-preview :note="p.renote"/>
-					</div>
+					<div class="renote" v-if="p.renote"><mk-note-preview :note="p.renote"/></div>
 				</div>
 				<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
 			</div>
@@ -436,7 +434,7 @@ root(isDark)
 					> .renote
 						margin 8px 0
 
-						> .mk-note-preview
+						> *
 							padding 16px
 							border dashed 1px isDark ? #4e945e : #c0dac6
 							border-radius 8px
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 212451a5bc..e53ba48ffb 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -10,8 +10,8 @@
 			</div>
 		</header>
 		<div class="form">
-			<mk-note-preview v-if="reply" :note="reply"/>
-			<mk-note-preview v-if="renote" :note="renote"/>
+			<mk-note-preview class="preview" v-if="reply" :note="reply"/>
+			<mk-note-preview class="preview" v-if="renote" :note="renote"/>
 			<div v-if="visibility == 'specified'" class="visibleUsers">
 				<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
 				<a @click="addVisibleUser">+%i18n:@add-visible-user%</a>
@@ -387,7 +387,7 @@ root(isDark)
 			max-width 500px
 			margin 0 auto
 
-			> .mk-note-preview
+			> .preview
 				padding 16px
 
 			> .visibleUsers

From 03e1d3fbc45252b05bf5abdb8ffee28297400acc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 18:01:50 +0900
Subject: [PATCH 230/539] Refactor

---
 locales/ja-JP.yml                             |  8 ++--
 .../app/common/views/components/cw-button.vue | 44 +++++++++++++++++++
 .../app/common/views/components/index.ts      |  2 +
 .../desktop/views/components/note-detail.vue  | 15 +------
 .../desktop/views/components/note-preview.vue | 15 +------
 .../views/components/notes.note.sub.vue       | 15 +------
 .../desktop/views/components/notes.note.vue   | 15 +------
 .../desktop/views/pages/deck/deck.note.vue    |  2 +-
 .../mobile/views/components/note-detail.vue   | 15 +------
 .../mobile/views/components/note-preview.vue  | 15 +------
 .../app/mobile/views/components/note.sub.vue  | 15 +------
 .../app/mobile/views/components/note.vue      | 15 +------
 12 files changed, 59 insertions(+), 117 deletions(-)
 create mode 100644 src/client/app/common/views/components/cw-button.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 9404cd6ba6..98c2f5fe45 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -273,6 +273,10 @@ common/views/components/connect-failed.troubleshooter.vue:
   flush: "キャッシュの削除"
   set-version: "バージョン指定"
 
+common/views/components/cw-button.vue:
+  hide: "隠す"
+  show: "もっと見る"
+
 common/views/components/messaging.vue:
   search-user: "ユーザーを探す"
   you: "あなた"
@@ -666,8 +670,6 @@ desktop/views/components/notes.note.vue:
   detail: "詳細"
   private: "この投稿は非公開です"
   deleted: "この投稿は削除されました"
-  hide: "隠す"
-  see-more: "もっと見る"
 
 desktop/views/components/notes.vue:
   error: "読み込みに失敗しました。"
@@ -1192,8 +1194,6 @@ mobile/views/components/friends-maker.vue:
 
 mobile/views/components/note.vue:
   reposted-by: "{}がRenote"
-  more: "もっと見る"
-  less: "隠す"
   private: "この投稿は非公開です"
   deleted: "この投稿は削除されました"
   location: "位置情報"
diff --git a/src/client/app/common/views/components/cw-button.vue b/src/client/app/common/views/components/cw-button.vue
new file mode 100644
index 0000000000..06087edc93
--- /dev/null
+++ b/src/client/app/common/views/components/cw-button.vue
@@ -0,0 +1,44 @@
+<template>
+<button class="nrvgflfuaxwgkxoynpnumyookecqrrvh" @click="toggle">{{ value ? '%i18n:@hide%' : '%i18n:@show%' }}</button>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+	props: {
+		value: {
+			type: Boolean,
+			required: true
+		}
+	},
+
+	methods: {
+		toggle() {
+			this.$emit('input', !this.value);
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+root(isDark)
+	display inline-block
+	padding 4px 8px
+	font-size 0.7em
+	color isDark ? #393f4f : #fff
+	background isDark ? #687390 : #b1b9c1
+	border-radius 2px
+	cursor pointer
+	user-select none
+
+	&:hover
+		background isDark ? #707b97 : #bbc4ce
+
+.nrvgflfuaxwgkxoynpnumyookecqrrvh[data-darkmode]
+	root(true)
+
+.nrvgflfuaxwgkxoynpnumyookecqrrvh:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 75c6086d7c..6f8152cea2 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import cwButton from './cw-button.vue';
 import tagCloud from './tag-cloud.vue';
 import trends from './trends.vue';
 import analogClock from './analog-clock.vue';
@@ -42,6 +43,7 @@ import uiSelect from './ui/select.vue';
 import formButton from './ui/form/button.vue';
 import formRadio from './ui/form/radio.vue';
 
+Vue.component('mk-cw-button', cwButton);
 Vue.component('mk-tag-cloud', tagCloud);
 Vue.component('mk-trends', trends);
 Vue.component('mk-analog-clock', analogClock);
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index a0ad089f92..7307eeb7dc 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -39,7 +39,7 @@
 		<div class="body">
 			<p v-if="p.cw != null" class="cw">
 				<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="p.cw == null || showContent">
 				<div class="text">
@@ -352,19 +352,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 				> .text
 					cursor default
diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue
index e7e878849b..6c84165356 100644
--- a/src/client/app/desktop/views/components/note-preview.vue
+++ b/src/client/app/desktop/views/components/note-preview.vue
@@ -6,7 +6,7 @@
 		<div class="body">
 			<p v-if="note.cw != null" class="cw">
 				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="note.cw == null || showContent">
 				<mk-sub-note-content class="text" :note="note"/>
@@ -76,19 +76,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 				> .text
 					cursor default
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index 15944bebd1..8f01ddd43c 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -6,7 +6,7 @@
 		<div class="body">
 			<p v-if="note.cw != null" class="cw">
 				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="note.cw == null || showContent">
 				<mk-sub-note-content class="text" :note="note"/>
@@ -77,19 +77,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 				> .text
 					cursor default
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index e1bc8be5a5..46a866f9a7 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -18,7 +18,7 @@
 			<div class="body">
 				<p v-if="p.cw != null" class="cw">
 					<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
-					<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+					<mk-cw-button v-model="showContent"/>
 				</p>
 				<div class="content" v-show="p.cw == null || showContent">
 					<div class="text">
@@ -401,19 +401,6 @@ root(isDark)
 					> .text
 						margin-right 8px
 
-					> .toggle
-						display inline-block
-						padding 4px 8px
-						font-size 0.7em
-						color isDark ? #393f4f : #fff
-						background isDark ? #687390 : #b1b9c1
-						border-radius 2px
-						cursor pointer
-						user-select none
-
-						&:hover
-							background isDark ? #707b97 : #bbc4ce
-
 				> .content
 
 					> .text
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index ec4b9182b7..980fb03136 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -18,7 +18,7 @@
 			<div class="body">
 				<p v-if="p.cw != null" class="cw">
 					<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
-					<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@less%' : '%i18n:@more%' }}</span>
+					<mk-cw-button v-model="showContent"/>
 				</p>
 				<div class="content" v-show="p.cw == null || showContent">
 					<div class="text">
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 752e44fd60..68be9f8ac4 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -37,7 +37,7 @@
 		<div class="body">
 			<p v-if="p.cw != null" class="cw">
 				<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="p.cw == null || showContent">
 				<div class="text">
@@ -352,19 +352,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 
 				> .text
diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue
index a85434407f..4c03593a9e 100644
--- a/src/client/app/mobile/views/components/note-preview.vue
+++ b/src/client/app/mobile/views/components/note-preview.vue
@@ -6,7 +6,7 @@
 		<div class="body">
 			<p v-if="note.cw != null" class="cw">
 				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="note.cw == null || showContent">
 				<mk-sub-note-content class="text" :note="note"/>
@@ -93,19 +93,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 				> .text
 					cursor default
diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue
index 77527a1498..c25f827dad 100644
--- a/src/client/app/mobile/views/components/note.sub.vue
+++ b/src/client/app/mobile/views/components/note.sub.vue
@@ -6,7 +6,7 @@
 		<div class="body">
 			<p v-if="note.cw != null" class="cw">
 				<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
-				<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@hide%' : '%i18n:@see-more%' }}</span>
+				<mk-cw-button v-model="showContent"/>
 			</p>
 			<div class="content" v-show="note.cw == null || showContent">
 				<mk-sub-note-content class="text" :note="note"/>
@@ -100,19 +100,6 @@ root(isDark)
 				> .text
 					margin-right 8px
 
-				> .toggle
-					display inline-block
-					padding 4px 8px
-					font-size 0.7em
-					color isDark ? #393f4f : #fff
-					background isDark ? #687390 : #b1b9c1
-					border-radius 2px
-					cursor pointer
-					user-select none
-
-					&:hover
-						background isDark ? #707b97 : #bbc4ce
-
 			> .content
 				> .text
 					margin 0
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index c608451e51..8787b39a93 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -18,7 +18,7 @@
 			<div class="body">
 				<p v-if="p.cw != null" class="cw">
 					<span class="text" v-if="p.cw != ''">{{ p.cw }}</span>
-					<span class="toggle" @click="showContent = !showContent">{{ showContent ? '%i18n:@less%' : '%i18n:@more%' }}</span>
+					<mk-cw-button v-model="showContent"/>
 				</p>
 				<div class="content" v-show="p.cw == null || showContent">
 					<div class="text">
@@ -350,19 +350,6 @@ root(isDark)
 					> .text
 						margin-right 8px
 
-					> .toggle
-						display inline-block
-						padding 4px 8px
-						font-size 0.7em
-						color isDark ? #393f4f : #fff
-						background isDark ? #687390 : #b1b9c1
-						border-radius 2px
-						cursor pointer
-						user-select none
-
-						&:hover
-							background isDark ? #707b97 : #bbc4ce
-
 				> .content
 
 					> .text

From 683d3a70b231c97fda58634b1852444097f47960 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 18:23:44 +0900
Subject: [PATCH 231/539] #2562 #2563

---
 locales/ja-JP.yml                             |  5 ++-
 .../views/pages/settings/settings.profile.vue | 31 +++++++++++++++----
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 98c2f5fe45..5b6fe6bb6f 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -880,7 +880,7 @@ desktop/views/components/settings.profile.vue:
   birthday: "誕生日"
   save: "保存"
   locked-account: "アカウントの保護"
-  is-locked: "投稿を非公開にする"
+  is-locked: "フォローを承認制にする"
   other: "その他"
   is-bot: "このアカウントはBotです"
   is-cat: "このアカウントはCatです"
@@ -1353,6 +1353,9 @@ mobile/views/pages/settings/settings.profile.vue:
   avatar: "アイコン"
   banner: "バナー"
   is-cat: "このアカウントはCatです"
+  is-locked: "フォローを承認制にする"
+  advanced: "その他"
+  privacy: "プライバシー"
   save: "保存"
   saved: "プロフィールを保存しました"
   uploading: "アップロード中"
diff --git a/src/client/app/mobile/views/pages/settings/settings.profile.vue b/src/client/app/mobile/views/pages/settings/settings.profile.vue
index 3efeac3da5..6f5ac9ae93 100644
--- a/src/client/app/mobile/views/pages/settings/settings.profile.vue
+++ b/src/client/app/mobile/views/pages/settings/settings.profile.vue
@@ -40,11 +40,25 @@
 				<span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span>
 			</ui-input>
 
-			<ui-switch v-model="isCat">%i18n:@is-cat%</ui-switch>
-
-			<ui-button @click="save">%i18n:@save%</ui-button>
+			<ui-button @click="save(true)">%i18n:@save%</ui-button>
 		</ui-form>
 	</section>
+
+	<section>
+		<header>%i18n:@advanced%</header>
+
+		<div>
+			<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
+		</div>
+	</section>
+
+	<section>
+		<header>%i18n:@privacy%</header>
+
+		<div>
+			<ui-switch v-model="isLocked" @change="save(false)">%i18n:@is-locked%</ui-switch>
+		</div>
+	</section>
 </ui-card>
 </template>
 
@@ -64,6 +78,7 @@ export default Vue.extend({
 			avatarId: null,
 			bannerId: null,
 			isCat: false,
+			isLocked: false,
 			saving: false,
 			avatarUploading: false,
 			bannerUploading: false
@@ -79,6 +94,7 @@ export default Vue.extend({
 		this.avatarId = this.$store.state.i.avatarId;
 		this.bannerId = this.$store.state.i.bannerId;
 		this.isCat = this.$store.state.i.isCat;
+		this.isLocked = this.$store.state.i.isLocked;
 	},
 
 	methods: {
@@ -126,7 +142,7 @@ export default Vue.extend({
 				});
 		},
 
-		save() {
+		save(notify) {
 			this.saving = true;
 
 			(this as any).api('i/update', {
@@ -136,7 +152,8 @@ export default Vue.extend({
 				birthday: this.birthday || null,
 				avatarId: this.avatarId,
 				bannerId: this.bannerId,
-				isCat: this.isCat
+				isCat: this.isCat,
+				isLocked: this.isLocked
 			}).then(i => {
 				this.saving = false;
 				this.$store.state.i.avatarId = i.avatarId;
@@ -144,7 +161,9 @@ export default Vue.extend({
 				this.$store.state.i.bannerId = i.bannerId;
 				this.$store.state.i.bannerUrl = i.bannerUrl;
 
-				alert('%i18n:@saved%');
+				if (notify) {
+					alert('%i18n:@saved%');
+				}
 			});
 		}
 	}

From b28eb54cac5af6db4aab50e2b5b94440d6c67e33 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 13 Sep 2018 18:28:12 +0900
Subject: [PATCH 232/539] fix(package): update vue-loader to version 15.4.2
 (#2692)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 17be739743..a80be265ac 100644
--- a/package.json
+++ b/package.json
@@ -212,7 +212,7 @@
 		"vue-cropperjs": "2.2.1",
 		"vue-js-modal": "1.3.26",
 		"vue-json-tree-view": "2.1.4",
-		"vue-loader": "15.4.1",
+		"vue-loader": "15.4.2",
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
 		"vue-template-compiler": "2.5.17",

From 9ed2a82d3bd8051350057c27fad473085b2b4d87 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 18:29:11 +0900
Subject: [PATCH 233/539] fix(package): update debug to version 4.0.1 (#2700)

Closes #2682
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a80be265ac..4f2543b0c2 100644
--- a/package.json
+++ b/package.json
@@ -94,7 +94,7 @@
 		"crc-32": "1.2.0",
 		"css-loader": "1.0.0",
 		"dateformat": "3.0.3",
-		"debug": "3.1.0",
+		"debug": "4.0.1",
 		"deep-equal": "1.0.1",
 		"deepcopy": "0.6.3",
 		"diskusage": "0.2.4",

From c2eb80b44cc921dcb2e035fe2f15deaba475fd70 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 18:29:29 +0900
Subject: [PATCH 234/539] fix(package): update @types/mongodb to version 3.1.7
 (#2701)

Closes #2681
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 4f2543b0c2..c62efeef54 100644
--- a/package.json
+++ b/package.json
@@ -58,7 +58,7 @@
 		"@types/minio": "7.0.0",
 		"@types/mkdirp": "0.5.2",
 		"@types/mocha": "5.2.3",
-		"@types/mongodb": "3.1.4",
+		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
 		"@types/node": "10.9.4",
 		"@types/portscanner": "2.1.0",

From be842b5071512e9ed63f8b66fa98d4c7dc7005e1 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 13 Sep 2018 18:29:48 +0900
Subject: [PATCH 235/539] fix(package): update webpack to version 4.18.0
 (#2680)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c62efeef54..005dd7a94f 100644
--- a/package.json
+++ b/package.json
@@ -222,7 +222,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.17.2",
+		"webpack": "4.18.0",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.26",
 		"ws": "6.0.0",

From b51843ed50449758331444493eef30a38694d542 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 13 Sep 2018 18:42:30 +0900
Subject: [PATCH 236/539] 8.36.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index b5dca222f9..c7387d7bcf 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.35.0",
-	"clientVersion": "1.0.9589",
+	"version": "8.36.0",
+	"clientVersion": "1.0.9637",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 17cc5a9b953a6af15b4b936c75c74086c9853b9a Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 13 Sep 2018 19:35:35 +0900
Subject: [PATCH 237/539] fix(package): update webpack to version 4.18.1
 (#2704)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c7387d7bcf..fa634da10c 100644
--- a/package.json
+++ b/package.json
@@ -222,7 +222,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.18.0",
+		"webpack": "4.18.1",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.26",
 		"ws": "6.0.0",

From 684301948122d333d1030b4ce579a5596908ef04 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 09:15:37 +0900
Subject: [PATCH 238/539] =?UTF-8?q?=E3=83=A1=E3=83=A2=E3=83=AA=E3=83=AA?=
 =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=82=92=E6=89=BF=E7=9F=A5=E3=81=A7=E3=81=84?=
 =?UTF-8?q?=E3=81=8F=E3=81=A4=E3=81=8B=E3=81=AE=E9=87=8D=E8=A6=81=E3=81=AA?=
 =?UTF-8?q?=E9=83=A8=E5=88=86=E3=81=AE=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC?=
 =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E6=9C=89=E5=8A=B9=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/desktop/views/components/notes.vue         | 6 ++----
 src/client/app/desktop/views/components/notifications.vue | 6 ++----
 src/client/app/mobile/views/components/notes.vue          | 6 ++----
 3 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index f19ecf8f9a..26aa0c8dea 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -10,8 +10,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<!--<transition-group name="mk-notes" class="transition">-->
-	<div class="notes">
+	<transition-group name="mk-notes" class="notes transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@@ -19,8 +18,7 @@
 				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</div>
-	<!--</transition-group>-->
+	</transition-group>
 
 	<footer v-if="more">
 		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index bfe71903e4..9d0e73adef 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -2,8 +2,7 @@
 <div class="mk-notifications">
 	<div class="notifications" v-if="notifications.length != 0">
 		<!-- トランジションを有効にするとなぜかメモリリークする -->
-		<!-- <transition-group name="mk-notifications" class="transition"> -->
-		<div>
+		<transition-group name="mk-notifications" class="transition" tag="div">
 			<template v-for="(notification, i) in _notifications">
 				<div class="notification" :class="notification.type" :key="notification.id">
 					<mk-time :time="notification.createdAt"/>
@@ -97,8 +96,7 @@
 					<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 				</p>
 			</template>
-		</div>
-		<!-- </transition-group> -->
+		</transition-group>
 	</div>
 	<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 		<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index ce2670dc52..17806f062e 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -14,8 +14,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<!-- <transition-group name="mk-notes" class="transition"> -->
-	<div class="transition">
+	<transition-group name="mk-notes" class="transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@@ -23,8 +22,7 @@
 				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</div>
-	<!-- </transition-group> -->
+	</transition-group>
 
 	<footer v-if="more">
 		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">

From 2c59da36c2880782982d1b6cccb671e535643dd3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 09:19:24 +0900
Subject: [PATCH 239/539] 8.37.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index fa634da10c..1d21d4583c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.36.0",
-	"clientVersion": "1.0.9637",
+	"version": "8.37.0",
+	"clientVersion": "1.0.9642",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 10dc97c43fefcc76465078009a920b4f007bafa1 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 14 Sep 2018 03:29:26 +0000
Subject: [PATCH 240/539] fix(package): update webpack to version 4.19.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 1d21d4583c..ac86a8128e 100644
--- a/package.json
+++ b/package.json
@@ -222,7 +222,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.18.1",
+		"webpack": "4.19.0",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.26",
 		"ws": "6.0.0",

From 4b3ece439e04a1e03825f9cbf88b9885771f5119 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 12:39:11 +0900
Subject: [PATCH 241/539] :art:

---
 src/client/app/mobile/views/components/notify.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/mobile/views/components/notify.vue b/src/client/app/mobile/views/components/notify.vue
index 7a2f7bfedc..307fb08cfa 100644
--- a/src/client/app/mobile/views/components/notify.vue
+++ b/src/client/app/mobile/views/components/notify.vue
@@ -45,7 +45,7 @@ export default Vue.extend({
 	$height = 78px
 
 	position fixed
-	z-index 1024
+	z-index 10000
 	left 0
 	right 0
 	width 100%

From 34a5adf9517f109626801e576733a65002cde87c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 15:14:59 +0900
Subject: [PATCH 242/539] =?UTF-8?q?=E5=B8=B8=E3=81=AB=E9=96=B2=E8=A6=A7?=
 =?UTF-8?q?=E6=B3=A8=E6=84=8F=E3=81=AE=E7=94=BB=E5=83=8F=E3=82=92=E8=A1=A8?=
 =?UTF-8?q?=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7?=
 =?UTF-8?q?=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0=20&=20=E3=83=AA=E3=83=95?=
 =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |   2 +
 .../desktop/views/components/media-image.vue  |   2 +-
 .../app/desktop/views/components/settings.vue | 258 ++++++++----------
 .../mobile/views/components/media-image.vue   |   2 +-
 .../app/mobile/views/pages/settings.vue       | 212 +++++++-------
 src/client/app/store.ts                       |   1 +
 6 files changed, 220 insertions(+), 257 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 5b6fe6bb6f..aaa06bdd1d 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -116,6 +116,8 @@ common:
   use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
   verified-user: "公式アカウント"
   disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
+  always-show-nsfw: "常に閲覧注意のメディアを表示する"
+  this-setting-is-this-device-only: "このデバイスのみ"
 
   do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
 
diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 0284872c68..66ac389f64 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide" @click="hide = false">
+<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
 	<div>
 		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 		<span>%i18n:@click-to-show%</span>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 3998adf601..8e2905e73b 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -20,7 +20,7 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@behaviour%</h1>
-			<mk-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll" text="%i18n:@fetch-on-scroll%">
+			<mk-switch v-model="fetchOnScroll" text="%i18n:@fetch-on-scroll%">
 				<span>%i18n:@fetch-on-scroll-desc%</span>
 			</mk-switch>
 			<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
@@ -29,7 +29,7 @@
 
 			<section>
 				<header>%i18n:@note-visibility%</header>
-				<mk-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
+				<mk-switch v-model="rememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
 				<section>
 					<header>%i18n:@default-note-visibility%</header>
 					<ui-select v-model="defaultNoteVisibility">
@@ -59,24 +59,25 @@
 				<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
-				<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
-				<mk-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct" text="%i18n:@contrasted-acct%"/>
-				<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
-				<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
+				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
+				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
+				<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
+				<mk-switch v-model="iLikeSushi" text="%i18n:common.i-like-sushi%"/>
 			</div>
-			<mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
-			<mk-switch v-model="$store.state.settings.suggestRecentHashtags" @change="onChangeSuggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
-			<mk-switch v-model="$store.state.settings.showClockOnHeader" @change="onChangeShowClockOnHeader" text="%i18n:@show-clock-on-header%"/>
-			<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
-			<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
-			<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
-			<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/>
-			<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
+			<mk-switch v-model="showPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
+			<mk-switch v-model="suggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
+			<mk-switch v-model="showClockOnHeader" text="%i18n:@show-clock-on-header%"/>
+			<mk-switch v-model="alwaysShowNsfw" text="%i18n:common.always-show-nsfw%"/>
+			<mk-switch v-model="showReplyTarget" text="%i18n:@show-reply-target%"/>
+			<mk-switch v-model="showMyRenotes" text="%i18n:@show-my-renotes%"/>
+			<mk-switch v-model="showRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
+			<mk-switch v-model="showLocalRenotes" text="%i18n:@show-local-renotes%"/>
+			<mk-switch v-model="showMaps" text="%i18n:@show-maps%">
 				<span>%i18n:@show-maps-desc%</span>
 			</mk-switch>
-			<mk-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
-			<mk-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
-			<mk-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones" text="%i18n:common.use-contrast-reversi-stones%"/>
+			<mk-switch v-model="disableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
+			<mk-switch v-model="games_reversi_showBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
+			<mk-switch v-model="games_reversi_useContrastStones" text="%i18n:common.use-contrast-reversi-stones%"/>
 		</section>
 
 		<section class="web" v-show="page == 'web'">
@@ -98,7 +99,7 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@mobile%</h1>
-			<mk-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile" text="%i18n:@disable-via-mobile%"/>
+			<mk-switch v-model="disableViaMobile" text="%i18n:@disable-via-mobile%"/>
 		</section>
 
 		<section class="web" v-show="page == 'web'">
@@ -255,11 +256,6 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
 		},
 
-		defaultNoteVisibility: {
-			get() { return this.$store.state.settings.defaultNoteVisibility; },
-			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
-		},
-
 		autoPopout: {
 			get() { return this.$store.state.device.autoPopout; },
 			set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
@@ -298,7 +294,107 @@ export default Vue.extend({
 		enableExperimentalFeatures: {
 			get() { return this.$store.state.device.enableExperimentalFeatures; },
 			set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); }
-		}
+		},
+
+		alwaysShowNsfw: {
+			get() { return this.$store.state.device.alwaysShowNsfw; },
+			set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
+		},
+
+		fetchOnScroll: {
+			get() { return this.$store.state.settings.fetchOnScroll; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
+		},
+
+		rememberNoteVisibility: {
+			get() { return this.$store.state.settings.rememberNoteVisibility; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
+		},
+
+		defaultNoteVisibility: {
+			get() { return this.$store.state.settings.defaultNoteVisibility; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
+		},
+
+		showReplyTarget: {
+			get() { return this.$store.state.settings.showReplyTarget; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
+		},
+
+		showMyRenotes: {
+			get() { return this.$store.state.settings.showMyRenotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
+		},
+
+		showRenotedMyNotes: {
+			get() { return this.$store.state.settings.showRenotedMyNotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
+		},
+
+		showLocalRenotes: {
+			get() { return this.$store.state.settings.showLocalRenotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
+		},
+
+		showPostFormOnTopOfTl: {
+			get() { return this.$store.state.settings.showPostFormOnTopOfTl; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showPostFormOnTopOfTl', value }); }
+		},
+
+		suggestRecentHashtags: {
+			get() { return this.$store.state.settings.suggestRecentHashtags; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'suggestRecentHashtags', value }); }
+		},
+
+		showClockOnHeader: {
+			get() { return this.$store.state.settings.showClockOnHeader; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showClockOnHeader', value }); }
+		},
+
+		showMaps: {
+			get() { return this.$store.state.settings.showMaps; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showMaps', value }); }
+		},
+
+		circleIcons: {
+			get() { return this.$store.state.settings.circleIcons; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
+		},
+
+		contrastedAcct: {
+			get() { return this.$store.state.settings.contrastedAcct; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
+		},
+
+		iLikeSushi: {
+			get() { return this.$store.state.settings.iLikeSushi; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
+		},
+
+		games_reversi_showBoardLabels: {
+			get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
+		},
+
+		games_reversi_useContrastStones: {
+			get() { return this.$store.state.settings.games.reversi.useContrastStones; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
+		},
+
+		disableAnimatedMfm: {
+			get() { return this.$store.state.settings.disableAnimatedMfm; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
+		},
+
+		disableViaMobile: {
+			get() { return this.$store.state.settings.disableViaMobile; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
+		},
+
+		gradientWindowHeader: {
+			get() { return this.$store.state.settings.gradientWindowHeader; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'gradientWindowHeader', value }); }
+		},
 	},
 	created() {
 		(this as any).os.getMeta().then(meta => {
@@ -327,125 +423,11 @@ export default Vue.extend({
 				wallpaperId: null
 			});
 		},
-		onChangeFetchOnScroll(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'fetchOnScroll',
-				value: v
-			});
-		},
-		onChangeRememberNoteVisibility(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'rememberNoteVisibility',
-				value: v
-			});
-		},
 		onChangeAutoWatch(v) {
 			(this as any).api('i/update', {
 				autoWatch: v
 			});
 		},
-		onChangeDark(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'dark',
-				value: v
-			});
-		},
-		onChangeShowPostFormOnTopOfTl(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showPostFormOnTopOfTl',
-				value: v
-			});
-		},
-		onChangeSuggestRecentHashtags(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'suggestRecentHashtags',
-				value: v
-			});
-		},
-		onChangeShowClockOnHeader(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showClockOnHeader',
-				value: v
-			});
-		},
-		onChangeShowReplyTarget(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showReplyTarget',
-				value: v
-			});
-		},
-		onChangeShowMyRenotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showMyRenotes',
-				value: v
-			});
-		},
-		onChangeShowRenotedMyNotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showRenotedMyNotes',
-				value: v
-			});
-		},
-		onChangeShowLocalRenotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showLocalRenotes',
-				value: v
-			});
-		},
-		onChangeShowMaps(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showMaps',
-				value: v
-			});
-		},
-		onChangeCircleIcons(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'circleIcons',
-				value: v
-			});
-		},
-		onChangeContrastedAcct(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'contrastedAcct',
-				value: v
-			});
-		},
-		onChangeILikeSushi(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'iLikeSushi',
-				value: v
-			});
-		},
-		onChangeReversiBoardLabels(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'games.reversi.showBoardLabels',
-				value: v
-			});
-		},
-		onChangeUseContrastReversiStones(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'games.reversi.useContrastStones',
-				value: v
-			});
-		},
-		onChangeDisableAnimatedMfm(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'disableAnimatedMfm',
-				value: v
-			});
-		},
-		onChangeGradientWindowHeader(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'gradientWindowHeader',
-				value: v
-			});
-		},
-		onChangeDisableViaMobile(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'disableViaMobile',
-				value: v
-			});
-		},
 		checkForUpdate() {
 			this.checkingForUpdate = true;
 			checkForUpdate((this as any).os, true, true).then(newer => {
diff --git a/src/client/app/mobile/views/components/media-image.vue b/src/client/app/mobile/views/components/media-image.vue
index e40069bbe3..65ea6cf8ea 100644
--- a/src/client/app/mobile/views/components/media-image.vue
+++ b/src/client/app/mobile/views/components/media-image.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide" @click="hide = false">
+<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
 	<div>
 		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 		<span>%i18n:@click-to-show%</span>
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index a078929016..c93b3a50f1 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -12,21 +12,22 @@
 
 				<section>
 					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
-					<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
-					<ui-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct">%i18n:@contrasted-acct%</ui-switch>
-					<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
-					<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
-					<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
-					<ui-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
+					<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
+					<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
+					<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
+					<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
+					<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
+					<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
+					<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
 				</section>
 
 				<section>
 					<header>%i18n:@timeline%</header>
 					<div>
-						<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch>
-						<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch>
-						<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
-						<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
+						<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
+						<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
+						<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
+						<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
 					</div>
 				</section>
 
@@ -47,16 +48,16 @@
 				<div slot="title">%fa:cog% %i18n:@behavior%</div>
 
 				<section>
-					<ui-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
-					<ui-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
+					<ui-switch v-model="fetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
+					<ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
 					<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
-					<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
+					<ui-switch v-model="loadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
 					<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
 				</section>
 
 				<section>
 					<header>%i18n:@note-visibility%</header>
-					<ui-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
+					<ui-switch v-model="rememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
 					<section>
 						<header>%i18n:@default-note-visibility%</header>
 						<ui-select v-model="defaultNoteVisibility">
@@ -166,6 +167,11 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
 		},
 
+		alwaysShowNsfw: {
+			get() { return this.$store.state.device.alwaysShowNsfw; },
+			set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
+		},
+
 		postStyle: {
 			get() { return this.$store.state.device.postStyle; },
 			set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
@@ -176,11 +182,6 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
 		},
 
-		defaultNoteVisibility: {
-			get() { return this.$store.state.settings.defaultNoteVisibility; },
-			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
-		},
-
 		lightmode: {
 			get() { return this.$store.state.device.lightmode; },
 			set(value) { this.$store.commit('device/set', { key: 'lightmode', value }); }
@@ -200,6 +201,81 @@ export default Vue.extend({
 			get() { return this.$store.state.device.enableSounds; },
 			set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
 		},
+
+		fetchOnScroll: {
+			get() { return this.$store.state.settings.fetchOnScroll; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
+		},
+
+		rememberNoteVisibility: {
+			get() { return this.$store.state.settings.rememberNoteVisibility; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
+		},
+
+		disableViaMobile: {
+			get() { return this.$store.state.settings.disableViaMobile; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
+		},
+
+		loadRemoteMedia: {
+			get() { return this.$store.state.settings.loadRemoteMedia; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'loadRemoteMedia', value }); }
+		},
+
+		circleIcons: {
+			get() { return this.$store.state.settings.circleIcons; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
+		},
+
+		contrastedAcct: {
+			get() { return this.$store.state.settings.contrastedAcct; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
+		},
+
+		iLikeSushi: {
+			get() { return this.$store.state.settings.iLikeSushi; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
+		},
+
+		games_reversi_showBoardLabels: {
+			get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
+		},
+
+		games_reversi_useContrastStones: {
+			get() { return this.$store.state.settings.games.reversi.useContrastStones; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
+		},
+
+		disableAnimatedMfm: {
+			get() { return this.$store.state.settings.disableAnimatedMfm; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
+		},
+
+		showReplyTarget: {
+			get() { return this.$store.state.settings.showReplyTarget; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
+		},
+
+		showMyRenotes: {
+			get() { return this.$store.state.settings.showMyRenotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
+		},
+
+		showRenotedMyNotes: {
+			get() { return this.$store.state.settings.showRenotedMyNotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
+		},
+
+		showLocalRenotes: {
+			get() { return this.$store.state.settings.showLocalRenotes; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
+		},
+
+		defaultNoteVisibility: {
+			get() { return this.$store.state.settings.defaultNoteVisibility; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
+		},
 	},
 
 	mounted() {
@@ -211,104 +287,6 @@ export default Vue.extend({
 			(this as any).os.signout();
 		},
 
-		onChangeFetchOnScroll(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'fetchOnScroll',
-				value: v
-			});
-		},
-
-		onChangeRememberNoteVisibility(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'rememberNoteVisibility',
-				value: v
-			});
-		},
-
-		onChangeDisableViaMobile(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'disableViaMobile',
-				value: v
-			});
-		},
-
-		onChangeLoadRemoteMedia(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'loadRemoteMedia',
-				value: v
-			});
-		},
-
-		onChangeCircleIcons(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'circleIcons',
-				value: v
-			});
-		},
-
-		onChangeContrastedAcct(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'contrastedAcct',
-				value: v
-			});
-		},
-
-		onChangeILikeSushi(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'iLikeSushi',
-				value: v
-			});
-		},
-
-		onChangeReversiBoardLabels(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'games.reversi.showBoardLabels',
-				value: v
-			});
-		},
-
-		onChangeUseContrastReversiStones(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'games.reversi.useContrastStones',
-				value: v
-			});
-		},
-
-		onChangeDisableAnimatedMfm(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'disableAnimatedMfm',
-				value: v
-			});
-		},
-
-		onChangeShowReplyTarget(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showReplyTarget',
-				value: v
-			});
-		},
-
-		onChangeShowMyRenotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showMyRenotes',
-				value: v
-			});
-		},
-
-		onChangeShowRenotedMyNotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showRenotedMyNotes',
-				value: v
-			});
-		},
-
-		onChangeShowLocalRenotes(v) {
-			this.$store.dispatch('settings/set', {
-				key: 'showLocalRenotes',
-				value: v
-			});
-		},
-
 		checkForUpdate() {
 			this.checkingForUpdate = true;
 			checkForUpdate((this as any).os, true, true).then(newer => {
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 22de9b5587..7a5b3e986b 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -47,6 +47,7 @@ const defaultDeviceSettings = {
 	debug: false,
 	lightmode: false,
 	loadRawImages: false,
+	alwaysShowNsfw: false,
 	postStyle: 'standard',
 	mobileNotificationPosition: 'bottom'
 };

From c87a43bdba9634934f6349db887e00edc43dbe28 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 15:16:55 +0900
Subject: [PATCH 243/539] 8.38.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index ac86a8128e..48a1a3d8bc 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.37.0",
-	"clientVersion": "1.0.9642",
+	"version": "8.38.0",
+	"clientVersion": "1.0.9647",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 3220d69a6930151f33928b5d789150aacc4bc382 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 20:11:01 +0900
Subject: [PATCH 244/539] =?UTF-8?q?=E5=B8=B8=E3=81=AB=E3=83=A1=E3=83=87?=
 =?UTF-8?q?=E3=82=A3=E3=82=A2=E3=82=92=E9=96=B2=E8=A6=A7=E6=B3=A8=E6=84=8F?=
 =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=E6=8A=95=E7=A8=BF=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E5=AE=9F?=
 =?UTF-8?q?=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                      |  1 +
 .../app/desktop/views/components/settings.profile.vue  |  7 +++++++
 .../mobile/views/pages/settings/settings.profile.vue   |  8 ++++++++
 src/models/user.ts                                     |  5 ++++-
 src/server/api/endpoints/drive/files/create.ts         |  4 ++--
 src/server/api/endpoints/i/update.ts                   |  7 +++++++
 src/services/drive/add-file.ts                         | 10 ++++++++--
 7 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index aaa06bdd1d..134ec33831 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -117,6 +117,7 @@ common:
   verified-user: "公式アカウント"
   disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
   always-show-nsfw: "常に閲覧注意のメディアを表示する"
+  always-mark-nsfw: "常にメディアを閲覧注意として投稿"
   this-setting-is-this-device-only: "このデバイスのみ"
 
   do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
diff --git a/src/client/app/desktop/views/components/settings.profile.vue b/src/client/app/desktop/views/components/settings.profile.vue
index 262583b640..0f53941b31 100644
--- a/src/client/app/desktop/views/components/settings.profile.vue
+++ b/src/client/app/desktop/views/components/settings.profile.vue
@@ -30,6 +30,7 @@
 		<h2>%i18n:@other%</h2>
 		<mk-switch v-model="$store.state.i.isBot" @change="onChangeIsBot" text="%i18n:@is-bot%"/>
 		<mk-switch v-model="$store.state.i.isCat" @change="onChangeIsCat" text="%i18n:@is-cat%"/>
+		<mk-switch v-model="alwaysMarkNsfw" text="%i18n:common.always-mark-nsfw%"/>
 	</section>
 </div>
 </template>
@@ -46,6 +47,12 @@ export default Vue.extend({
 			birthday: null,
 		};
 	},
+	computed: {
+		alwaysMarkNsfw: {
+			get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
+			set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
+		},
+	},
 	created() {
 		this.name = this.$store.state.i.name || '';
 		this.location = this.$store.state.i.profile.location;
diff --git a/src/client/app/mobile/views/pages/settings/settings.profile.vue b/src/client/app/mobile/views/pages/settings/settings.profile.vue
index 6f5ac9ae93..127f531902 100644
--- a/src/client/app/mobile/views/pages/settings/settings.profile.vue
+++ b/src/client/app/mobile/views/pages/settings/settings.profile.vue
@@ -49,6 +49,7 @@
 
 		<div>
 			<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
+			<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
 		</div>
 	</section>
 
@@ -85,6 +86,13 @@ export default Vue.extend({
 		};
 	},
 
+	computed: {
+		alwaysMarkNsfw: {
+			get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
+			set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
+		},
+	},
+
 	created() {
 		this.name = this.$store.state.i.name || '';
 		this.username = this.$store.state.i.username;
diff --git a/src/models/user.ts b/src/models/user.ts
index 8f3fbbdc8f..64197c91c2 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -102,7 +102,10 @@ export interface ILocalUser extends IUserBase {
 	twoFactorEnabled: boolean;
 	twoFactorTempSecret?: string;
 	clientSettings: any;
-	settings: any;
+	settings: {
+		autoWatch: boolean;
+		alwaysMarkNsfw?: boolean;
+	};
 	hasUnreadNotification: boolean;
 	hasUnreadMessagingMessage: boolean;
 }
diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts
index dfbd11d0c2..4b5ffa90e0 100644
--- a/src/server/api/endpoints/drive/files/create.ts
+++ b/src/server/api/endpoints/drive/files/create.ts
@@ -31,8 +31,8 @@ export const meta = {
 			}
 		}),
 
-		isSensitive: $.bool.optional.note({
-			default: false,
+		isSensitive: $.bool.optional.nullable.note({
+			default: null,
 			desc: {
 				'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
 				'en-US': 'Whether this media is NSFW'
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 6aa4cc1148..c1be0b6ebc 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -84,6 +84,12 @@ export const meta = {
 				'ja-JP': '投稿の自動ウォッチをするか否か'
 			}
 		}),
+
+		alwaysMarkNsfw: $.bool.optional.note({
+			desc: {
+				'ja-JP': 'アップロードするメディアをデフォルトで「閲覧注意」として設定するか'
+			}
+		}),
 	}
 };
 
@@ -106,6 +112,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 	if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
 	if (typeof ps.isCat == 'boolean') updates.isCat = ps.isCat;
 	if (typeof ps.autoWatch == 'boolean') updates['settings.autoWatch'] = ps.autoWatch;
+	if (typeof ps.alwaysMarkNsfw == 'boolean') updates['settings.alwaysMarkNsfw'] = ps.alwaysMarkNsfw;
 
 	if (ps.avatarId) {
 		const avatar = await DriveFile.findOne({
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 828ebcbb94..666a6ca742 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -153,7 +153,7 @@ export default async function(
 	isLink: boolean = false,
 	url: string = null,
 	uri: string = null,
-	sensitive = false
+	sensitive: boolean = null
 ): Promise<IDriveFile> {
 	// Calc md5 hash
 	const calcHash = new Promise<string>((res, rej) => {
@@ -329,7 +329,13 @@ export default async function(
 		properties: properties,
 		withoutChunks: isLink,
 		isRemote: isLink,
-		isSensitive: sensitive
+		isSensitive: (sensitive !== null && sensitive !== undefined)
+			? sensitive
+			: isLocalUser(user)
+				? user.settings.alwaysMarkNsfw
+					? true
+					: false
+				: false
 	} as IMetadata;
 
 	if (url !== null) {

From f670345d450d2ac13448c56bc0aeb8dd5c3d84ef Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 20:33:27 +0900
Subject: [PATCH 245/539] =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC?=
 =?UTF-8?q?=E5=90=8D=E3=81=AE=E3=83=9B=E3=82=B9=E3=83=88=E3=82=92=E7=9C=81?=
 =?UTF-8?q?=E7=95=A5=E3=81=97=E3=81=AA=E3=81=84=E3=82=AA=E3=83=97=E3=82=B7?=
 =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                    | 1 +
 src/client/app/common/views/components/acct.vue      | 2 +-
 src/client/app/desktop/views/components/settings.vue | 6 ++++++
 src/client/app/mobile/views/pages/settings.vue       | 6 ++++++
 src/client/app/store.ts                              | 1 +
 5 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 134ec33831..5257d616c4 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -118,6 +118,7 @@ common:
   disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
   always-show-nsfw: "常に閲覧注意のメディアを表示する"
   always-mark-nsfw: "常にメディアを閲覧注意として投稿"
+  show-full-acct: "ユーザー名のホストを省略しない"
   this-setting-is-this-device-only: "このデバイスのみ"
 
   do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
diff --git a/src/client/app/common/views/components/acct.vue b/src/client/app/common/views/components/acct.vue
index bd7833f1a9..542fbb4296 100644
--- a/src/client/app/common/views/components/acct.vue
+++ b/src/client/app/common/views/components/acct.vue
@@ -1,7 +1,7 @@
 <template>
 <span class="mk-acct">
 	<span class="name">@{{ user.username }}</span>
-	<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail">@{{ user.host || host }}</span>
+	<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
 </span>
 </template>
 
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 8e2905e73b..1973acc839 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -61,6 +61,7 @@
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
 				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
+				<mk-switch v-model="showFullAcct" text="%i18n:common.show-full-acct%"/>
 				<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
 				<mk-switch v-model="iLikeSushi" text="%i18n:common.i-like-sushi%"/>
 			</div>
@@ -366,6 +367,11 @@ export default Vue.extend({
 			set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
 		},
 
+		showFullAcct: {
+			get() { return this.$store.state.settings.showFullAcct; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
+		},
+
 		iLikeSushi: {
 			get() { return this.$store.state.settings.iLikeSushi; },
 			set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index c93b3a50f1..9b0e521a4f 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -14,6 +14,7 @@
 					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 					<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
 					<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
+					<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
 					<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 					<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
 					<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
@@ -232,6 +233,11 @@ export default Vue.extend({
 			set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
 		},
 
+		showFullAcct: {
+			get() { return this.$store.state.settings.showFullAcct; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
+		},
+
 		iLikeSushi: {
 			get() { return this.$store.state.settings.iLikeSushi; },
 			set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 7a5b3e986b..997bddc5cc 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -17,6 +17,7 @@ const defaultSettings = {
 	showClockOnHeader: true,
 	circleIcons: true,
 	contrastedAcct: true,
+	showFullAcct: false,
 	gradientWindowHeader: false,
 	showReplyTarget: true,
 	showMyRenotes: true,

From e615a3fdf3087b5e2bbb390154401441f09713eb Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 14 Sep 2018 20:35:31 +0900
Subject: [PATCH 246/539] 8.39.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 48a1a3d8bc..4d2a4b285b 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.38.0",
-	"clientVersion": "1.0.9647",
+	"version": "8.39.0",
+	"clientVersion": "1.0.9650",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From c985fed3e43bae05f9e6e854f651f49f2bc3e83a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 05:40:58 +0900
Subject: [PATCH 247/539] Resolve #2328

---
 locales/ja-JP.yml                             |   4 +
 package.json                                  |   1 +
 .../app/desktop/views/components/charts.vue   | 103 +++++++++++++++++-
 src/models/stats.ts                           |  26 +++++
 src/server/api/endpoints/chart.ts             |  21 ++++
 src/server/index.ts                           |  25 +++++
 src/services/update-chart.ts                  |  22 ++++
 7 files changed, 200 insertions(+), 2 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 5257d616c4..72dc88b7b3 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -518,6 +518,7 @@ desktop/views/components/charts.vue:
   notes: "投稿"
   users: "ユーザー"
   drive: "ドライブ"
+  network: "ネットワーク"
   charts:
     notes: "投稿の増減 (統合)"
     local-notes: "投稿の増減 (ローカル)"
@@ -529,6 +530,9 @@ desktop/views/components/charts.vue:
     drive-total: "ドライブ使用量の累計"
     drive-files: "ドライブのファイル数の増減"
     drive-files-total: "ドライブのファイル数の累計"
+    network-requests: "リクエスト"
+    network-time: "応答時間"
+    network-usage: "通信量"
 
 desktop/views/components/choose-file-from-drive-window.vue:
   choose-file: "ファイル選択中"
diff --git a/package.json b/package.json
index 4d2a4b285b..4b9eaf9e22 100644
--- a/package.json
+++ b/package.json
@@ -179,6 +179,7 @@
 		"redis": "2.8.0",
 		"request": "2.88.0",
 		"request-promise-native": "1.0.5",
+		"request-stats": "3.0.0",
 		"rimraf": "2.6.2",
 		"rndstr": "1.0.0",
 		"s-age": "1.1.2",
diff --git a/src/client/app/desktop/views/components/charts.vue b/src/client/app/desktop/views/components/charts.vue
index c4e92e429f..6514cdf788 100644
--- a/src/client/app/desktop/views/components/charts.vue
+++ b/src/client/app/desktop/views/components/charts.vue
@@ -19,6 +19,11 @@
 				<option value="drive">%i18n:@charts.drive%</option>
 				<option value="drive-total">%i18n:@charts.drive-total%</option>
 			</optgroup>
+			<optgroup label="%i18n:@network%">
+				<option value="network-requests">%i18n:@charts.network-requests%</option>
+				<option value="network-time">%i18n:@charts.network-time%</option>
+				<option value="network-usage">%i18n:@charts.network-usage%</option>
+			</optgroup>
 		</select>
 		<div>
 			<span @click="span = 'day'" :class="{ active: span == 'day' }">%i18n:@per-day%</span> | <span @click="span = 'hour'" :class="{ active: span == 'hour' }">%i18n:@per-hour%</span>
@@ -41,7 +46,10 @@ const colors = {
 	localPlus: 'rgb(52, 178, 118)',
 	remotePlus: 'rgb(158, 255, 209)',
 	localMinus: 'rgb(255, 97, 74)',
-	remoteMinus: 'rgb(255, 149, 134)'
+	remoteMinus: 'rgb(255, 149, 134)',
+
+	incoming: 'rgb(52, 178, 118)',
+	outgoing: 'rgb(255, 97, 74)',
 };
 
 const rgba = (color: string): string => {
@@ -75,6 +83,9 @@ export default Vue.extend({
 				case 'drive-total': return this.driveTotalChart();
 				case 'drive-files': return this.driveFilesChart();
 				case 'drive-files-total': return this.driveFilesTotalChart();
+				case 'network-requests': return this.networkRequestsChart();
+				case 'network-time': return this.networkTimeChart();
+				case 'network-usage': return this.networkUsageChart();
 			}
 		},
 
@@ -544,7 +555,95 @@ export default Vue.extend({
 					}
 				}
 			}];
-		}
+		},
+
+		networkRequestsChart(): any {
+			const data = this.stats.slice().reverse().map(x => ({
+				date: new Date(x.date),
+				requests: x.network.requests
+			}));
+
+			return [{
+				datasets: [{
+					label: 'Requests',
+					fill: true,
+					backgroundColor: rgba(colors.localPlus),
+					borderColor: colors.localPlus,
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.requests }))
+				}]
+			}];
+		},
+
+		networkTimeChart(): any {
+			const data = this.stats.slice().reverse().map(x => ({
+				date: new Date(x.date),
+				time: x.network.requests != 0 ? (x.network.totalTime / x.network.requests) : 0,
+			}));
+
+			return [{
+				datasets: [{
+					label: 'Avg time (ms)',
+					fill: true,
+					backgroundColor: rgba(colors.localPlus),
+					borderColor: colors.localPlus,
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.time }))
+				}]
+			}];
+		},
+
+		networkUsageChart(): any {
+			const data = this.stats.slice().reverse().map(x => ({
+				date: new Date(x.date),
+				incoming: x.network.incomingBytes,
+				outgoing: x.network.outgoingBytes
+			}));
+
+			return [{
+				datasets: [{
+					label: 'Incoming',
+					fill: true,
+					backgroundColor: rgba(colors.incoming),
+					borderColor: colors.incoming,
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.incoming }))
+				}, {
+					label: 'Outgoing',
+					fill: true,
+					backgroundColor: rgba(colors.outgoing),
+					borderColor: colors.outgoing,
+					borderWidth: 2,
+					pointBackgroundColor: '#fff',
+					lineTension: 0,
+					data: data.map(x => ({ t: x.date, y: x.outgoing }))
+				}]
+			}, {
+				scales: {
+					yAxes: [{
+						ticks: {
+							callback: value => {
+								return Vue.filter('bytes')(value, 1);
+							}
+						}
+					}]
+				},
+				tooltips: {
+					callbacks: {
+						label: (tooltipItem, data) => {
+							const label = data.datasets[tooltipItem.datasetIndex].label || '';
+							return `${label}: ${Vue.filter('bytes')(tooltipItem.yLabel, 1)}`;
+						}
+					}
+				}
+			}];
+		},
 	}
 });
 </script>
diff --git a/src/models/stats.ts b/src/models/stats.ts
index d496f2c480..c4c838caeb 100644
--- a/src/models/stats.ts
+++ b/src/models/stats.ts
@@ -204,4 +204,30 @@ export interface IStats {
 			decSize: number;
 		};
 	};
+
+	/**
+	 * ネットワークに関する統計
+	 */
+	network: {
+		/**
+		 * サーバーへのリクエスト数
+		 */
+		requests: number;
+
+		/**
+		 * 応答時間の合計
+		 * TIP: (totalTime / requests) でひとつのリクエストに平均でどれくらいの時間がかかったか知れる
+		 */
+		totalTime: number;
+
+		/**
+		 * 合計受信データ量
+		 */
+		incomingBytes: number;
+
+		/**
+		 * 合計送信データ量
+		 */
+		outgoingBytes: number;
+	};
 }
diff --git a/src/server/api/endpoints/chart.ts b/src/server/api/endpoints/chart.ts
index 7da970131e..3b1a3b56fc 100644
--- a/src/server/api/endpoints/chart.ts
+++ b/src/server/api/endpoints/chart.ts
@@ -6,6 +6,15 @@ type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
 
 function migrateStats(stats: IStats[]) {
 	stats.forEach(stat => {
+		if (stat.network == null) {
+			stat.network = {
+				requests: 0,
+				totalTime: 0,
+				incomingBytes: 0,
+				outgoingBytes: 0
+			};
+		}
+
 		const isOldData =
 			stat.users.local.inc == null ||
 			stat.users.local.dec == null ||
@@ -180,6 +189,12 @@ export default (params: any) => new Promise(async (res, rej) => {
 								decCount: 0,
 								decSize: 0
 							}
+						},
+						network: {
+							requests: 0,
+							totalTime: 0,
+							incomingBytes: 0,
+							outgoingBytes: 0
 						}
 					});
 				} else {
@@ -236,6 +251,12 @@ export default (params: any) => new Promise(async (res, rej) => {
 								decCount: 0,
 								decSize: 0
 							}
+						},
+						network: {
+							requests: 0,
+							totalTime: 0,
+							incomingBytes: 0,
+							outgoingBytes: 0
 						}
 					});
 				}
diff --git a/src/server/index.ts b/src/server/index.ts
index f1fcf58c8d..dc60b0d9ec 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -11,11 +11,13 @@ import * as Router from 'koa-router';
 import * as mount from 'koa-mount';
 import * as compress from 'koa-compress';
 import * as logger from 'koa-logger';
+const requestStats = require('request-stats');
 //const slow = require('koa-slow');
 
 import activityPub from './activitypub';
 import webFinger from './webfinger';
 import config from '../config';
+import { updateNetworkStats } from '../services/update-chart';
 
 // Init app
 const app = new Koa();
@@ -81,4 +83,27 @@ export default () => new Promise(resolve => {
 
 	// Listen
 	server.listen(config.port, resolve);
+
+	//#region Network stats
+	let queue: any[] = [];
+
+	requestStats(server, (stats: any) => {
+		if (stats.ok) {
+			queue.push(stats);
+		}
+	});
+
+	// Bulk write
+	setInterval(() => {
+		if (queue.length == 0) return;
+
+		const requests = queue.length;
+		const time = queue.reduce((a, b) => a + b.time, 0);
+		const incomingBytes = queue.reduce((a, b) => a + b.req.bytes, 0);
+		const outgoingBytes = queue.reduce((a, b) => a + b.res.bytes, 0);
+		queue = [];
+
+		updateNetworkStats(requests, time, incomingBytes, outgoingBytes);
+	}, 5000);
+	//#endregion
 });
diff --git a/src/services/update-chart.ts b/src/services/update-chart.ts
index 1f8da6be9f..78834ba601 100644
--- a/src/services/update-chart.ts
+++ b/src/services/update-chart.ts
@@ -96,6 +96,12 @@ async function getCurrentStats(span: 'day' | 'hour'): Promise<IStats> {
 						decCount: 0,
 						decSize: 0
 					}
+				},
+				network: {
+					requests: 0,
+					totalTime: 0,
+					incomingBytes: 0,
+					outgoingBytes: 0
 				}
 			};
 
@@ -161,6 +167,12 @@ async function getCurrentStats(span: 'day' | 'hour'): Promise<IStats> {
 						decCount: 0,
 						decSize: 0
 					}
+				},
+				network: {
+					requests: 0,
+					totalTime: 0,
+					incomingBytes: 0,
+					outgoingBytes: 0
 				}
 			};
 
@@ -243,3 +255,13 @@ export async function updateDriveStats(file: IDriveFile, isAdditional: boolean)
 
 	await update(inc);
 }
+
+export async function updateNetworkStats(requests: number, time: number, incomingBytes: number, outgoingBytes: number) {
+	const inc = {} as any;
+	inc['network.requests'] = requests;
+	inc['network.totalTime'] = time;
+	inc['network.incomingBytes'] = incomingBytes;
+	inc['network.outgoingBytes'] = outgoingBytes;
+
+	await update(inc);
+}

From fc31e44fd2d70ae8f4114009a26f00fc5db01fca Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 05:42:14 +0900
Subject: [PATCH 248/539] Fix bug

---
 src/server/api/endpoints/aggregation/hashtags.ts | 2 +-
 src/server/api/endpoints/hashtags/trend.ts       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/server/api/endpoints/aggregation/hashtags.ts b/src/server/api/endpoints/aggregation/hashtags.ts
index c5aacd89cd..ffeafb2538 100644
--- a/src/server/api/endpoints/aggregation/hashtags.ts
+++ b/src/server/api/endpoints/aggregation/hashtags.ts
@@ -3,7 +3,7 @@ import Meta from '../../../../models/meta';
 
 export default () => new Promise(async (res, rej) => {
 	const meta = await Meta.findOne({});
-	const hidedTags = (meta.hidedTags || []).map(t => t.toLowerCase());
+	const hidedTags = meta ? (meta.hidedTags || []).map(t => t.toLowerCase()) : [];
 
 	const span = 1000 * 60 * 60 * 24 * 7; // 1週間
 
diff --git a/src/server/api/endpoints/hashtags/trend.ts b/src/server/api/endpoints/hashtags/trend.ts
index bfa475619c..0ec6a4ffec 100644
--- a/src/server/api/endpoints/hashtags/trend.ts
+++ b/src/server/api/endpoints/hashtags/trend.ts
@@ -19,7 +19,7 @@ const max = 5;
  */
 export default () => new Promise(async (res, rej) => {
 	const meta = await Meta.findOne({});
-	const hidedTags = (meta.hidedTags || []).map(t => t.toLowerCase());
+	const hidedTags = meta ? (meta.hidedTags || []).map(t => t.toLowerCase()) : [];
 
 	//#region 1. 直近Aの内に投稿されたハッシュタグ(とユーザーのペア)を集計
 	const data = await Note.aggregate([{

From 2fee2e51660fab5db24c3291403c6c6950eb61dc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 05:50:08 +0900
Subject: [PATCH 249/539] 8.40.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 4b9eaf9e22..081780250a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.39.0",
-	"clientVersion": "1.0.9650",
+	"version": "8.40.0",
+	"clientVersion": "1.0.9711",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 7b2b7d1456b500c8dd406a6e51c8f95d0f9405d3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 21:48:10 +0900
Subject: [PATCH 250/539] Resolve #2066

---
 package.json                                  |   4 -
 .../components/games/reversi/reversi.game.vue |  16 +-
 .../games/reversi/reversi.index.vue           |   1 -
 .../components/games/reversi/reversi.room.vue |   7 +-
 src/client/app/desktop/script.ts              |   1 -
 .../views/components/settings.drive.vue       |   1 -
 .../views/components/settings.profile.vue     |   2 +-
 .../app/desktop/views/components/settings.vue |  33 +--
 .../desktop/views/components/taskmanager.vue  | 219 ------------------
 src/client/app/init.ts                        |  11 -
 src/client/app/mobile/script.ts               |   1 -
 src/client/element.scss                       |  12 -
 webpack.config.ts                             |  17 --
 13 files changed, 22 insertions(+), 303 deletions(-)
 delete mode 100644 src/client/app/desktop/views/components/taskmanager.vue
 delete mode 100644 src/client/element.scss

diff --git a/package.json b/package.json
index 081780250a..7b81c925b2 100644
--- a/package.json
+++ b/package.json
@@ -101,7 +101,6 @@
 		"dompurify": "1.0.5",
 		"double-ended-queue": "2.1.0-0",
 		"elasticsearch": "15.1.1",
-		"element-ui": "2.4.6",
 		"emojilib": "2.3.0",
 		"escape-regexp": "0.0.1",
 		"eslint": "5.0.1",
@@ -132,7 +131,6 @@
 		"insert-text-at-cursor": "0.1.1",
 		"is-root": "2.0.0",
 		"is-url": "1.2.4",
-		"jquery": "3.3.1",
 		"js-yaml": "3.12.0",
 		"jsdom": "11.12.0",
 		"koa": "2.5.1",
@@ -160,8 +158,6 @@
 		"ms": "2.1.1",
 		"nan": "2.11.0",
 		"nested-property": "0.0.7",
-		"node-sass": "4.9.3",
-		"node-sass-json-importer": "4.0.1",
 		"nprogress": "0.2.0",
 		"object-assign-deep": "0.4.0",
 		"on-build-webpack": "0.1.0",
diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index 673879a435..fea19d917e 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -50,15 +50,15 @@
 	</div>
 
 	<div class="player" v-if="game.isEnded">
-		<el-button-group>
-			<el-button type="primary" @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</el-button>
-			<el-button type="primary" @click="logPos--" :disabled="logPos == 0">%fa:angle-left%</el-button>
-		</el-button-group>
+		<div>
+			<button @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</button>
+			<button @click="logPos--" :disabled="logPos == 0">%fa:angle-left%</button>
+		</div>
 		<span>{{ logPos }} / {{ logs.length }}</span>
-		<el-button-group>
-			<el-button type="primary" @click="logPos++" :disabled="logPos == logs.length">%fa:angle-right%</el-button>
-			<el-button type="primary" @click="logPos = logs.length" :disabled="logPos == logs.length">%fa:angle-double-right%</el-button>
-		</el-button-group>
+		<div>
+			<button @click="logPos++" :disabled="logPos == logs.length">%fa:angle-right%</button>
+			<button @click="logPos = logs.length" :disabled="logPos == logs.length">%fa:angle-double-right%</button>
+		</div>
 	</div>
 
 	<div class="info">
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index fa88aeaaf4..d23902aae7 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -3,7 +3,6 @@
 	<h1>%i18n:@title%</h1>
 	<p>%i18n:@sub-title%</p>
 	<div class="play">
-		<!--<el-button round>フリーマッチ(準備中)</el-button>-->
 		<form-button primary round @click="match">%i18n:@invite%</form-button>
 		<details>
 			<summary>%i18n:@rule%</summary>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index aed8718dd0..fef833d63e 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -59,11 +59,6 @@
 			</header>
 
 			<div>
-				<el-alert v-for="message in messages"
-						:title="message.text"
-						:type="message.type"
-						:key="message.id"/>
-
 				<template v-for="item in form">
 					<mk-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</mk-switch>
 
@@ -93,7 +88,7 @@
 						</header>
 
 						<div>
-							<el-input v-model="item.value" @change="onChangeForm(item)"/>
+							<input v-model="item.value" @change="onChangeForm(item)"/>
 						</div>
 					</div>
 				</template>
diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts
index f0e8a42662..e32682286c 100644
--- a/src/client/app/desktop/script.ts
+++ b/src/client/app/desktop/script.ts
@@ -6,7 +6,6 @@ import VueRouter from 'vue-router';
 
 // Style
 import './style.styl';
-import '../../element.scss';
 
 import init from '../init';
 import fuckAdBlock from '../common/scripts/fuck-ad-block';
diff --git a/src/client/app/desktop/views/components/settings.drive.vue b/src/client/app/desktop/views/components/settings.drive.vue
index e8a3cc9685..d254b27110 100644
--- a/src/client/app/desktop/views/components/settings.drive.vue
+++ b/src/client/app/desktop/views/components/settings.drive.vue
@@ -1,7 +1,6 @@
 <template>
 <div class="root">
 	<template v-if="!fetching">
-		<el-progress :text-inside="true" :stroke-width="18" :percentage="Math.floor((usage / capacity) * 100)"/>
 		<p><b>{{ capacity | bytes }}</b>%i18n:max%<b>{{ usage | bytes }}</b>%i18n:in-use%</p>
 	</template>
 </div>
diff --git a/src/client/app/desktop/views/components/settings.profile.vue b/src/client/app/desktop/views/components/settings.profile.vue
index 0f53941b31..d47b5b224b 100644
--- a/src/client/app/desktop/views/components/settings.profile.vue
+++ b/src/client/app/desktop/views/components/settings.profile.vue
@@ -19,7 +19,7 @@
 	</label>
 	<label class="ui from group">
 		<p>%i18n:@birthday%</p>
-		<el-date-picker v-model="birthday" type="date" value-format="yyyy-MM-dd"/>
+		<input type="date" v-model="birthday"/>
 	</label>
 	<button class="ui primary" @click="save">%i18n:@save%</button>
 	<section>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 1973acc839..709715e598 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -87,13 +87,11 @@
 				<span>%i18n:@enable-sounds-desc%</span>
 			</mk-switch>
 			<label>%i18n:@volume%</label>
-			<el-slider
+			<input type="range"
 				v-model="soundVolume"
-				:show-input="true"
-				:format-tooltip="v => `${v * 100}%`"
 				:disabled="!enableSounds"
-				:max="1"
-				:step="0.1"
+				max="1"
+				step="0.1"
 			/>
 			<button class="ui button" @click="soundTest">%fa:volume-up% %i18n:@test%</button>
 		</section>
@@ -105,14 +103,15 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@language%</h1>
-			<el-select v-model="lang" placeholder="%i18n:@pick-language%">
-				<el-option-group label="%i18n:@recommended%">
-					<el-option label="%i18n:@auto%" :value="null"/>
-				</el-option-group>
-				<el-option-group label="%i18n:@specify-language%">
-					<el-option v-for="x in langs" :label="x[1]" :value="x[0]" :key="x[0]"/>
-				</el-option-group>
-			</el-select>
+			<select v-model="lang" placeholder="%i18n:@pick-language%">
+				<optgroup label="%i18n:@recommended%">
+					<option value="">%i18n:@auto%</option>
+				</optgroup>
+
+				<optgroup label="%i18n:@specify-language%">
+					<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
+				</optgroup>
+			</select>
 			<div class="none ui info">
 				<p>%fa:info-circle%%i18n:@language-desc%</p>
 			</div>
@@ -207,10 +206,6 @@
 			<mk-switch v-model="enableExperimentalFeatures" text="%i18n:@experimental%">
 				<span>%i18n:@experimental-desc%</span>
 			</mk-switch>
-			<details v-if="debug">
-				<summary>%i18n:@tools%</summary>
-				<button class="ui button block" @click="taskmngr">%i18n:@task-manager%</button>
-			</details>
 		</section>
 	</div>
 </div>
@@ -228,7 +223,6 @@ import XSignins from './settings.signins.vue';
 import XDrive from './settings.drive.vue';
 import { url, langs, version } from '../../../config';
 import checkForUpdate from '../../../common/scripts/check-for-update';
-import MkTaskManager from './taskmanager.vue';
 
 export default Vue.extend({
 	components: {
@@ -408,9 +402,6 @@ export default Vue.extend({
 		});
 	},
 	methods: {
-		taskmngr() {
-			(this as any).os.new(MkTaskManager);
-		},
 		customizeHome() {
 			this.$router.push('/i/customize-home');
 			this.$emit('done');
diff --git a/src/client/app/desktop/views/components/taskmanager.vue b/src/client/app/desktop/views/components/taskmanager.vue
deleted file mode 100644
index 1f1385add8..0000000000
--- a/src/client/app/desktop/views/components/taskmanager.vue
+++ /dev/null
@@ -1,219 +0,0 @@
-<template>
-<mk-window ref="window" width="750px" height="500px" @closed="$destroy" name="TaskManager">
-	<span slot="header" :class="$style.header">%fa:stethoscope%%i18n:@title%</span>
-	<el-tabs :class="$style.content">
-		<el-tab-pane label="Requests">
-			<el-table
-				:data="os.requests"
-				style="width: 100%"
-				:default-sort="{prop: 'date', order: 'descending'}"
-			>
-				<el-table-column type="expand">
-					<template slot-scope="props">
-						<pre>{{ props.row.data }}</pre>
-						<pre>{{ props.row.res }}</pre>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="Requested at"
-					prop="date"
-					sortable
-				>
-					<template slot-scope="scope">
-						<b style="margin-right: 8px">{{ scope.row.date.getTime() }}</b>
-						<span>(<mk-time :time="scope.row.date"/>)</span>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="Name"
-				>
-					<template slot-scope="scope">
-						<b>{{ scope.row.name }}</b>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="Status"
-				>
-					<template slot-scope="scope">
-						<span>{{ scope.row.status || '(pending)' }}</span>
-					</template>
-				</el-table-column>
-			</el-table>
-		</el-tab-pane>
-
-		<el-tab-pane label="Streams">
-			<el-table
-				:data="os.connections"
-				style="width: 100%"
-			>
-				<el-table-column
-					label="Uptime"
-				>
-					<template slot-scope="scope">
-						<mk-timer v-if="scope.row.connectedAt" :time="scope.row.connectedAt"/>
-						<span v-else>-</span>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="Name"
-				>
-					<template slot-scope="scope">
-						<b>{{ scope.row.name == '' ? '[Home]' : scope.row.name }}</b>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="User"
-				>
-					<template slot-scope="scope">
-						<span>{{ scope.row.user || '(anonymous)' }}</span>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					prop="state"
-					label="State"
-				/>
-
-				<el-table-column
-					prop="in"
-					label="In"
-				/>
-
-				<el-table-column
-					prop="out"
-					label="Out"
-				/>
-			</el-table>
-		</el-tab-pane>
-
-		<el-tab-pane label="Streams (Inspect)">
-			<el-tabs type="card" style="height:50%">
-				<el-tab-pane v-for="c in os.connections" :label="c.name == '' ? '[Home]' : c.name" :key="c.id" :name="c.id" ref="connectionsTab">
-					<div style="padding: 12px 0 0 12px">
-					<el-button size="mini" @click="send(c)">Send</el-button>
-					<el-button size="mini" type="warning" @click="c.isSuspended = true" v-if="!c.isSuspended">Suspend</el-button>
-					<el-button size="mini" type="success" @click="c.isSuspended = false" v-else>Resume</el-button>
-					<el-button size="mini" type="danger" @click="c.close">Disconnect</el-button>
-				</div>
-
-					<el-table
-						:data="c.inout"
-						style="width: 100%"
-						:default-sort="{prop: 'at', order: 'descending'}"
-					>
-						<el-table-column type="expand">
-							<template slot-scope="props">
-								<pre>{{ props.row.data }}</pre>
-							</template>
-						</el-table-column>
-
-						<el-table-column
-							label="Date"
-							prop="at"
-							sortable
-						>
-							<template slot-scope="scope">
-								<b style="margin-right: 8px">{{ scope.row.at.getTime() }}</b>
-								<span>(<mk-time :time="scope.row.at"/>)</span>
-							</template>
-						</el-table-column>
-
-						<el-table-column
-							label="Type"
-						>
-							<template slot-scope="scope">
-								<span>{{ getMessageType(scope.row.data) }}</span>
-							</template>
-						</el-table-column>
-
-						<el-table-column
-							label="Incoming / Outgoing"
-							prop="type"
-						/>
-					</el-table>
-				</el-tab-pane>
-			</el-tabs>
-		</el-tab-pane>
-
-		<el-tab-pane label="Windows">
-			<el-table
-				:data="Array.from(os.windows.windows)"
-				style="width: 100%"
-			>
-				<el-table-column
-					label="Name"
-				>
-					<template slot-scope="scope">
-						<b>{{ scope.row.name || '(unknown)' }}</b>
-					</template>
-				</el-table-column>
-
-				<el-table-column
-					label="Operations"
-				>
-					<template slot-scope="scope">
-						<el-button size="mini" type="danger" @click="scope.row.close">Close</el-button>
-					</template>
-				</el-table-column>
-			</el-table>
-		</el-tab-pane>
-	</el-tabs>
-</mk-window>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-
-export default Vue.extend({
-	mounted() {
-		(this as any).os.windows.on('added', this.onWindowsChanged);
-		(this as any).os.windows.on('removed', this.onWindowsChanged);
-	},
-	beforeDestroy() {
-		(this as any).os.windows.off('added', this.onWindowsChanged);
-		(this as any).os.windows.off('removed', this.onWindowsChanged);
-	},
-	methods: {
-		getMessageType(data): string {
-			return data.type ? data.type : '-';
-		},
-		onWindowsChanged() {
-			this.$forceUpdate();
-		},
-		send(c) {
-			(this as any).apis.input({
-				title: 'Send a JSON message',
-				allowEmpty: false
-			}).then(json => {
-				c.send(JSON.parse(json));
-			});
-		}
-	}
-});
-</script>
-
-<style lang="stylus" module>
-.header
-	> [data-fa]
-		margin-right 4px
-
-.content
-	height 100%
-	overflow auto
-
-</style>
-
-<style>
-.el-tabs__header {
-	margin-bottom: 0 !important;
-}
-
-.el-tabs__item {
-	padding: 0 20px !important;
-}
-</style>
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 82924e92e3..dfc3a819b8 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -7,9 +7,6 @@ import Vuex from 'vuex';
 import VueRouter from 'vue-router';
 import * as TreeView from 'vue-json-tree-view';
 import VAnimateCss from 'v-animate-css';
-import Element from 'element-ui';
-import ElementLocaleEn from 'element-ui/lib/locale/lang/en';
-import ElementLocaleJa from 'element-ui/lib/locale/lang/ja';
 import VModal from 'vue-js-modal';
 
 import App from './app.vue';
@@ -17,18 +14,10 @@ import checkForUpdate from './common/scripts/check-for-update';
 import MiOS, { API } from './mios';
 import { version, codename, lang } from './config';
 
-let elementLocale;
-switch (lang) {
-	case 'ja-JP': elementLocale = ElementLocaleJa; break;
-	case 'en-US': elementLocale = ElementLocaleEn; break;
-	default: elementLocale = ElementLocaleEn; break;
-}
-
 Vue.use(Vuex);
 Vue.use(VueRouter);
 Vue.use(TreeView);
 Vue.use(VAnimateCss);
-Vue.use(Element, { locale: elementLocale });
 Vue.use(VModal);
 
 // Register global directives
diff --git a/src/client/app/mobile/script.ts b/src/client/app/mobile/script.ts
index 5b9d45462a..9412c85980 100644
--- a/src/client/app/mobile/script.ts
+++ b/src/client/app/mobile/script.ts
@@ -6,7 +6,6 @@ import VueRouter from 'vue-router';
 
 // Style
 import './style.styl';
-import '../../element.scss';
 
 import init from '../init';
 
diff --git a/src/client/element.scss b/src/client/element.scss
deleted file mode 100644
index 917198e024..0000000000
--- a/src/client/element.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Element variable definitons */
-/* SEE: http://element.eleme.io/#/en-US/component/custom-theme */
-
-@import '../const.json';
-
-/* theme color */
-$--color-primary: $themeColor;
-
-/* icon font path, required */
-$--font-path: '~element-ui/lib/theme-chalk/fonts';
-
-@import "~element-ui/packages/theme-chalk/src/index";
diff --git a/webpack.config.ts b/webpack.config.ts
index a50d6c40cc..325923084e 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -7,7 +7,6 @@ import * as webpack from 'webpack';
 import chalk from 'chalk';
 import rndstr from 'rndstr';
 const { VueLoaderPlugin } = require('vue-loader');
-const jsonImporter = require('node-sass-json-importer');
 const minifyHtml = require('html-minifier').minify;
 const WebpackOnBuildPlugin = require('on-build-webpack');
 //const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
@@ -183,22 +182,6 @@ module.exports = {
 					loader: 'stylus-loader'
 				}]
 			}]
-		}, {
-			test: /\.scss$/,
-			exclude: /node_modules/,
-			use: [{
-				loader: 'style-loader'
-			}, {
-				loader: 'css-loader',
-				options: {
-					minimize: true
-				}
-			}, {
-				loader: 'sass-loader',
-				options: {
-					importer: jsonImporter(),
-				}
-			}]
 		}, {
 			test: /\.css$/,
 			use: [{

From 25b0a93acdec893ebd4f32b51ad0b7bc5df1350a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 21:53:04 +0900
Subject: [PATCH 251/539] :v:

---
 src/client/app/common/views/components/menu.vue        |  2 +-
 src/client/app/common/views/components/note-menu.vue   |  8 ++++----
 .../app/common/views/components/reaction-picker.vue    |  4 ++--
 .../app/common/views/components/visibility-chooser.vue |  4 ++--
 src/client/app/common/views/directives/autocomplete.ts |  2 +-
 .../app/desktop/views/components/context-menu.vue      |  2 +-
 src/client/app/desktop/views/components/dialog.vue     |  2 +-
 .../app/desktop/views/components/friends-maker.vue     |  2 +-
 .../desktop/views/components/media-image-dialog.vue    |  2 +-
 .../desktop/views/components/media-video-dialog.vue    |  2 +-
 .../app/desktop/views/components/ui-notification.vue   |  2 +-
 .../app/desktop/views/components/user-preview.vue      |  2 +-
 src/client/app/desktop/views/components/window.vue     |  4 ++--
 src/client/app/init.ts                                 | 10 +++++++---
 src/client/app/mobile/views/components/dialog.vue      |  2 +-
 .../app/mobile/views/components/drive-file-chooser.vue |  6 +++---
 .../mobile/views/components/drive-folder-chooser.vue   |  4 ++--
 .../app/mobile/views/components/friends-maker.vue      |  2 +-
 src/client/app/mobile/views/components/notify.vue      |  2 +-
 .../app/mobile/views/components/post-form-dialog.vue   |  2 +-
 20 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index e99bfcbd26..fba7e235e0 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -108,7 +108,7 @@ export default Vue.extend({
 				easing: 'easeInBack',
 				complete: () => {
 					this.$emit('closed');
-					this.$destroy();
+					this.destroyDom();
 				}
 			});
 		}
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index 0b0609ac4e..c9912fb1e2 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -64,7 +64,7 @@ export default Vue.extend({
 			(this as any).api('i/pin', {
 				noteId: this.note.id
 			}).then(() => {
-				this.$destroy();
+				this.destroyDom();
 			});
 		},
 
@@ -73,7 +73,7 @@ export default Vue.extend({
 			(this as any).api('notes/delete', {
 				noteId: this.note.id
 			}).then(() => {
-				this.$destroy();
+				this.destroyDom();
 			});
 		},
 
@@ -81,13 +81,13 @@ export default Vue.extend({
 			(this as any).api('notes/favorites/create', {
 				noteId: this.note.id
 			}).then(() => {
-				this.$destroy();
+				this.destroyDom();
 			});
 		},
 
 		closed() {
 			this.$nextTick(() => {
-				this.$destroy();
+				this.destroyDom();
 			});
 		}
 	}
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index a455afbf7d..a4828c987b 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -95,7 +95,7 @@ export default Vue.extend({
 				reaction: reaction
 			}).then(() => {
 				if (this.cb) this.cb();
-				this.$destroy();
+				this.destroyDom();
 			});
 		},
 		onMouseover(e) {
@@ -120,7 +120,7 @@ export default Vue.extend({
 				scale: 0.5,
 				duration: 200,
 				easing: 'easeInBack',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		}
 	}
diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index 7d90b3520c..1830b1832e 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -101,7 +101,7 @@ export default Vue.extend({
 				this.$store.commit('device/setVisibility', visibility);
 			}
 			this.$emit('chosen', visibility);
-			this.$destroy();
+			this.destroyDom();
 		},
 		close() {
 			(this.$refs.backdrop as any).style.pointerEvents = 'none';
@@ -119,7 +119,7 @@ export default Vue.extend({
 				scale: 0.5,
 				duration: 200,
 				easing: 'easeInBack',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		}
 	}
diff --git a/src/client/app/common/views/directives/autocomplete.ts b/src/client/app/common/views/directives/autocomplete.ts
index 26bc13871d..f7f8e9bf16 100644
--- a/src/client/app/common/views/directives/autocomplete.ts
+++ b/src/client/app/common/views/directives/autocomplete.ts
@@ -167,7 +167,7 @@ class Autocomplete {
 	private close() {
 		if (this.suggestion == null) return;
 
-		this.suggestion.$destroy();
+		this.suggestion.destroyDom();
 		this.suggestion = null;
 
 		this.textarea.focus();
diff --git a/src/client/app/desktop/views/components/context-menu.vue b/src/client/app/desktop/views/components/context-menu.vue
index afb6838eb6..49aeac143f 100644
--- a/src/client/app/desktop/views/components/context-menu.vue
+++ b/src/client/app/desktop/views/components/context-menu.vue
@@ -64,7 +64,7 @@ export default Vue.extend({
 			});
 
 			this.$emit('closed');
-			this.$destroy();
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/dialog.vue b/src/client/app/desktop/views/components/dialog.vue
index aff21c1754..bbb1e0030c 100644
--- a/src/client/app/desktop/views/components/dialog.vue
+++ b/src/client/app/desktop/views/components/dialog.vue
@@ -78,7 +78,7 @@ export default Vue.extend({
 				scale: 0.8,
 				duration: 300,
 				easing: [ 0.5, -0.5, 1, 0.5 ],
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		},
 		onBgClick() {
diff --git a/src/client/app/desktop/views/components/friends-maker.vue b/src/client/app/desktop/views/components/friends-maker.vue
index 7dfd9e4359..4e8a212b00 100644
--- a/src/client/app/desktop/views/components/friends-maker.vue
+++ b/src/client/app/desktop/views/components/friends-maker.vue
@@ -14,7 +14,7 @@
 	<p class="empty" v-if="!fetching && users.length == 0">%i18n:@empty%</p>
 	<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@fetching%<mk-ellipsis/></p>
 	<a class="refresh" @click="refresh">%i18n:@refresh%</a>
-	<button class="close" @click="$destroy()" title="%i18n:@close%">%fa:times%</button>
+	<button class="close" @click="destroyDom()" title="%i18n:@close%">%fa:times%</button>
 </div>
 </template>
 
diff --git a/src/client/app/desktop/views/components/media-image-dialog.vue b/src/client/app/desktop/views/components/media-image-dialog.vue
index 026522d907..89a340d3ae 100644
--- a/src/client/app/desktop/views/components/media-image-dialog.vue
+++ b/src/client/app/desktop/views/components/media-image-dialog.vue
@@ -26,7 +26,7 @@ export default Vue.extend({
 				opacity: 0,
 				duration: 100,
 				easing: 'linear',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/components/media-video-dialog.vue b/src/client/app/desktop/views/components/media-video-dialog.vue
index 959cefa42c..03c93c8939 100644
--- a/src/client/app/desktop/views/components/media-video-dialog.vue
+++ b/src/client/app/desktop/views/components/media-video-dialog.vue
@@ -28,7 +28,7 @@ export default Vue.extend({
 				opacity: 0,
 				duration: 100,
 				easing: 'linear',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/components/ui-notification.vue b/src/client/app/desktop/views/components/ui-notification.vue
index 68413914c0..7519124870 100644
--- a/src/client/app/desktop/views/components/ui-notification.vue
+++ b/src/client/app/desktop/views/components/ui-notification.vue
@@ -27,7 +27,7 @@ export default Vue.extend({
 					translateY: -64,
 					duration: 500,
 					easing: 'easeInElastic',
-					complete: () => this.$destroy()
+					complete: () => this.destroyDom()
 				});
 			}, 6000);
 		});
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index 1e1755ec3c..f6d6d68a7f 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -75,7 +75,7 @@ export default Vue.extend({
 				'margin-top': '-8px',
 				duration: 200,
 				easing: 'easeOutQuad',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index ec044ad27e..30f0ec558f 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -106,7 +106,7 @@ export default Vue.extend({
 
 	mounted() {
 		if (this.preventMount) {
-			this.$destroy();
+			this.destroyDom();
 			return;
 		}
 
@@ -190,7 +190,7 @@ export default Vue.extend({
 			});
 
 			setTimeout(() => {
-				this.$destroy();
+				this.destroyDom();
 				this.$emit('closed');
 			}, 300);
 		},
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index dfc3a819b8..db3852da60 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -31,9 +31,13 @@ require('./common/views/widgets');
 require('./common/views/filters');
 
 Vue.mixin({
-	destroyed(this: any) {
-		if (this.$el.parentNode) {
-			this.$el.parentNode.removeChild(this.$el);
+	methods: {
+		destroyDom() {
+			this.$destroy();
+
+			if (this.$el.parentNode) {
+				this.$el.parentNode.removeChild(this.$el);
+			}
 		}
 	}
 });
diff --git a/src/client/app/mobile/views/components/dialog.vue b/src/client/app/mobile/views/components/dialog.vue
index 9ee01cb782..6a0d74c752 100644
--- a/src/client/app/mobile/views/components/dialog.vue
+++ b/src/client/app/mobile/views/components/dialog.vue
@@ -78,7 +78,7 @@ export default Vue.extend({
 				scale: 0.8,
 				duration: 300,
 				easing: [ 0.5, -0.5, 1, 0.5 ],
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		},
 		onBgClick() {
diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue
index aaa707d8a7..92ac211af2 100644
--- a/src/client/app/mobile/views/components/drive-file-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-file-chooser.vue
@@ -31,15 +31,15 @@ export default Vue.extend({
 		},
 		onSelected(file) {
 			this.$emit('selected', file);
-			this.$destroy();
+			this.destroyDom();
 		},
 		cancel() {
 			this.$emit('canceled');
-			this.$destroy();
+			this.destroyDom();
 		},
 		ok() {
 			this.$emit('selected', this.files);
-			this.$destroy();
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/mobile/views/components/drive-folder-chooser.vue b/src/client/app/mobile/views/components/drive-folder-chooser.vue
index 7934fb7816..6d3fba1efd 100644
--- a/src/client/app/mobile/views/components/drive-folder-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-folder-chooser.vue
@@ -19,11 +19,11 @@ export default Vue.extend({
 	methods: {
 		cancel() {
 			this.$emit('canceled');
-			this.$destroy();
+			this.destroyDom();
 		},
 		ok() {
 			this.$emit('selected', (this.$refs.browser as any).folder);
-			this.$destroy();
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/mobile/views/components/friends-maker.vue b/src/client/app/mobile/views/components/friends-maker.vue
index e0461d2bc2..dbb82f4b18 100644
--- a/src/client/app/mobile/views/components/friends-maker.vue
+++ b/src/client/app/mobile/views/components/friends-maker.vue
@@ -47,7 +47,7 @@ export default Vue.extend({
 			this.fetch();
 		},
 		close() {
-			this.$destroy();
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/mobile/views/components/notify.vue b/src/client/app/mobile/views/components/notify.vue
index 307fb08cfa..5f94b91ddd 100644
--- a/src/client/app/mobile/views/components/notify.vue
+++ b/src/client/app/mobile/views/components/notify.vue
@@ -32,7 +32,7 @@ export default Vue.extend({
 					[this.pos]: `-${this.$el.offsetHeight}px`,
 					duration: 500,
 					easing: 'easeOutQuad',
-					complete: () => this.$destroy()
+					complete: () => this.destroyDom()
 				});
 			}, 6000);
 		});
diff --git a/src/client/app/mobile/views/components/post-form-dialog.vue b/src/client/app/mobile/views/components/post-form-dialog.vue
index ec37386512..15b36db945 100644
--- a/src/client/app/mobile/views/components/post-form-dialog.vue
+++ b/src/client/app/mobile/views/components/post-form-dialog.vue
@@ -79,7 +79,7 @@ export default Vue.extend({
 				translateY: 16,
 				duration: 300,
 				easing: 'easeOutQuad',
-				complete: () => this.$destroy()
+				complete: () => this.destroyDom()
 			});
 		},
 

From ce659f99265e9c7fb7a4a0364b09754fe65505f4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 15 Sep 2018 22:03:34 +0900
Subject: [PATCH 252/539] 8.41.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 7b81c925b2..bd156e6c23 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.40.0",
-	"clientVersion": "1.0.9711",
+	"version": "8.41.0",
+	"clientVersion": "1.0.9716",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 952a49f7496c5c6a6dae8998e8d42ea53281db2e Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Sat, 15 Sep 2018 22:22:41 +0900
Subject: [PATCH 253/539] =?UTF-8?q?revert=20=E3=83=87=E3=82=B9=E3=82=AF?=
 =?UTF-8?q?=E3=83=88=E3=83=83=E3=83=97=E3=81=AE=E5=8B=95=E7=94=BB=E5=9F=8B?=
 =?UTF-8?q?=E3=82=81=E8=BE=BC=E3=81=BF=E3=82=92=E5=BB=83=E6=AD=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../desktop/views/components/media-video.vue  | 26 +++++++++++++------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/client/app/desktop/views/components/media-video.vue b/src/client/app/desktop/views/components/media-video.vue
index 0a374acb8f..8af5f9b07e 100644
--- a/src/client/app/desktop/views/components/media-video.vue
+++ b/src/client/app/desktop/views/components/media-video.vue
@@ -6,11 +6,19 @@
 	</div>
 </div>
 <div class="vwxdhznewyashiknzolsoihtlpicqepe" v-else>
+	<video class="video"
+		:src="video.url"
+		:title="video.name"
+		controls
+		@dblclick.prevent="onClick"
+		ref="video"
+		v-if="inlinePlayable" />
 	<a class="thumbnail"
 		:href="video.url"
 		:style="imageStyle"
 		@click.prevent="onClick"
-		:title="video.name">
+		:title="video.name"
+		v-else>
 		%fa:R play-circle%
 	</a>
 </div>
@@ -19,13 +27,15 @@
 <script lang="ts">
 import Vue from 'vue';
 import MkMediaVideoDialog from './media-video-dialog.vue';
-
 export default Vue.extend({
 	props: {
 		video: {
 			type: Object,
 			required: true
 		},
+		inlinePlayable: {
+			default: false
+		},
 		hide: {
 			type: Boolean,
 			default: true
@@ -57,32 +67,32 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .vwxdhznewyashiknzolsoihtlpicqepe
+	.video
+		display block
+		width 100%
+		height 100%
+		border-radius 4px
 	.thumbnail
 		display flex
 		justify-content center
 		align-items center
 		font-size 3.5em
-
 		cursor zoom-in
 		overflow hidden
 		background-position center
 		background-size cover
 		width 100%
 		height 100%
-
 .uofhebxjdgksfmltszlxurtjnjjsvioh
 	display flex
 	justify-content center
 	align-items center
 	background #111
 	color #fff
-
 	> div
 		display table-cell
 		text-align center
 		font-size 12px
-
-		> *
+		> b
 			display block
-
 </style>

From 7ebee09f740d885f5a0829d86fb4725dd1a15b72 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sat, 15 Sep 2018 13:57:29 +0000
Subject: [PATCH 254/539] fix(package): update vue-cropperjs to version 2.2.2

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index bd156e6c23..f718f16266 100644
--- a/package.json
+++ b/package.json
@@ -206,7 +206,7 @@
 		"v-animate-css": "0.0.2",
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
-		"vue-cropperjs": "2.2.1",
+		"vue-cropperjs": "2.2.2",
 		"vue-js-modal": "1.3.26",
 		"vue-json-tree-view": "2.1.4",
 		"vue-loader": "15.4.2",

From 7d768875176e38be394806376997055ee387f56f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 03:46:53 +0900
Subject: [PATCH 255/539] =?UTF-8?q?=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC?=
 =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E7=84=A1=E5=8A=B9=E3=81=AB?=
 =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3?=
 =?UTF-8?q?=E3=82=92=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                           | 1 +
 src/client/app/common/views/components/trends.vue           | 6 ++----
 src/client/app/desktop/views/components/notes.vue           | 4 ++--
 src/client/app/desktop/views/components/notifications.vue   | 4 ++--
 src/client/app/desktop/views/components/settings.vue        | 6 ++++++
 .../app/desktop/views/pages/deck/deck.notifications.vue     | 6 ++----
 src/client/app/mobile/views/components/notes.vue            | 4 ++--
 src/client/app/mobile/views/components/notifications.vue    | 6 ++----
 src/client/app/mobile/views/pages/settings.vue              | 6 ++++++
 src/client/app/store.ts                                     | 1 +
 10 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 72dc88b7b3..c5ec3fd588 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -119,6 +119,7 @@ common:
   always-show-nsfw: "常に閲覧注意のメディアを表示する"
   always-mark-nsfw: "常にメディアを閲覧注意として投稿"
   show-full-acct: "ユーザー名のホストを省略しない"
+  enable-animations: "アニメーションを使用"
   this-setting-is-this-device-only: "このデバイスのみ"
 
   do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
diff --git a/src/client/app/common/views/components/trends.vue b/src/client/app/common/views/components/trends.vue
index 627edc3876..0042dbe853 100644
--- a/src/client/app/common/views/components/trends.vue
+++ b/src/client/app/common/views/components/trends.vue
@@ -3,8 +3,7 @@
 	<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
 	<p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<!-- <transition-group v-else tag="div" name="chart"> -->
-	<div>
+	<transition-group v-else tag="div" name="chart">
 		<div v-for="stat in stats" :key="stat.tag">
 			<div class="tag">
 				<router-link :to="`/tags/${ encodeURIComponent(stat.tag) }`" :title="stat.tag">#{{ stat.tag }}</router-link>
@@ -12,8 +11,7 @@
 			</div>
 			<x-chart class="chart" :src="stat.chart"/>
 		</div>
-	</div>
-	<!-- </transition-group> -->
+	</transition-group>
 </div>
 </template>
 
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 26aa0c8dea..1d8c3fff36 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -10,7 +10,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<transition-group name="mk-notes" class="notes transition" tag="div">
+	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@@ -18,7 +18,7 @@
 				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</transition-group>
+	</component>
 
 	<footer v-if="more">
 		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 9d0e73adef..0debd3f824 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -2,7 +2,7 @@
 <div class="mk-notifications">
 	<div class="notifications" v-if="notifications.length != 0">
 		<!-- トランジションを有効にするとなぜかメモリリークする -->
-		<transition-group name="mk-notifications" class="transition" tag="div">
+		<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition" tag="div">
 			<template v-for="(notification, i) in _notifications">
 				<div class="notification" :class="notification.type" :key="notification.id">
 					<mk-time :time="notification.createdAt"/>
@@ -96,7 +96,7 @@
 					<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 				</p>
 			</template>
-		</transition-group>
+		</component>
 	</div>
 	<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 		<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 709715e598..c46f6cfab1 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -60,6 +60,7 @@
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
+				<mk-switch v-model="animations" text="%i18n:common.enable-animations%"/>
 				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
 				<mk-switch v-model="showFullAcct" text="%i18n:common.show-full-acct%"/>
 				<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
@@ -246,6 +247,11 @@ export default Vue.extend({
 		};
 	},
 	computed: {
+		animations: {
+			get() { return this.$store.state.device.animations; },
+			set(value) { this.$store.commit('device/set', { key: 'animations', value }); }
+		},
+
 		apiViaStream: {
 			get() { return this.$store.state.device.apiViaStream; },
 			set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index fcb74b9140..18d9a21c64 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -1,8 +1,7 @@
 <template>
 <div class="oxynyeqmfvracxnglgulyqfgqxnxmehl">
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<!--<transition-group name="mk-notifications" class="transition notifications">-->
-	<div class="notifications">
+	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
 		<template v-for="(notification, i) in _notifications">
 			<x-notification class="notification" :notification="notification" :key="notification.id"/>
 			<p class="date" v-if="i != notifications.length - 1 && notification._date != _notifications[i + 1]._date" :key="notification.id + '-time'">
@@ -10,8 +9,7 @@
 				<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</div>
-	<!--</transition-group>-->
+	</component>
 	<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 		<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
 	</button>
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 17806f062e..f2ad93bebf 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -14,7 +14,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<transition-group name="mk-notes" class="transition" tag="div">
+	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@@ -22,7 +22,7 @@
 				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</transition-group>
+	</component>
 
 	<footer v-if="more">
 		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue
index 9f20c3fb22..95c85beaca 100644
--- a/src/client/app/mobile/views/components/notifications.vue
+++ b/src/client/app/mobile/views/components/notifications.vue
@@ -1,8 +1,7 @@
 <template>
 <div class="mk-notifications">
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<!-- <transition-group name="mk-notifications" class="transition notifications"> -->
-	<div class="transition notifications">
+	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
 		<template v-for="(notification, i) in _notifications">
 			<mk-notification :notification="notification" :key="notification.id"/>
 			<p class="date" :key="notification.id + '_date'" v-if="i != notifications.length - 1 && notification._date != _notifications[i + 1]._date">
@@ -10,8 +9,7 @@
 				<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 			</p>
 		</template>
-	</div>
-	<!-- </transition-group> -->
+	</component>
 
 	<button class="more" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 		<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 9b0e521a4f..c14a683f23 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -13,6 +13,7 @@
 				<section>
 					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 					<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
+					<ui-switch v-model="animations">%i18n:common.enable-animations% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
 					<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 					<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
 					<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
@@ -168,6 +169,11 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
 		},
 
+		animations: {
+			get() { return this.$store.state.device.animations; },
+			set(value) { this.$store.commit('device/set', { key: 'animations', value }); }
+		},
+
 		alwaysShowNsfw: {
 			get() { return this.$store.state.device.alwaysShowNsfw; },
 			set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 997bddc5cc..a7d9bd4560 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -38,6 +38,7 @@ const defaultSettings = {
 };
 
 const defaultDeviceSettings = {
+	animations: true,
 	apiViaStream: true,
 	autoPopout: false,
 	darkmode: false,

From 2e3d0d3435ea7597ba22ba718f1189ecf3e44843 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 03:48:16 +0900
Subject: [PATCH 256/539] Fix bug

---
 src/client/app/mobile/views/components/post-form.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index e53ba48ffb..024c73674c 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -59,7 +59,7 @@ import MkVisibilityChooser from '../../../common/views/components/visibility-cho
 import getFace from '../../../common/scripts/get-face';
 import parse from '../../../../../mfm/parse';
 import { host } from '../../../config';
-import { erase } from '../../../../../prelude/array';
+import { erase, unique } from '../../../../../prelude/array';
 import { length } from 'stringz';
 import parseAcct from '../../../../../misc/acct/parse';
 

From 2a96429be81460036cea60cf57f88f2e9a77d8ba Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:21:48 +0900
Subject: [PATCH 257/539] =?UTF-8?q?=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?=
 =?UTF-8?q?=E3=82=84=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3=E8=AA=BF=E6=95=B4?=
 =?UTF-8?q?=E3=81=AA=E3=81=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../common/views/components/media-banner.vue  | 26 +++++++++----------
 .../common/views/components/media-list.vue    | 22 +++++++++++-----
 2 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 5c83925a32..0693143f02 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -1,11 +1,11 @@
 <template>
 <div class="mk-media-banner">
-	<div class="mk-media-banner-sensitive" v-if="media.isSensitive && hide" @click="hide = false">
-		<span class="mk-media-banner-icon">%fa:exclamation-triangle%</span>
+	<div class="sensitive" v-if="media.isSensitive && hide" @click="hide = false">
+		<span class="icon">%fa:exclamation-triangle%</span>
 		<b>%i18n:@sensitive%</b>
 		<span>%i18n:@click-to-show%</span>
 	</div>
-	<div class="mk-media-banner-audio" v-else-if="media.type.startsWith('audio')">
+	<div class="audio" v-else-if="media.type.startsWith('audio')">
 		<audio class="audio"
 			:src="media.url"
 			:title="media.name"
@@ -13,12 +13,12 @@
 			ref="audio"
 			preload="metadata" />
 	</div>
-	<a class="mk-media-banner-download" v-else
+	<a class="download" v-else
 		:href="media.url"
 		:title="media.name"
 		:download="media.name"
 	>
-		<span class="mk-media-banner-icon">%fa:download%</span>
+		<span class="icon">%fa:download%</span>
 		<b>{{ media.name }}</b>
 	</a>
 </div>
@@ -48,40 +48,38 @@ root(isDark)
 	margin-top 4px
 	overflow hidden
 
-	.mk-media-banner-download,
-	.mk-media-banner-sensitive
+	> .download,
+	> .sensitive
 		display flex
 		align-items center
 		font-size 12px
-		padding .2em .6em
+		padding 8px 12px
 		white-space nowrap
 
 		> *
 			display block
 
 		> b
-			flex-shrink 2147483647
 			overflow hidden
 			text-overflow ellipsis
 
 		> *:not(:last-child)
 			margin-right .2em
 
-		> .mk-media-banner-icon
+		> .icon
 			font-size 1.6em
 
-	.mk-media-banner-download
+	> .download
 		background isDark ? #21242d : #f7f7f7
 
-	.mk-media-banner-sensitive
+	> .sensitive
 		background #111
 		color #fff
 
-	.mk-media-banner-audio
+	> .audio
 		.audio
 			display block
 			width 100%
-			height 100%
 
 .mk-media-banner[data-darkmode]
 	root(true)
diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index e949c063ab..b4b7d8f87f 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -1,10 +1,10 @@
 <template>
 <div class="mk-media-list">
-	<template v-for="media in mediaList">
-		<mk-media-banner :media="media" :key="media.id" v-if="!media.type.startsWith('image') && !media.type.startsWith('video')"/>
+	<template v-for="media in mediaList.filter(media => !previewable(media))">
+		<mk-media-banner :media="media" :key="media.id"/>
 	</template>
-	<div class="mk-media-list-fixed" v-if="mediaList.filter(media => media.type.startsWith('image') || media.type.startsWith('video')).length > 0">
-		<div :data-count="mediaList.filter(media => media.type.startsWith('video') || media.type.startsWith('image')).length" ref="grid">
+	<div v-if="mediaList.filter(media => previewable(media)).length > 0" class="gird-container">
+		<div :data-count="mediaList.filter(media => previewable(media)).length" ref="grid">
 			<template v-for="media in mediaList">
 				<mk-media-video :video="media" :key="media.id" v-if="media.type.startsWith('video')"/>
 				<mk-media-image :image="media" :key="media.id" v-else-if="media.type.startsWith('image')" :raw="raw"/>
@@ -27,15 +27,23 @@ export default Vue.extend({
 		}
 	},
 	mounted() {
-		// for Safari bug
-		this.$refs.grid.style.height = this.$refs.grid.clientHeight ? `${this.$refs.grid.clientHeight}px` : '128px';
+		//#region for Safari bug
+		if (this.$refs.grid) {
+			this.$refs.grid.style.height = this.$refs.grid.clientHeight ? `${this.$refs.grid.clientHeight}px` : '128px';
+		}
+		//#endregion
+	},
+	methods: {
+		previewable(file) {
+			return file.type.startsWith('video') || file.type.startsWith('image');
+		}
 	}
 });
 </script>
 
 <style lang="stylus" scoped>
 .mk-media-list
-	> .mk-media-list-fixed
+	> .gird-container
 		width 100%
 		margin-top 4px
 

From 8d24fcba6ab18ef03127f8d95eb87ce45bb005d7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:26:01 +0900
Subject: [PATCH 258/539] :v:

---
 src/client/app/common/views/components/index.ts       | 2 --
 src/client/app/common/views/components/media-list.vue | 6 +++++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 21af4ec846..6f8152cea2 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -20,7 +20,6 @@ import reactionsViewer from './reactions-viewer.vue';
 import time from './time.vue';
 import timer from './timer.vue';
 import mediaList from './media-list.vue';
-import mediaBanner from './media-banner.vue';
 import uploader from './uploader.vue';
 import specialMessage from './special-message.vue';
 import streamIndicator from './stream-indicator.vue';
@@ -64,7 +63,6 @@ Vue.component('mk-reactions-viewer', reactionsViewer);
 Vue.component('mk-time', time);
 Vue.component('mk-timer', timer);
 Vue.component('mk-media-list', mediaList);
-Vue.component('mk-media-banner', mediaBanner);
 Vue.component('mk-uploader', uploader);
 Vue.component('mk-special-message', specialMessage);
 Vue.component('mk-stream-indicator', streamIndicator);
diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue
index b4b7d8f87f..d83d6f85cd 100644
--- a/src/client/app/common/views/components/media-list.vue
+++ b/src/client/app/common/views/components/media-list.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="mk-media-list">
 	<template v-for="media in mediaList.filter(media => !previewable(media))">
-		<mk-media-banner :media="media" :key="media.id"/>
+		<x-banner :media="media" :key="media.id"/>
 	</template>
 	<div v-if="mediaList.filter(media => previewable(media)).length > 0" class="gird-container">
 		<div :data-count="mediaList.filter(media => previewable(media)).length" ref="grid">
@@ -16,8 +16,12 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import XBanner from './media-banner.vue';
 
 export default Vue.extend({
+	components: {
+		XBanner
+	},
 	props: {
 		mediaList: {
 			required: true

From a680bcda1fdb6f0658fea1c99cc115ce10e190c5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:27:10 +0900
Subject: [PATCH 259/539] Fix

---
 src/client/app/desktop/views/components/media-video.vue | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/client/app/desktop/views/components/media-video.vue b/src/client/app/desktop/views/components/media-video.vue
index 8af5f9b07e..d2752b0c95 100644
--- a/src/client/app/desktop/views/components/media-video.vue
+++ b/src/client/app/desktop/views/components/media-video.vue
@@ -27,6 +27,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import MkMediaVideoDialog from './media-video-dialog.vue';
+
 export default Vue.extend({
 	props: {
 		video: {
@@ -72,6 +73,7 @@ export default Vue.extend({
 		width 100%
 		height 100%
 		border-radius 4px
+
 	.thumbnail
 		display flex
 		justify-content center
@@ -83,16 +85,19 @@ export default Vue.extend({
 		background-size cover
 		width 100%
 		height 100%
+
 .uofhebxjdgksfmltszlxurtjnjjsvioh
 	display flex
 	justify-content center
 	align-items center
 	background #111
 	color #fff
+
 	> div
 		display table-cell
 		text-align center
 		font-size 12px
+
 		> b
 			display block
 </style>

From 19152c28cb88eee42ef820242f47deeb9d1c63d8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:31:55 +0900
Subject: [PATCH 260/539] Fix bug

---
 .../app/common/views/components/media-banner.vue  |  9 +++++----
 .../app/desktop/views/components/media-image.vue  |  9 +++++----
 .../app/desktop/views/components/media-video.vue  |  9 +++++----
 .../app/mobile/views/components/media-image.vue   |  9 +++++----
 .../app/mobile/views/components/media-video.vue   | 15 +++++++++------
 5 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 0693143f02..211dbf0208 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -32,11 +32,12 @@ export default Vue.extend({
 		media: {
 			type: Object,
 			required: true
-		},
-		hide: {
-			type: Boolean,
-			default: true
 		}
+	},
+	data() {
+		return {
+			hide: true
+		};
 	}
 })
 </script>
diff --git a/src/client/app/desktop/views/components/media-image.vue b/src/client/app/desktop/views/components/media-image.vue
index 3cff8cfc04..f9ab188ca5 100644
--- a/src/client/app/desktop/views/components/media-image.vue
+++ b/src/client/app/desktop/views/components/media-image.vue
@@ -27,12 +27,13 @@ export default Vue.extend({
 		},
 		raw: {
 			default: false
-		},
-		hide: {
-			type: Boolean,
-			default: true
 		}
 	},
+	data() {
+		return {
+			hide: true
+		};
+	},
 	computed: {
 		style(): any {
 			return {
diff --git a/src/client/app/desktop/views/components/media-video.vue b/src/client/app/desktop/views/components/media-video.vue
index d2752b0c95..1ff762abc2 100644
--- a/src/client/app/desktop/views/components/media-video.vue
+++ b/src/client/app/desktop/views/components/media-video.vue
@@ -36,12 +36,13 @@ export default Vue.extend({
 		},
 		inlinePlayable: {
 			default: false
-		},
-		hide: {
-			type: Boolean,
-			default: true
 		}
 	},
+	data() {
+		return {
+			hide: true
+		};
+	},
 	computed: {
 		imageStyle(): any {
 			return {
diff --git a/src/client/app/mobile/views/components/media-image.vue b/src/client/app/mobile/views/components/media-image.vue
index e38cef06ba..652a2ad3a4 100644
--- a/src/client/app/mobile/views/components/media-image.vue
+++ b/src/client/app/mobile/views/components/media-image.vue
@@ -19,12 +19,13 @@ export default Vue.extend({
 		},
 		raw: {
 			default: false
-		},
-		hide: {
-			type: Boolean,
-			default: true
 		}
 	},
+	data() {
+		return {
+			hide: true
+		};
+	}
 	computed: {
 		style(): any {
 			let url = `url(${this.image.thumbnailUrl})`;
diff --git a/src/client/app/mobile/views/components/media-video.vue b/src/client/app/mobile/views/components/media-video.vue
index aea7f41460..1e2c1ea7b0 100644
--- a/src/client/app/mobile/views/components/media-video.vue
+++ b/src/client/app/mobile/views/components/media-video.vue
@@ -15,25 +15,28 @@
 </template>
 
 <script lang="ts">
-import Vue from 'vue'
+import Vue from 'vue';
+
 export default Vue.extend({
 	props: {
 		video: {
 			type: Object,
 			required: true
-		},
-		hide: {
-			type: Boolean,
-			default: true
 		}
 	},
+	data() {
+		return {
+			hide: true
+		};
+	},
 	computed: {
 		imageStyle(): any {
 			return {
 				'background-image': `url(${this.video.url})`
 			};
 		}
-	},})
+	}
+});
 </script>
 
 <style lang="stylus" scoped>

From a61320ca8c6148f7b1b75278a7ddcf364b205009 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:34:46 +0900
Subject: [PATCH 261/539] Improve usability

---
 src/client/app/desktop/views/components/post-form.vue | 2 +-
 src/client/app/mobile/views/components/post-form.vue  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index c371940aa3..8db85aeaca 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -49,7 +49,7 @@
 	<button :class="{ posting }" class="submit" :disabled="!canPost" @click="post">
 		{{ posting ? '%i18n:@posting%' : submitText }}<mk-ellipsis v-if="posting"/>
 	</button>
-	<input ref="file" type="file" accept="image/*" multiple="multiple" tabindex="-1" @change="onChangeFile"/>
+	<input ref="file" type="file" multiple="multiple" tabindex="-1" @change="onChangeFile"/>
 	<div class="dropzone" v-if="draghover"></div>
 </div>
 </template>
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 024c73674c..1294273a2a 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -42,7 +42,7 @@
 					<span v-if="visibility === 'private'">%fa:lock%</span>
 				</button>
 			</footer>
-			<input ref="file" class="file" type="file" accept="image/*" multiple="multiple" @change="onChangeFile"/>
+			<input ref="file" class="file" type="file" multiple="multiple" @change="onChangeFile"/>
 		</div>
 	</div>
 	<div class="hashtags" v-if="recentHashtags.length > 0 && $store.state.settings.suggestRecentHashtags">

From f7228e79bbc8da4457230ca6bcae21c3afb2cf46 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 04:47:16 +0900
Subject: [PATCH 262/539] 8.42.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index f718f16266..483cef9996 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.41.0",
-	"clientVersion": "1.0.9716",
+	"version": "8.42.0",
+	"clientVersion": "1.0.9769",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From cda3635d97fbacb3fda2f36cd501b962f4fda410 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 21:40:48 +0900
Subject: [PATCH 263/539] enable-animations --> reduce-motion

---
 locales/ja-JP.yml                                         | 2 +-
 src/client/app/desktop/views/components/notes.vue         | 2 +-
 src/client/app/desktop/views/components/notifications.vue | 2 +-
 src/client/app/desktop/views/components/settings.vue      | 8 ++++----
 .../app/desktop/views/pages/deck/deck.notifications.vue   | 2 +-
 src/client/app/mobile/views/components/notes.vue          | 2 +-
 src/client/app/mobile/views/components/notifications.vue  | 2 +-
 src/client/app/mobile/views/pages/settings.vue            | 8 ++++----
 src/client/app/store.ts                                   | 2 +-
 9 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index c2a8110d92..3ced4dafe1 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -119,7 +119,7 @@ common:
   always-show-nsfw: "常に閲覧注意のメディアを表示する"
   always-mark-nsfw: "常にメディアを閲覧注意として投稿"
   show-full-acct: "ユーザー名のホストを省略しない"
-  enable-animations: "アニメーションを使用"
+  reduce-motion: "UIの動きを減らす"
   this-setting-is-this-device-only: "このデバイスのみ"
 
   do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 1d8c3fff36..ec9aa285d0 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -10,7 +10,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div">
+	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 0debd3f824..2eb80dcd01 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -2,7 +2,7 @@
 <div class="mk-notifications">
 	<div class="notifications" v-if="notifications.length != 0">
 		<!-- トランジションを有効にするとなぜかメモリリークする -->
-		<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition" tag="div">
+		<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition" tag="div">
 			<template v-for="(notification, i) in _notifications">
 				<div class="notification" :class="notification.type" :key="notification.id">
 					<mk-time :time="notification.createdAt"/>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index c46f6cfab1..3911ec5931 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -60,7 +60,7 @@
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
-				<mk-switch v-model="animations" text="%i18n:common.enable-animations%"/>
+				<mk-switch v-model="reduceMotion" text="%i18n:common.reduce-motion%"/>
 				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
 				<mk-switch v-model="showFullAcct" text="%i18n:common.show-full-acct%"/>
 				<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
@@ -247,9 +247,9 @@ export default Vue.extend({
 		};
 	},
 	computed: {
-		animations: {
-			get() { return this.$store.state.device.animations; },
-			set(value) { this.$store.commit('device/set', { key: 'animations', value }); }
+		reduceMotion: {
+			get() { return this.$store.state.device.reduceMotion; },
+			set(value) { this.$store.commit('device/set', { key: 'reduceMotion', value }); }
 		},
 
 		apiViaStream: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index 18d9a21c64..f73f221b7b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="oxynyeqmfvracxnglgulyqfgqxnxmehl">
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
+	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
 		<template v-for="(notification, i) in _notifications">
 			<x-notification class="notification" :notification="notification" :key="notification.id"/>
 			<p class="date" v-if="i != notifications.length - 1 && notification._date != _notifications[i + 1]._date" :key="notification.id + '-time'">
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index f2ad93bebf..401df3ae5b 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -14,7 +14,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div">
+	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div">
 		<template v-for="(note, i) in _notes">
 			<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue
index 95c85beaca..11ac23f4b1 100644
--- a/src/client/app/mobile/views/components/notifications.vue
+++ b/src/client/app/mobile/views/components/notifications.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="mk-notifications">
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<component :is="$store.state.device.animations ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
+	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notifications" class="transition notifications">
 		<template v-for="(notification, i) in _notifications">
 			<mk-notification :notification="notification" :key="notification.id"/>
 			<p class="date" :key="notification.id + '_date'" v-if="i != notifications.length - 1 && notification._date != _notifications[i + 1]._date">
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index c14a683f23..f315c058df 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -13,7 +13,7 @@
 				<section>
 					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 					<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
-					<ui-switch v-model="animations">%i18n:common.enable-animations% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
+					<ui-switch v-model="reduceMotion">%i18n:common.reduce-motion% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
 					<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 					<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
 					<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
@@ -169,9 +169,9 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
 		},
 
-		animations: {
-			get() { return this.$store.state.device.animations; },
-			set(value) { this.$store.commit('device/set', { key: 'animations', value }); }
+		reduceMotion: {
+			get() { return this.$store.state.device.reduceMotion; },
+			set(value) { this.$store.commit('device/set', { key: 'reduceMotion', value }); }
 		},
 
 		alwaysShowNsfw: {
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index a7d9bd4560..7eaef13125 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -38,7 +38,7 @@ const defaultSettings = {
 };
 
 const defaultDeviceSettings = {
-	animations: true,
+	reduceMotion: false,
 	apiViaStream: true,
 	autoPopout: false,
 	darkmode: false,

From 32afe77a269f414965373e3c53044c4a94cfeded Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 22:48:57 +0900
Subject: [PATCH 264/539] =?UTF-8?q?=E8=87=AA=E5=88=86=E5=AE=9B=E3=81=A6?=
 =?UTF-8?q?=E3=81=AE=E6=8A=95=E7=A8=BF=E3=82=92=E3=82=BF=E3=82=A4=E3=83=A0?=
 =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=A7=E8=A6=8B=E3=82=8C=E3=82=8B?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  3 +
 .../views/components/timeline.core.vue        |  6 +-
 .../app/desktop/views/components/timeline.vue |  2 +
 .../app/mobile/views/pages/home.timeline.vue  |  6 +-
 src/client/app/mobile/views/pages/home.vue    |  3 +
 src/models/note.ts                            |  2 +
 src/server/api/endpoints/notes/mentions.ts    | 61 ++++++++++---------
 src/services/note/create.ts                   |  4 ++
 8 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 3ced4dafe1..2a8cfebb57 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -167,6 +167,7 @@ common:
     local: "ローカル"
     hybrid: "ソーシャル"
     global: "グローバル"
+    mentions: "あなた宛て"
     notifications: "通知"
     list: "リスト"
     swap-left: "左に移動"
@@ -913,6 +914,7 @@ desktop/views/components/timeline.vue:
   local: "ローカル"
   hybrid: "ソーシャル"
   global: "グローバル"
+  mentions: "あなた宛て"
   list: "リスト"
 
 desktop/views/components/ui.header.vue:
@@ -1314,6 +1316,7 @@ mobile/views/pages/home.vue:
   local: "ローカル"
   hybrid: "ソーシャル"
   global: "グローバル"
+  mentions: "あなた宛て"
 
 mobile/views/pages/tag.vue:
   no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index 25fd5d36ac..b6b5cca817 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -48,6 +48,7 @@ export default Vue.extend({
 				case 'local': return (this as any).os.streams.localTimelineStream;
 				case 'hybrid': return (this as any).os.streams.hybridTimelineStream;
 				case 'global': return (this as any).os.streams.globalTimelineStream;
+				case 'mentions': return (this as any).os.stream;
 			}
 		},
 
@@ -57,6 +58,7 @@ export default Vue.extend({
 				case 'local': return 'notes/local-timeline';
 				case 'hybrid': return 'notes/hybrid-timeline';
 				case 'global': return 'notes/global-timeline';
+				case 'mentions': return 'notes/mentions';
 			}
 		},
 
@@ -69,7 +71,7 @@ export default Vue.extend({
 		this.connection = this.stream.getConnection();
 		this.connectionId = this.stream.use();
 
-		this.connection.on('note', this.onNote);
+		this.connection.on(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
 		if (this.src == 'home') {
 			this.connection.on('follow', this.onChangeFollowing);
 			this.connection.on('unfollow', this.onChangeFollowing);
@@ -81,7 +83,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off('note', this.onNote);
+		this.connection.off(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
 		if (this.src == 'home') {
 			this.connection.off('follow', this.onChangeFollowing);
 			this.connection.off('unfollow', this.onChangeFollowing);
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 8d72016f22..3e51d12883 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -5,6 +5,7 @@
 		<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
 		<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 		<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
+		<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
 		<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
 		<button @click="chooseList" title="%i18n:@list%">%fa:list%</button>
 	</header>
@@ -12,6 +13,7 @@
 	<x-core v-if="src == 'local'" ref="tl" key="local" src="local"/>
 	<x-core v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 	<x-core v-if="src == 'global'" ref="tl" key="global" src="global"/>
+	<x-core v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
 	<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 </div>
 </template>
diff --git a/src/client/app/mobile/views/pages/home.timeline.vue b/src/client/app/mobile/views/pages/home.timeline.vue
index 416b006cd8..d4fcea1f93 100644
--- a/src/client/app/mobile/views/pages/home.timeline.vue
+++ b/src/client/app/mobile/views/pages/home.timeline.vue
@@ -47,6 +47,7 @@ export default Vue.extend({
 				case 'local': return (this as any).os.streams.localTimelineStream;
 				case 'hybrid': return (this as any).os.streams.hybridTimelineStream;
 				case 'global': return (this as any).os.streams.globalTimelineStream;
+				case 'mentions': return (this as any).os.stream;
 			}
 		},
 
@@ -56,6 +57,7 @@ export default Vue.extend({
 				case 'local': return 'notes/local-timeline';
 				case 'hybrid': return 'notes/hybrid-timeline';
 				case 'global': return 'notes/global-timeline';
+				case 'mentions': return 'notes/mentions';
 			}
 		},
 
@@ -68,7 +70,7 @@ export default Vue.extend({
 		this.connection = this.stream.getConnection();
 		this.connectionId = this.stream.use();
 
-		this.connection.on('note', this.onNote);
+		this.connection.on(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
 		if (this.src == 'home') {
 			this.connection.on('follow', this.onChangeFollowing);
 			this.connection.on('unfollow', this.onChangeFollowing);
@@ -78,7 +80,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off('note', this.onNote);
+		this.connection.off(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
 		if (this.src == 'home') {
 			this.connection.off('follow', this.onChangeFollowing);
 			this.connection.off('unfollow', this.onChangeFollowing);
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 333ca1a7a1..3150bb02b4 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -6,6 +6,7 @@
 			<span v-if="src == 'local'">%fa:R comments%%i18n:@local%</span>
 			<span v-if="src == 'hybrid'">%fa:share-alt%%i18n:@hybrid%</span>
 			<span v-if="src == 'global'">%fa:globe%%i18n:@global%</span>
+			<span v-if="src == 'mentions'">%fa:at%%i18n:@mentions%</span>
 			<span v-if="src == 'list'">%fa:list%{{ list.title }}</span>
 		</span>
 		<span style="margin-left:8px">
@@ -27,6 +28,7 @@
 					<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
 					<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 					<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
+					<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
 					<template v-if="lists">
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
 					</template>
@@ -39,6 +41,7 @@
 			<x-tl v-if="src == 'local'" ref="tl" key="local" src="local"/>
 			<x-tl v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 			<x-tl v-if="src == 'global'" ref="tl" key="global" src="global"/>
+			<x-tl v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
 			<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 		</div>
 	</main>
diff --git a/src/models/note.ts b/src/models/note.ts
index 6530d0b324..62b1b3ecb1 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -17,6 +17,8 @@ import Following from './following';
 const Note = db.get<INote>('notes');
 Note.createIndex('uri', { sparse: true, unique: true });
 Note.createIndex('userId');
+Note.createIndex('mentions');
+Note.createIndex('visibleUserIds');
 Note.createIndex('tagsLower');
 Note.createIndex('_files.contentType');
 Note.createIndex({
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index a7fb14d8a9..3b2e262e4f 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -3,6 +3,7 @@ import Note from '../../../../models/note';
 import { getFriendIds } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
 
 export const meta = {
 	desc: {
@@ -10,42 +11,48 @@ export const meta = {
 		'en-US': 'Get mentions of myself.'
 	},
 
-	requireCredential: true
+	requireCredential: true,
+
+	params: {
+		following: $.bool.optional.note({
+			default: false
+		}),
+
+		limit: $.num.optional.range(1, 100).note({
+			default: 10
+		}),
+
+		sinceId: $.type(ID).optional.note({
+		}),
+
+		untilId: $.type(ID).optional.note({
+		}),
+	}
 };
 
 export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
-	// Get 'following' parameter
-	const [following = false, followingError] =
-		$.bool.optional.get(params.following);
-	if (followingError) return rej('invalid following param');
-
-	// Get 'limit' parameter
-	const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
-	if (limitErr) return rej('invalid limit param');
-
-	// Get 'sinceId' parameter
-	const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId);
-	if (sinceIdErr) return rej('invalid sinceId param');
-
-	// Get 'untilId' parameter
-	const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId);
-	if (untilIdErr) return rej('invalid untilId param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) throw psErr;
 
 	// Check if both of sinceId and untilId is specified
-	if (sinceId && untilId) {
+	if (ps.sinceId && ps.untilId) {
 		return rej('cannot set sinceId and untilId');
 	}
 
 	// Construct query
 	const query = {
-		mentions: user._id
+		$or: [{
+			mentions: user._id
+		}, {
+			visibleUserIds: user._id
+		}]
 	} as any;
 
 	const sort = {
 		_id: -1
 	};
 
-	if (following) {
+	if (ps.following) {
 		const followingIds = await getFriendIds(user._id);
 
 		query.userId = {
@@ -53,26 +60,24 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		};
 	}
 
-	if (sinceId) {
+	if (ps.sinceId) {
 		sort._id = 1;
 		query._id = {
-			$gt: sinceId
+			$gt: ps.sinceId
 		};
-	} else if (untilId) {
+	} else if (ps.untilId) {
 		query._id = {
-			$lt: untilId
+			$lt: ps.untilId
 		};
 	}
 
 	// Issue query
 	const mentions = await Note
 		.find(query, {
-			limit: limit,
+			limit: ps.limit,
 			sort: sort
 		});
 
 	// Serialize
-	res(await Promise.all(mentions.map(async mention =>
-		await pack(mention, user)
-	)));
+	res(await Promise.all(mentions.map(mention => pack(mention, user))));
 });
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 771e9cade8..aa65cfe0cf 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -138,6 +138,10 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 
 	const mentionedUsers = await extractMentionedUsers(tokens);
 
+	if (data.reply && !user._id.equals(data.reply.userId) && !mentionedUsers.some(u => u._id.equals(data.reply.userId))) {
+		mentionedUsers.push(await User.findOne({ _id: data.reply.userId }));
+	}
+
 	const note = await insertNote(user, data, tags, mentionedUsers);
 
 	res(note);

From afeb8058b170e9e121d5d60fc4185f371934ef81 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 23:15:02 +0900
Subject: [PATCH 265/539] Add mentions column (Deck)

---
 .../views/pages/deck/deck.column-core.vue     |  5 +-
 .../views/pages/deck/deck.mentions-column.vue | 38 ++++++++
 .../views/pages/deck/deck.mentions.vue        | 93 +++++++++++++++++++
 .../app/desktop/views/pages/deck/deck.vue     |  9 ++
 4 files changed, 144 insertions(+), 1 deletion(-)
 create mode 100644 src/client/app/desktop/views/pages/deck/deck.mentions-column.vue
 create mode 100644 src/client/app/desktop/views/pages/deck/deck.mentions.vue

diff --git a/src/client/app/desktop/views/pages/deck/deck.column-core.vue b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
index 7f219c0be1..b7602bd235 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column-core.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
@@ -6,6 +6,7 @@
 <x-tl-column v-else-if="column.type == 'hybrid'" :column="column" :is-stacked="isStacked"/>
 <x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked"/>
 <x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked"/>
+<x-mentions-column v-else-if="column.type == 'mentions'" :column="column" :is-stacked="isStacked"/>
 </template>
 
 <script lang="ts">
@@ -13,12 +14,14 @@ import Vue from 'vue';
 import XTlColumn from './deck.tl-column.vue';
 import XNotificationsColumn from './deck.notifications-column.vue';
 import XWidgetsColumn from './deck.widgets-column.vue';
+import XMentionsColumn from './deck.mentions-column.vue';
 
 export default Vue.extend({
 	components: {
 		XTlColumn,
 		XNotificationsColumn,
-		XWidgetsColumn
+		XWidgetsColumn,
+		XMentionsColumn
 	},
 
 	props: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.mentions-column.vue b/src/client/app/desktop/views/pages/deck/deck.mentions-column.vue
new file mode 100644
index 0000000000..8ec10164f2
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.mentions-column.vue
@@ -0,0 +1,38 @@
+<template>
+<x-column :name="name" :column="column" :is-stacked="isStacked">
+	<span slot="header">%fa:at%{{ name }}</span>
+
+	<x-mentions/>
+</x-column>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XColumn from './deck.column.vue';
+import XMentions from './deck.mentions.vue';
+
+export default Vue.extend({
+	components: {
+		XColumn,
+		XMentions
+	},
+
+	props: {
+		column: {
+			type: Object,
+			required: true
+		},
+		isStacked: {
+			type: Boolean,
+			required: true
+		}
+	},
+
+	computed: {
+		name(): string {
+			if (this.column.name) return this.column.name;
+			return '%i18n:common.deck.mentions%';
+		}
+	},
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.mentions.vue b/src/client/app/desktop/views/pages/deck/deck.mentions.vue
new file mode 100644
index 0000000000..cecb75f067
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.mentions.vue
@@ -0,0 +1,93 @@
+<template>
+	<x-notes ref="timeline" :more="existMore ? more : null"/>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XNotes from './deck.notes.vue';
+
+const fetchLimit = 10;
+
+export default Vue.extend({
+	components: {
+		XNotes
+	},
+
+	props: {
+	},
+
+	data() {
+		return {
+			fetching: true,
+			moreFetching: false,
+			existMore: false,
+			connection: null,
+			connectionId: null
+		};
+	},
+
+	mounted() {
+		this.connection = (this as any).os.stream.getConnection();
+		this.connectionId = (this as any).os.stream.use();
+
+		this.connection.on('mention', this.onNote);
+
+		this.fetch();
+	},
+
+	beforeDestroy() {
+		this.connection.off('mention', this.onNote);
+		(this as any).os.stream.dispose(this.connectionId);
+	},
+
+	methods: {
+		fetch() {
+			this.fetching = true;
+
+			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
+				(this as any).api('notes/mentions', {
+					limit: fetchLimit + 1,
+					includeMyRenotes: this.$store.state.settings.showMyRenotes,
+					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+					includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+				}).then(notes => {
+					if (notes.length == fetchLimit + 1) {
+						notes.pop();
+						this.existMore = true;
+					}
+					res(notes);
+					this.fetching = false;
+					this.$emit('loaded');
+				}, rej);
+			}));
+		},
+		more() {
+			this.moreFetching = true;
+
+			const promise = (this as any).api('notes/mentions', {
+				limit: fetchLimit + 1,
+				untilId: (this.$refs.timeline as any).tail().id,
+				includeMyRenotes: this.$store.state.settings.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+			});
+
+			promise.then(notes => {
+				if (notes.length == fetchLimit + 1) {
+					notes.pop();
+				} else {
+					this.existMore = false;
+				}
+				notes.forEach(n => (this.$refs.timeline as any).append(n));
+				this.moreFetching = false;
+			});
+
+			return promise;
+		},
+		onNote(note) {
+			// Prepend a note
+			(this.$refs.timeline as any).prepend(note);
+		}
+	}
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 5e7a07ea6b..4a4535959e 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -138,6 +138,15 @@ export default Vue.extend({
 							type: 'global'
 						});
 					}
+				}, {
+					icon: '%fa:at%',
+					text: '%i18n:common.deck.mentions%',
+					action: () => {
+						this.$store.dispatch('settings/addDeckColumn', {
+							id: uuid(),
+							type: 'mentions'
+						});
+					}
 				}, {
 					icon: '%fa:list%',
 					text: '%i18n:common.deck.list%',

From dc2055f5bce505ef3040527b5f5fcde541cd1496 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 23:15:15 +0900
Subject: [PATCH 266/539] Fix bug

---
 src/models/note.ts | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/models/note.ts b/src/models/note.ts
index 62b1b3ecb1..bb600fc0cb 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -26,6 +26,21 @@ Note.createIndex({
 });
 export default Note;
 
+// 後方互換性のため
+Note.findOne({
+	fileIds: { $exists: true }
+}).then(n => {
+	if (n == null) {
+		Note.update({}, {
+			$rename: {
+				mediaIds: 'fileIds'
+			}
+		}, {
+			multi: true
+		});
+	}
+});
+
 export function isValidText(text: string): boolean {
 	return length(text.trim()) <= 1000 && text.trim() != '';
 }

From ae6ce198860a4ca61061f130ccbe7a7bfe55cf29 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 16 Sep 2018 23:19:06 +0900
Subject: [PATCH 267/539] 8.43.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 483cef9996..a4d64a2d1f 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.42.0",
-	"clientVersion": "1.0.9769",
+	"version": "8.43.0",
+	"clientVersion": "1.0.9808",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 6138a74231674370f28296516fda0882ddcefb33 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 00:20:00 +0900
Subject: [PATCH 268/539] Fix #2101

---
 src/remote/activitypub/renderer/note.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 04e131637a..33400ad440 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -87,7 +87,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 		attributedTo,
 		summary: note.cw,
 		content: toHtml(note),
-		_misskey_content_: note.text,
+		_misskey_content: note.text,
 		published: note.createdAt.toISOString(),
 		to,
 		cc,

From 374b276f5ca46555235b76413a14b7f09528b5e0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 02:45:30 +0900
Subject: [PATCH 269/539] Fix #2720

---
 src/mfm/html.ts | 8 ++++++--
 test/mfm.ts     | 9 +++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/mfm/html.ts b/src/mfm/html.ts
index b7fa5b6f03..df9959dc4b 100644
--- a/src/mfm/html.ts
+++ b/src/mfm/html.ts
@@ -82,8 +82,12 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
 
 	text({ document }, { content }) {
 		const nodes = (content as string).split('\n').map(x => document.createTextNode(x));
-		for (const x of intersperse(document.createElement('br'), nodes)) {
-			document.body.appendChild(x);
+		for (const x of intersperse('br', nodes)) {
+			if (x === 'br') {
+				document.body.appendChild(document.createElement('br'));
+			} else {
+				document.body.appendChild(x);
+			}
 		}
 	},
 
diff --git a/test/mfm.ts b/test/mfm.ts
index 706c4c549a..901ffb80e3 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -1,6 +1,7 @@
 import * as assert from 'assert';
 
 import analyze from '../src/mfm/parse';
+import toHtml from '../src/mfm/html';
 import syntaxhighlighter from '../src/mfm/parse/core/syntax-highlighter';
 
 describe('Text', () => {
@@ -170,4 +171,12 @@ describe('Text', () => {
 			assert.equal(html, '<span class="symbol">/</span>');
 		});
 	});
+
+	describe('toHtml', () => {
+		it('br', () => {
+			const input = 'foo\nbar\nbaz';
+			const output = '<p>foo<br>bar<br>baz</p>';
+			assert.equal(toHtml(analyze(input)), output);
+		});
+	});
 });

From 8751d917948df1dfda5a69c01175a19b05f624f2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 02:56:57 +0900
Subject: [PATCH 270/539] Better stats page

---
 src/client/app/desktop/views/components/charts.vue | 4 ++--
 src/client/app/desktop/views/pages/stats/stats.vue | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/client/app/desktop/views/components/charts.vue b/src/client/app/desktop/views/components/charts.vue
index 6514cdf788..e401095363 100644
--- a/src/client/app/desktop/views/components/charts.vue
+++ b/src/client/app/desktop/views/components/charts.vue
@@ -100,7 +100,7 @@ export default Vue.extend({
 
 	created() {
 		(this as any).api('chart', {
-			limit: 32
+			limit: 35
 		}).then(chart => {
 			this.chart = chart;
 		});
@@ -681,6 +681,6 @@ export default Vue.extend({
 	> div
 		> *
 			display block
-			height 320px
+			height 350px
 
 </style>
diff --git a/src/client/app/desktop/views/pages/stats/stats.vue b/src/client/app/desktop/views/pages/stats/stats.vue
index 41005b6398..7a4e4ab5ce 100644
--- a/src/client/app/desktop/views/pages/stats/stats.vue
+++ b/src/client/app/desktop/views/pages/stats/stats.vue
@@ -43,7 +43,7 @@ export default Vue.extend({
 	> .stats
 		display flex
 		justify-content center
-		margin-bottom 16px
+		margin 0 auto 16px auto
 		padding 32px
 		background #fff
 		box-shadow 0 2px 8px rgba(#000, 0.1)
@@ -60,5 +60,6 @@ export default Vue.extend({
 				font-size 70%
 
 	> div
-		max-width 850px
+		max-width 950px
+		margin 0 auto
 </style>

From 43b47c4494f3efee4a6c1cc0305dbe406747d3e5 Mon Sep 17 00:00:00 2001
From: xps2 <9610872+xps2@users.noreply.github.com>
Date: Mon, 17 Sep 2018 03:02:58 +0900
Subject: [PATCH 271/539] =?UTF-8?q?fontawesome=E3=82=925.3.1=E3=81=AB?=
 =?UTF-8?q?=E3=82=A2=E3=83=83=E3=83=97=E3=83=87=E3=83=BC=E3=83=88=20(#2718?=
 =?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json      |  8 ++++----
 src/docs/base.pug |  2 +-
 src/misc/fa.ts    | 10 +++++-----
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/package.json b/package.json
index a4d64a2d1f..ec2cb44ed0 100644
--- a/package.json
+++ b/package.json
@@ -20,10 +20,10 @@
 		"format": "gulp format"
 	},
 	"dependencies": {
-		"@fortawesome/fontawesome": "1.1.8",
-		"@fortawesome/fontawesome-free-brands": "5.0.13",
-		"@fortawesome/fontawesome-free-regular": "5.0.13",
-		"@fortawesome/fontawesome-free-solid": "5.0.13",
+		"@fortawesome/fontawesome-svg-core": "1.2.4",
+		"@fortawesome/free-brands-svg-icons": "5.3.1",
+		"@fortawesome/free-regular-svg-icons": "5.3.1",
+		"@fortawesome/free-solid-svg-icons": "5.3.1",
 		"@koa/cors": "2.2.2",
 		"@prezzemolo/rap": "0.1.2",
 		"@prezzemolo/zip": "0.0.3",
diff --git a/src/docs/base.pug b/src/docs/base.pug
index 26f19ddf09..41eb80a64e 100644
--- a/src/docs/base.pug
+++ b/src/docs/base.pug
@@ -9,7 +9,7 @@ html(lang= lang)
 		link(rel="stylesheet" href="/docs/assets/style.css")
 		link(rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css")
 		script(src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js")
-		link(rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous")
+		link(rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous")
 		block meta
 
 	body
diff --git a/src/misc/fa.ts b/src/misc/fa.ts
index 90cdac89b2..5405255ac7 100644
--- a/src/misc/fa.ts
+++ b/src/misc/fa.ts
@@ -2,12 +2,12 @@
  * Replace fontawesome symbols
  */
 
-import * as fontawesome from '@fortawesome/fontawesome';
-import regular from '@fortawesome/fontawesome-free-regular';
-import solid from '@fortawesome/fontawesome-free-solid';
-import brands from '@fortawesome/fontawesome-free-brands';
+import * as fontawesome from '@fortawesome/fontawesome-svg-core';
+import { far } from '@fortawesome/free-regular-svg-icons';
+import { fas } from '@fortawesome/free-solid-svg-icons';
+import { fab } from '@fortawesome/free-brands-svg-icons';
 
-fontawesome.library.add(regular, solid, brands);
+fontawesome.library.add(far, fas, fab);
 
 export const pattern = /%fa:(.+?)%/g;
 

From 020cc471da00350b92e76c1d0033baf32ccfa909 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 03:03:58 +0900
Subject: [PATCH 272/539] 8.44.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index ec2cb44ed0..85860580aa 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.43.0",
-	"clientVersion": "1.0.9808",
+	"version": "8.44.0",
+	"clientVersion": "1.0.9813",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From b21b33831ad2584c832537b1819f6151bf5c37e5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 03:36:58 +0900
Subject: [PATCH 273/539] Fix bug

---
 src/remote/activitypub/renderer/note.ts | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 33400ad440..5d28e5f450 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -6,6 +6,7 @@ import DriveFile, { IDriveFile } from '../../../models/drive-file';
 import Note, { INote } from '../../../models/note';
 import User from '../../../models/user';
 import toHtml from '../misc/get-note-html';
+import parseMfm from '../../../mfm/parse';
 
 export default async function renderNote(note: INote, dive = true): Promise<any> {
 	const promisedFiles: Promise<IDriveFile[]> = note.fileIds
@@ -81,13 +82,21 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 
 	const files = await promisedFiles;
 
+	const text = note.text ? parseMfm(note.text).map(x => {
+		if (x.type == 'mention' && x.host == null) {
+			return `${x.content}@${config.host}`;
+		} else {
+			return x.content;
+		}
+	}).join('') : null;
+
 	return {
 		id: `${config.url}/notes/${note._id}`,
 		type: 'Note',
 		attributedTo,
 		summary: note.cw,
 		content: toHtml(note),
-		_misskey_content: note.text,
+		_misskey_content: text,
 		published: note.createdAt.toISOString(),
 		to,
 		cc,

From 433dbe179d8080f8bc9457866f3411f22bd8168e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 03:37:22 +0900
Subject: [PATCH 274/539] 8.44.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 85860580aa..453a3d6a8b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.44.0",
+	"version": "8.44.1",
 	"clientVersion": "1.0.9813",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From 109738ccb9ef8c203685e6f4bc31986ac2a17046 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 09:00:20 +0900
Subject: [PATCH 275/539] =?UTF-8?q?=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5?=
 =?UTF-8?q?=E3=82=BF=E3=82=B0=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4?=
 =?UTF-8?q?=E3=83=B3=E3=82=92=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |   5 +
 .../app/common/scripts/streaming/hashtag.ts   |  13 ++
 .../views/components/settings-window.vue      |   8 +-
 .../views/components/settings.tags.vue        |  65 ++++++++++
 .../app/desktop/views/components/settings.vue |  18 ++-
 .../views/components/timeline.core.vue        |  76 ++++++++---
 .../app/desktop/views/components/timeline.vue | 119 +++++++++++++++---
 .../views/pages/deck/deck.column-core.vue     |   1 +
 .../views/pages/deck/deck.hashtag-tl.vue      | 117 +++++++++++++++++
 .../views/pages/deck/deck.tl-column.vue       |   7 +-
 .../app/desktop/views/pages/deck/deck.vue     |  14 +++
 .../app/mobile/views/pages/home.timeline.vue  |  76 ++++++++---
 src/client/app/mobile/views/pages/home.vue    |  17 ++-
 src/client/app/store.ts                       |   1 +
 .../api/endpoints/notes/search_by_tag.ts      |  45 +++----
 src/server/api/stream/hashtag.ts              |  48 +++++++
 src/server/api/streaming.ts                   |   6 +
 src/services/note/create.ts                   |   6 +-
 src/stream.ts                                 |   5 +
 19 files changed, 555 insertions(+), 92 deletions(-)
 create mode 100644 src/client/app/common/scripts/streaming/hashtag.ts
 create mode 100644 src/client/app/desktop/views/components/settings.tags.vue
 create mode 100644 src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
 create mode 100644 src/server/api/stream/hashtag.ts

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 2a8cfebb57..a3b2bd88e7 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -166,6 +166,7 @@ common:
     home: "ホーム"
     local: "ローカル"
     hybrid: "ソーシャル"
+    hashtag: "ハッシュタグ"
     global: "グローバル"
     mentions: "あなた宛て"
     notifications: "通知"
@@ -916,6 +917,10 @@ desktop/views/components/timeline.vue:
   global: "グローバル"
   mentions: "あなた宛て"
   list: "リスト"
+  hashtag: "ハッシュタグ"
+  add-tag-timeline: "ハッシュタグを追加"
+  add-list: "リストを追加"
+  list-name: "リスト名"
 
 desktop/views/components/ui.header.vue:
   welcome-back: "おかえりなさい、"
diff --git a/src/client/app/common/scripts/streaming/hashtag.ts b/src/client/app/common/scripts/streaming/hashtag.ts
new file mode 100644
index 0000000000..276b8f8d3d
--- /dev/null
+++ b/src/client/app/common/scripts/streaming/hashtag.ts
@@ -0,0 +1,13 @@
+import Stream from './stream';
+import MiOS from '../../../mios';
+
+export class HashtagStream extends Stream {
+	constructor(os: MiOS, me, q) {
+		super(os, 'hashtag', me ? {
+			i: me.token,
+			q: JSON.stringify(q)
+		} : {
+			q: JSON.stringify(q)
+		});
+	}
+}
diff --git a/src/client/app/desktop/views/components/settings-window.vue b/src/client/app/desktop/views/components/settings-window.vue
index deb865b102..b4cc570282 100644
--- a/src/client/app/desktop/views/components/settings-window.vue
+++ b/src/client/app/desktop/views/components/settings-window.vue
@@ -1,13 +1,19 @@
 <template>
 <mk-window ref="window" is-modal width="700px" height="550px" @closed="$destroy">
 	<span slot="header" :class="$style.header">%fa:cog%%i18n:@settings%</span>
-	<mk-settings @done="close"/>
+	<mk-settings :initial-page="initialPage" @done="close"/>
 </mk-window>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
 export default Vue.extend({
+	props: {
+		initialPage: {
+			type: String,
+			required: false
+		}
+	},
 	methods: {
 		close() {
 			(this as any).$refs.window.close();
diff --git a/src/client/app/desktop/views/components/settings.tags.vue b/src/client/app/desktop/views/components/settings.tags.vue
new file mode 100644
index 0000000000..a7234f7d87
--- /dev/null
+++ b/src/client/app/desktop/views/components/settings.tags.vue
@@ -0,0 +1,65 @@
+<template>
+<div class="vfcitkilproprqtbnpoertpsziierwzi">
+	<div v-for="timeline in timelines" class="timeline">
+		<ui-input v-model="timeline.title" @change="save">
+			<span>%i18n:@title%</span>
+		</ui-input>
+		<ui-textarea :value="timeline.query ? timeline.query.map(tags => tags.join(' ')).join('\n') : ''" @input="onQueryChange(timeline, $event)">
+			<span>%i18n:@query%</span>
+		</ui-textarea>
+		<ui-button class="save" @click="save">%i18n:@save%</ui-button>
+	</div>
+	<ui-button class="add" @click="add">%i18n:@add%</ui-button>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import * as uuid from 'uuid';
+
+export default Vue.extend({
+	data() {
+		return {
+			timelines: this.$store.state.settings.tagTimelines
+		};
+	},
+
+	methods: {
+		add() {
+			this.timelines.push({
+				id: uuid(),
+				title: '',
+				query: ''
+			});
+
+			this.save();
+		},
+
+		save() {
+			this.$store.dispatch('settings/set', { key: 'tagTimelines', value: this.timelines });
+		},
+
+		onQueryChange(timeline, value) {
+			timeline.query = value.split('\n').map(tags => tags.split(' '));
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+
+root(isDark)
+	> .timeline
+		padding-bottom 16px
+		border-bottom solid 1px rgba(#000, 0.1)
+
+	> .add
+		margin-top 16px
+
+.vfcitkilproprqtbnpoertpsziierwzi[data-darkmode]
+	root(true)
+
+.vfcitkilproprqtbnpoertpsziierwzi:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 3911ec5931..312a7ed56e 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -5,6 +5,7 @@
 		<p :class="{ active: page == 'web' }" @mousedown="page = 'web'">%fa:desktop .fw%Web</p>
 		<p :class="{ active: page == 'notification' }" @mousedown="page = 'notification'">%fa:R bell .fw%%i18n:@notification%</p>
 		<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:@drive%</p>
+		<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
 		<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
 		<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
 		<p :class="{ active: page == 'twitter' }" @mousedown="page = 'twitter'">%fa:B twitter .fw%Twitter</p>
@@ -138,6 +139,11 @@
 			<x-drive/>
 		</section>
 
+		<section class="hashtags" v-show="page == 'hashtags'">
+			<h1>%i18n:@tags%</h1>
+			<x-tags/>
+		</section>
+
 		<section class="mute" v-show="page == 'mute'">
 			<h1>%i18n:@mute%</h1>
 			<x-mute/>
@@ -222,6 +228,7 @@ import XApi from './settings.api.vue';
 import XApps from './settings.apps.vue';
 import XSignins from './settings.signins.vue';
 import XDrive from './settings.drive.vue';
+import XTags from './settings.tags.vue';
 import { url, langs, version } from '../../../config';
 import checkForUpdate from '../../../common/scripts/check-for-update';
 
@@ -234,11 +241,18 @@ export default Vue.extend({
 		XApi,
 		XApps,
 		XSignins,
-		XDrive
+		XDrive,
+		XTags
+	},
+	props: {
+		initialPage: {
+			type: String,
+			required: false
+		}
 	},
 	data() {
 		return {
-			page: 'profile',
+			page: this.initialPage || 'profile',
 			meta: null,
 			version,
 			langs,
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index b6b5cca817..d2176dee87 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -15,6 +15,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { HashtagStream } from '../../../common/scripts/streaming/hashtag';
 
 const fetchLimit = 10;
 
@@ -23,6 +24,9 @@ export default Vue.extend({
 		src: {
 			type: String,
 			required: true
+		},
+		tagTl: {
+			required: false
 		}
 	},
 
@@ -31,6 +35,7 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
+			streamManager: null,
 			connection: null,
 			connectionId: null,
 			date: null
@@ -42,16 +47,6 @@ export default Vue.extend({
 			return this.$store.state.i.followingCount == 0;
 		},
 
-		stream(): any {
-			switch (this.src) {
-				case 'home': return (this as any).os.stream;
-				case 'local': return (this as any).os.streams.localTimelineStream;
-				case 'hybrid': return (this as any).os.streams.hybridTimelineStream;
-				case 'global': return (this as any).os.streams.globalTimelineStream;
-				case 'mentions': return (this as any).os.stream;
-			}
-		},
-
 		endpoint(): string {
 			switch (this.src) {
 				case 'home': return 'notes/timeline';
@@ -59,6 +54,7 @@ export default Vue.extend({
 				case 'hybrid': return 'notes/hybrid-timeline';
 				case 'global': return 'notes/global-timeline';
 				case 'mentions': return 'notes/mentions';
+				case 'tag': return 'notes/search_by_tag';
 			}
 		},
 
@@ -68,13 +64,36 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = this.stream.getConnection();
-		this.connectionId = this.stream.use();
-
-		this.connection.on(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
-		if (this.src == 'home') {
+		if (this.src == 'tag') {
+			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'home') {
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
 			this.connection.on('follow', this.onChangeFollowing);
 			this.connection.on('unfollow', this.onChangeFollowing);
+		} else if (this.src == 'local') {
+			this.streamManager = (this as any).os.streams.localTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'hybrid') {
+			this.streamManager = (this as any).os.streams.hybridTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'global') {
+			this.streamManager = (this as any).os.streams.globalTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'mentions') {
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('mention', this.onNote);
 		}
 
 		document.addEventListener('keydown', this.onKeydown);
@@ -83,12 +102,27 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
-		if (this.src == 'home') {
+		if (this.src == 'tag') {
+			this.connection.off('note', this.onNote);
+			this.connection.close();
+		} else if (this.src == 'home') {
+			this.connection.off('note', this.onNote);
 			this.connection.off('follow', this.onChangeFollowing);
 			this.connection.off('unfollow', this.onChangeFollowing);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'local') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'hybrid') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'global') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'mentions') {
+			this.connection.off('mention', this.onNote);
+			this.streamManager.dispose(this.connectionId);
 		}
-		this.stream.dispose(this.connectionId);
 
 		document.removeEventListener('keydown', this.onKeydown);
 	},
@@ -103,7 +137,8 @@ export default Vue.extend({
 					untilDate: this.date ? this.date.getTime() : undefined,
 					includeMyRenotes: this.$store.state.settings.showMyRenotes,
 					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-					includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+					query: this.tagTl ? this.tagTl.query : undefined
 				}).then(notes => {
 					if (notes.length == fetchLimit + 1) {
 						notes.pop();
@@ -126,7 +161,8 @@ export default Vue.extend({
 				untilId: (this.$refs.timeline as any).tail().id,
 				includeMyRenotes: this.$store.state.settings.showMyRenotes,
 				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+				query: this.tagTl ? this.tagTl.query : undefined
 			});
 
 			promise.then(notes => {
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 3e51d12883..48eedc88d6 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -6,14 +6,19 @@
 		<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 		<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
 		<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
+		<span :data-active="src == 'tag'" @click="src = 'tag'" v-if="tagTl">%fa:hashtag% {{ tagTl.title }}</span>
 		<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
-		<button @click="chooseList" title="%i18n:@list%">%fa:list%</button>
+		<div class="buttons">
+			<button @click="chooseTag" title="%i18n:@hashtag%" ref="tagButton">%fa:hashtag%</button>
+			<button @click="chooseList" title="%i18n:@list%" ref="listButton">%fa:list%</button>
+		</div>
 	</header>
 	<x-core v-if="src == 'home'" ref="tl" key="home" src="home"/>
 	<x-core v-if="src == 'local'" ref="tl" key="local" src="local"/>
 	<x-core v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 	<x-core v-if="src == 'global'" ref="tl" key="global" src="global"/>
 	<x-core v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
+	<x-core v-if="src == 'tag'" ref="tl" key="tag" src="tag" :tag-tl="tagTl"/>
 	<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 </div>
 </template>
@@ -21,7 +26,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import XCore from './timeline.core.vue';
-import MkUserListsWindow from './user-lists-window.vue';
+import Menu from '../../../common/views/components/menu.vue';
+import MkSettingsWindow from './settings-window.vue';
 
 export default Vue.extend({
 	components: {
@@ -32,6 +38,7 @@ export default Vue.extend({
 		return {
 			src: 'home',
 			list: null,
+			tagTl: null,
 			enableLocalTimeline: false
 		};
 	},
@@ -41,8 +48,14 @@ export default Vue.extend({
 			this.saveSrc();
 		},
 
-		list() {
+		list(x) {
 			this.saveSrc();
+			if (x != null) this.tagTl = null;
+		},
+
+		tagTl(x) {
+			this.saveSrc();
+			if (x != null) this.list = null;
 		}
 	},
 
@@ -55,6 +68,8 @@ export default Vue.extend({
 			this.src = this.$store.state.device.tl.src;
 			if (this.src == 'list') {
 				this.list = this.$store.state.device.tl.arg;
+			} else if (this.src == 'tag') {
+				this.tagTl = this.$store.state.device.tl.arg;
 			}
 		} else if (this.$store.state.i.followingCount == 0) {
 			this.src = 'hybrid';
@@ -71,7 +86,7 @@ export default Vue.extend({
 		saveSrc() {
 			this.$store.commit('device/setTl', {
 				src: this.src,
-				arg: this.list
+				arg: this.src == 'list' ? this.list : this.tagTl
 			});
 		},
 
@@ -79,12 +94,74 @@ export default Vue.extend({
 			(this.$refs.tl as any).warp(date);
 		},
 
-		chooseList() {
-			const w = (this as any).os.new(MkUserListsWindow);
-			w.$once('choosen', list => {
-				this.list = list;
-				this.src = 'list';
-				w.close();
+		async chooseList() {
+			const lists = await (this as any).api('users/lists/list');
+
+			let menu = [{
+				icon: '%fa:plus%',
+				text: '%i18n:@add-list%',
+				action: () => {
+					(this as any).apis.input({
+						title: '%i18n:@list-name%',
+					}).then(async title => {
+						const list = await (this as any).api('users/lists/create', {
+							title
+						});
+
+						this.list = list;
+						this.src = 'list';
+					});
+				}
+			}];
+
+			if (lists.length > 0) {
+				menu.push(null);
+			}
+
+			menu = menu.concat(lists.map(list => ({
+				icon: '%fa:list%',
+				text: list.title,
+				action: () => {
+					this.list = list;
+					this.src = 'list';
+				}
+			})));
+
+			this.os.new(Menu, {
+				source: this.$refs.listButton,
+				compact: false,
+				items: menu
+			});
+		},
+
+		chooseTag() {
+			let menu = [{
+				icon: '%fa:plus%',
+				text: '%i18n:@add-tag-timeline%',
+				action: () => {
+					(this as any).os.new(MkSettingsWindow, {
+						initialPage: 'hashtags'
+					});
+				}
+			}];
+
+			if (this.$store.state.settings.tagTimelines.length > 0) {
+				menu.push(null);
+			}
+
+			menu = menu.concat(this.$store.state.settings.tagTimelines.map(t => ({
+				icon: '%fa:hashtag%',
+				text: t.title,
+				action: () => {
+					this.tagTl = t;
+					this.src = 'tag';
+				}
+			})));
+
+			this.os.new(Menu, {
+				source: this.$refs.tagButton,
+				compact: false,
+				items: menu
 			});
 		}
 	}
@@ -106,22 +183,24 @@ root(isDark)
 		border-radius 6px 6px 0 0
 		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
 
-		> button
+		> .buttons
 			position absolute
 			z-index 2
 			top 0
 			right 0
-			padding 0
-			width 42px
-			font-size 0.9em
-			line-height 42px
-			color isDark ? #9baec8 : #ccc
 
-			&:hover
-				color isDark ? #b2c1d5 : #aaa
+			> button
+				padding 0
+				width 42px
+				font-size 0.9em
+				line-height 42px
+				color isDark ? #9baec8 : #ccc
 
-			&:active
-				color isDark ? #b2c1d5 : #999
+				&:hover
+					color isDark ? #b2c1d5 : #aaa
+
+				&:active
+					color isDark ? #b2c1d5 : #999
 
 		> span
 			display inline-block
diff --git a/src/client/app/desktop/views/pages/deck/deck.column-core.vue b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
index b7602bd235..a320f697b3 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column-core.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
@@ -6,6 +6,7 @@
 <x-tl-column v-else-if="column.type == 'hybrid'" :column="column" :is-stacked="isStacked"/>
 <x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked"/>
 <x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked"/>
+<x-tl-column v-else-if="column.type == 'hashtag'" :column="column" :is-stacked="isStacked"/>
 <x-mentions-column v-else-if="column.type == 'mentions'" :column="column" :is-stacked="isStacked"/>
 </template>
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue b/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
new file mode 100644
index 0000000000..f38d5a6df5
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
@@ -0,0 +1,117 @@
+<template>
+	<x-notes ref="timeline" :more="existMore ? more : null" :media-view="mediaView"/>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XNotes from './deck.notes.vue';
+import { HashtagStream } from '../../../../common/scripts/streaming/hashtag';
+
+const fetchLimit = 10;
+
+export default Vue.extend({
+	components: {
+		XNotes
+	},
+
+	props: {
+		tagTl: {
+			type: Object,
+			required: true
+		},
+		mediaOnly: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
+		mediaView: {
+			type: Boolean,
+			required: false,
+			default: false
+		}
+	},
+
+	data() {
+		return {
+			fetching: true,
+			moreFetching: false,
+			existMore: false,
+			connection: null
+		};
+	},
+
+	watch: {
+		mediaOnly() {
+			this.fetch();
+		}
+	},
+
+	mounted() {
+		if (this.connection) this.connection.close();
+		this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+		this.connection.on('note', this.onNote);
+
+		this.fetch();
+	},
+
+	beforeDestroy() {
+		this.connection.close();
+	},
+
+	methods: {
+		fetch() {
+			this.fetching = true;
+
+			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
+				(this as any).api('notes/search_by_tag', {
+					limit: fetchLimit + 1,
+					withFiles: this.mediaOnly,
+					includeMyRenotes: this.$store.state.settings.showMyRenotes,
+					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+					query: this.tagTl.query
+				}).then(notes => {
+					if (notes.length == fetchLimit + 1) {
+						notes.pop();
+						this.existMore = true;
+					}
+					res(notes);
+					this.fetching = false;
+					this.$emit('loaded');
+				}, rej);
+			}));
+		},
+		more() {
+			this.moreFetching = true;
+
+			const promise = (this as any).api('notes/search_by_tag', {
+				limit: fetchLimit + 1,
+				untilId: (this.$refs.timeline as any).tail().id,
+				withFiles: this.mediaOnly,
+				includeMyRenotes: this.$store.state.settings.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+				query: this.tagTl.query
+			});
+
+			promise.then(notes => {
+				if (notes.length == fetchLimit + 1) {
+					notes.pop();
+				} else {
+					this.existMore = false;
+				}
+				notes.forEach(n => (this.$refs.timeline as any).append(n));
+				this.moreFetching = false;
+			});
+
+			return promise;
+		},
+		onNote(note) {
+			if (this.mediaOnly && note.files.length == 0) return;
+
+			// Prepend a note
+			(this.$refs.timeline as any).prepend(note);
+		}
+	}
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl-column.vue b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
index 231b505f5d..550b1be628 100644
--- a/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
@@ -6,6 +6,7 @@
 		<template v-if="column.type == 'hybrid'">%fa:share-alt%</template>
 		<template v-if="column.type == 'global'">%fa:globe%</template>
 		<template v-if="column.type == 'list'">%fa:list%</template>
+		<template v-if="column.type == 'hashtag'">%fa:hashtag%</template>
 		<span>{{ name }}</span>
 	</span>
 
@@ -14,6 +15,7 @@
 		<mk-switch v-model="column.isMediaView" @change="onChangeSettings" text="%i18n:@is-media-view%"/>
 	</div>
 	<x-list-tl v-if="column.type == 'list'" :list="column.list" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
+	<x-hashtag-tl v-if="column.type == 'hashtag'" :tag-tl="$store.state.settings.tagTimelines.find(x => x.id == column.tagTlId)" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
 	<x-tl v-else :src="column.type" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
 </x-column>
 </template>
@@ -23,12 +25,14 @@ import Vue from 'vue';
 import XColumn from './deck.column.vue';
 import XTl from './deck.tl.vue';
 import XListTl from './deck.list-tl.vue';
+import XHashtagTl from './deck.hashtag-tl.vue';
 
 export default Vue.extend({
 	components: {
 		XColumn,
 		XTl,
-		XListTl
+		XListTl,
+		XHashtagTl
 	},
 
 	props: {
@@ -65,6 +69,7 @@ export default Vue.extend({
 				case 'hybrid': return '%i18n:common.deck.hybrid%';
 				case 'global': return '%i18n:common.deck.global%';
 				case 'list': return this.column.list.title;
+				case 'hashtag': return this.$store.state.settings.tagTimelines.find(x => x.id == this.column.tagTlId).title;
 			}
 		}
 	},
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 4a4535959e..aafe9a45d3 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -161,6 +161,20 @@ export default Vue.extend({
 							w.close();
 						});
 					}
+				}, {
+					icon: '%fa:hashtag%',
+					text: '%i18n:common.deck.hashtag%',
+					action: () => {
+						(this as any).apis.input({
+							title: '%i18n:@enter-hashtag-tl-title%'
+						}).then(title => {
+							this.$store.dispatch('settings/addDeckColumn', {
+								id: uuid(),
+								type: 'hashtag',
+								tagTlId: this.$store.state.settings.tagTimelines.find(x => x.title == title).id
+							});
+						});
+					}
 				}, {
 					icon: '%fa:bell R%',
 					text: '%i18n:common.deck.notifications%',
diff --git a/src/client/app/mobile/views/pages/home.timeline.vue b/src/client/app/mobile/views/pages/home.timeline.vue
index d4fcea1f93..fecb2384ba 100644
--- a/src/client/app/mobile/views/pages/home.timeline.vue
+++ b/src/client/app/mobile/views/pages/home.timeline.vue
@@ -13,6 +13,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+import { HashtagStream } from '../../../common/scripts/streaming/hashtag';
 
 const fetchLimit = 10;
 
@@ -21,6 +22,9 @@ export default Vue.extend({
 		src: {
 			type: String,
 			required: true
+		},
+		tagTl: {
+			required: false
 		}
 	},
 
@@ -29,6 +33,7 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
+			streamManager: null,
 			connection: null,
 			connectionId: null,
 			unreadCount: 0,
@@ -41,16 +46,6 @@ export default Vue.extend({
 			return this.$store.state.i.followingCount == 0;
 		},
 
-		stream(): any {
-			switch (this.src) {
-				case 'home': return (this as any).os.stream;
-				case 'local': return (this as any).os.streams.localTimelineStream;
-				case 'hybrid': return (this as any).os.streams.hybridTimelineStream;
-				case 'global': return (this as any).os.streams.globalTimelineStream;
-				case 'mentions': return (this as any).os.stream;
-			}
-		},
-
 		endpoint(): string {
 			switch (this.src) {
 				case 'home': return 'notes/timeline';
@@ -58,6 +53,7 @@ export default Vue.extend({
 				case 'hybrid': return 'notes/hybrid-timeline';
 				case 'global': return 'notes/global-timeline';
 				case 'mentions': return 'notes/mentions';
+				case 'tag': return 'notes/search_by_tag';
 			}
 		},
 
@@ -67,25 +63,63 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = this.stream.getConnection();
-		this.connectionId = this.stream.use();
-
-		this.connection.on(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
-		if (this.src == 'home') {
+		if (this.src == 'tag') {
+			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'home') {
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
 			this.connection.on('follow', this.onChangeFollowing);
 			this.connection.on('unfollow', this.onChangeFollowing);
+		} else if (this.src == 'local') {
+			this.streamManager = (this as any).os.streams.localTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'hybrid') {
+			this.streamManager = (this as any).os.streams.hybridTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'global') {
+			this.streamManager = (this as any).os.streams.globalTimelineStream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('note', this.onNote);
+		} else if (this.src == 'mentions') {
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('mention', this.onNote);
 		}
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		this.connection.off(this.src == 'mentions' ? 'mention' : 'note', this.onNote);
-		if (this.src == 'home') {
+		if (this.src == 'tag') {
+			this.connection.off('note', this.onNote);
+			this.connection.close();
+		} else if (this.src == 'home') {
+			this.connection.off('note', this.onNote);
 			this.connection.off('follow', this.onChangeFollowing);
 			this.connection.off('unfollow', this.onChangeFollowing);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'local') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'hybrid') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'global') {
+			this.connection.off('note', this.onNote);
+			this.streamManager.dispose(this.connectionId);
+		} else if (this.src == 'mentions') {
+			this.connection.off('mention', this.onNote);
+			this.streamManager.dispose(this.connectionId);
 		}
-		this.stream.dispose(this.connectionId);
 	},
 
 	methods: {
@@ -98,7 +132,8 @@ export default Vue.extend({
 					untilDate: this.date ? this.date.getTime() : undefined,
 					includeMyRenotes: this.$store.state.settings.showMyRenotes,
 					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-					includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+					query: this.tagTl ? this.tagTl.query : undefined
 				}).then(notes => {
 					if (notes.length == fetchLimit + 1) {
 						notes.pop();
@@ -121,7 +156,8 @@ export default Vue.extend({
 				untilId: (this.$refs.timeline as any).tail().id,
 				includeMyRenotes: this.$store.state.settings.showMyRenotes,
 				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+				query: this.tagTl ? this.tagTl.query : undefined
 			});
 
 			promise.then(notes => {
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 3150bb02b4..3ec2f16b75 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -8,6 +8,7 @@
 			<span v-if="src == 'global'">%fa:globe%%i18n:@global%</span>
 			<span v-if="src == 'mentions'">%fa:at%%i18n:@mentions%</span>
 			<span v-if="src == 'list'">%fa:list%{{ list.title }}</span>
+			<span v-if="src == 'tag'">%fa:hashtag%{{ tagTl.title }}</span>
 		</span>
 		<span style="margin-left:8px">
 			<template v-if="!showNav">%fa:angle-down%</template>
@@ -32,6 +33,7 @@
 					<template v-if="lists">
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
 					</template>
+					<span v-for="tl in $store.state.settings.tagTimelines" :data-active="src == 'tag' && tagTl == tl" @click="src = 'tag'; tagTl = tl" :key="tl.id">%fa:hashtag% {{ tl.title }}</span>
 				</div>
 			</div>
 		</div>
@@ -42,6 +44,7 @@
 			<x-tl v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 			<x-tl v-if="src == 'global'" ref="tl" key="global" src="global"/>
 			<x-tl v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
+			<x-tl v-if="src == 'tag'" ref="tl" key="tag" src="tag" :tag-tl="tagTl"/>
 			<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 		</div>
 	</main>
@@ -63,6 +66,7 @@ export default Vue.extend({
 			src: 'home',
 			list: null,
 			lists: null,
+			tagTl: null,
 			showNav: false,
 			enableLocalTimeline: false
 		};
@@ -74,9 +78,16 @@ export default Vue.extend({
 			this.saveSrc();
 		},
 
-		list() {
+		list(x) {
 			this.showNav = false;
 			this.saveSrc();
+			if (x != null) this.tagTl = null;
+		},
+
+		tagTl(x) {
+			this.showNav = false;
+			this.saveSrc();
+			if (x != null) this.list = null;
 		},
 
 		showNav(v) {
@@ -97,6 +108,8 @@ export default Vue.extend({
 			this.src = this.$store.state.device.tl.src;
 			if (this.src == 'list') {
 				this.list = this.$store.state.device.tl.arg;
+			} else if (this.src == 'tag') {
+				this.tagTl = this.$store.state.device.tl.arg;
 			}
 		} else if (this.$store.state.i.followingCount == 0) {
 			this.src = 'hybrid';
@@ -121,7 +134,7 @@ export default Vue.extend({
 		saveSrc() {
 			this.$store.commit('device/setTl', {
 				src: this.src,
-				arg: this.list
+				arg: this.src == 'list' ? this.list : this.tagTl
 			});
 		},
 
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 7eaef13125..171620ae30 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -10,6 +10,7 @@ const defaultSettings = {
 	home: null,
 	mobileHome: [],
 	deck: null,
+	tagTimelines: [],
 	fetchOnScroll: true,
 	showMaps: true,
 	showPostFormOnTopOfTl: false,
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 11bfe34724..7beb97aec6 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -13,12 +13,18 @@ export const meta = {
 	},
 
 	params: {
-		tag: $.str.note({
+		tag: $.str.optional.note({
 			desc: {
 				'ja-JP': 'タグ'
 			}
 		}),
 
+		query: $.arr($.arr($.str)).optional.note({
+			desc: {
+				'ja-JP': 'クエリ'
+			}
+		}),
+
 		includeUserIds: $.arr($.type(ID)).optional.note({
 			default: []
 		}),
@@ -59,11 +65,9 @@ export const meta = {
 			}
 		}),
 
-		withFiles: $.bool.optional.nullable.note({
-			default: null,
-
+		withFiles: $.bool.optional.note({
 			desc: {
-				'ja-JP': 'ファイルが添付された投稿に限定するか否か'
+				'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します'
 			}
 		}),
 
@@ -126,8 +130,14 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 	}
 
 	const q: any = {
-		$and: [{
+		$and: [ps.tag ? {
 			tagsLower: ps.tag.toLowerCase()
+		} : {
+			$or: ps.query.map(tags => ({
+				$and: tags.map(t => ({
+					tagsLower: t.toLowerCase()
+				}))
+			}))
 		}],
 		deletedAt: { $exists: false }
 	};
@@ -281,25 +291,10 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 
 	const withFiles = ps.withFiles != null ? ps.withFiles : ps.media;
 
-	if (withFiles != null) {
-		if (withFiles) {
-			push({
-				fileIds: {
-					$exists: true,
-					$ne: null
-				}
-			});
-		} else {
-			push({
-				$or: [{
-					fileIds: {
-						$exists: false
-					}
-				}, {
-					fileIds: null
-				}]
-			});
-		}
+	if (withFiles) {
+		push({
+			fileIds: { $exists: true, $ne: [] }
+		});
 	}
 
 	if (ps.poll != null) {
diff --git a/src/server/api/stream/hashtag.ts b/src/server/api/stream/hashtag.ts
new file mode 100644
index 0000000000..db2806e796
--- /dev/null
+++ b/src/server/api/stream/hashtag.ts
@@ -0,0 +1,48 @@
+import * as websocket from 'websocket';
+import Xev from 'xev';
+
+import { IUser } from '../../../models/user';
+import Mute from '../../../models/mute';
+import { pack } from '../../../models/note';
+
+export default async function(
+	request: websocket.request,
+	connection: websocket.connection,
+	subscriber: Xev,
+	user?: IUser
+) {
+	const mute = user ? await Mute.find({ muterId: user._id }) : null;
+	const mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
+
+	const q: Array<string[]> = JSON.parse((request.resourceURL.query as any).q);
+
+	// Subscribe stream
+	subscriber.on('hashtag', async note => {
+		const matched = q.some(tags => tags.every(tag => note.tags.map((t: string) => t.toLowerCase()).includes(tag.toLowerCase())));
+		if (!matched) return;
+
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, user, {
+				detail: true
+			});
+		}
+
+		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (mutedUserIds.indexOf(note.userId) != -1) {
+			return;
+		}
+		if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
+			return;
+		}
+		if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
+			return;
+		}
+		//#endregion
+
+		connection.send(JSON.stringify({
+			type: 'note',
+			body: note
+		}));
+	});
+}
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index e6094a40b2..873719d031 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -14,6 +14,7 @@ import reversiGameStream from './stream/games/reversi-game';
 import reversiStream from './stream/games/reversi';
 import serverStatsStream from './stream/server-stats';
 import notesStatsStream from './stream/notes-stats';
+import hashtagStream from './stream/hashtag';
 import { ParsedUrlQuery } from 'querystring';
 import authenticate from './authenticate';
 
@@ -57,6 +58,11 @@ module.exports = (server: http.Server) => {
 			return;
 		}
 
+		if (request.resourceURL.pathname === '/hashtag') {
+			hashtagStream(request, connection, ev, user);
+			return;
+		}
+
 		if (user == null) {
 			connection.send('authentication-failed');
 			connection.close();
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index aa65cfe0cf..7daf83b294 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -1,7 +1,7 @@
 import es from '../../db/elasticsearch';
 import Note, { pack, INote } from '../../models/note';
 import User, { isLocalUser, IUser, isRemoteUser, IRemoteUser, ILocalUser } from '../../models/user';
-import { publishUserStream, publishLocalTimelineStream, publishHybridTimelineStream, publishGlobalTimelineStream, publishUserListStream } from '../../stream';
+import { publishUserStream, publishLocalTimelineStream, publishHybridTimelineStream, publishGlobalTimelineStream, publishUserListStream, publishHashtagStream } from '../../stream';
 import Following from '../../models/following';
 import { deliver } from '../../queue';
 import renderNote from '../../remote/activitypub/renderer/note';
@@ -181,6 +181,10 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 		noteObj.isFirstNote = true;
 	}
 
+	if (tags.length > 0) {
+		publishHashtagStream(noteObj);
+	}
+
 	const nm = new NotificationManager(user, note);
 	const nmRelatedPromises = [];
 
diff --git a/src/stream.ts b/src/stream.ts
index ebc75c875c..8a8d8b4cf0 100644
--- a/src/stream.ts
+++ b/src/stream.ts
@@ -78,6 +78,10 @@ class Publisher {
 	public publishGlobalTimelineStream = (note: any): void => {
 		this.publish('global-timeline', null, note);
 	}
+
+	public publishHashtagStream = (note: any): void => {
+		this.publish('hashtag', null, note);
+	}
 }
 
 const publisher = new Publisher();
@@ -95,3 +99,4 @@ export const publishReversiGameStream = publisher.publishReversiGameStream;
 export const publishLocalTimelineStream = publisher.publishLocalTimelineStream;
 export const publishHybridTimelineStream = publisher.publishHybridTimelineStream;
 export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream;
+export const publishHashtagStream = publisher.publishHashtagStream;

From d872a16fe082725055bb31c423d73aa52f1caf3c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 09:05:51 +0900
Subject: [PATCH 276/539] :art:

---
 src/client/app/desktop/views/components/timeline.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 48eedc88d6..2dc84004df 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -188,10 +188,10 @@ root(isDark)
 			z-index 2
 			top 0
 			right 0
+			padding-right 8px
 
 			> button
-				padding 0
-				width 42px
+				padding 0 8px
 				font-size 0.9em
 				line-height 42px
 				color isDark ? #9baec8 : #ccc

From 7587c896d53de70582de6781a952df2228fc8a2c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 09:06:56 +0900
Subject: [PATCH 277/539] 8.45.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 453a3d6a8b..aabe65c356 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.44.1",
-	"clientVersion": "1.0.9813",
+	"version": "8.45.0",
+	"clientVersion": "1.0.9834",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 7d599a68eaf8eb22d047b5952be17aec4540200c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 09:07:46 +0900
Subject: [PATCH 278/539] pong

---
 src/server/api/streaming.ts | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 873719d031..09ec23a743 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -45,6 +45,12 @@ module.exports = (server: http.Server) => {
 			ev.removeAllListeners();
 		});
 
+		connection.on('message', async (data) => {
+			if (data.utf8Data == 'ping') {
+				connection.send('pong');
+			}
+		});
+
 		const q = request.resourceURL.query as ParsedUrlQuery;
 		const [user, app] = await authenticate(q.i as string);
 

From 67ec10e86d6b73b62dc35e243c73be12c6bb50ad Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 11:43:53 +0900
Subject: [PATCH 279/539] Add untilId param

---
 src/server/api/endpoints/notes/search_by_tag.ts | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 7beb97aec6..0703210017 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -87,6 +87,12 @@ export const meta = {
 			}
 		}),
 
+		untilId: $.type(ID).optional.note({
+			desc: {
+				'ja-JP': '指定すると、この投稿を基点としてより古い投稿を取得します'
+			}
+		}),
+
 		sinceDate: $.num.optional.note({
 		}),
 
@@ -318,6 +324,14 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		}
 	}
 
+	if (ps.untilId) {
+		push({
+			_id: {
+				$lt: ps.untilId
+			}
+		});
+	}
+
 	if (ps.sinceDate) {
 		push({
 			createdAt: {

From f97cdfaa2099ab4c29b980693d3caa5c828d64a4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 11:59:24 +0900
Subject: [PATCH 280/539] Fix #2725

---
 src/remote/activitypub/misc/get-note-html.ts | 12 ------------
 src/remote/activitypub/renderer/note.ts      | 14 ++++++++++++++
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/remote/activitypub/misc/get-note-html.ts b/src/remote/activitypub/misc/get-note-html.ts
index f92e91c34e..0a607bd48c 100644
--- a/src/remote/activitypub/misc/get-note-html.ts
+++ b/src/remote/activitypub/misc/get-note-html.ts
@@ -1,22 +1,10 @@
 import { INote } from '../../../models/note';
 import toHtml from '../../../mfm/html';
 import parse from '../../../mfm/parse';
-import config from '../../../config';
 
 export default function(note: INote) {
 	let html = toHtml(parse(note.text), note.mentionedRemoteUsers);
 	if (html == null) html = '';
 
-	if (note.poll != null) {
-		const url = `${config.url}/notes/${note._id}`;
-		// TODO: i18n
-		html += `<p><a href="${url}">【Misskeyで投票を見る】</a></p>`;
-	}
-
-	if (note.renoteId != null) {
-		const url = `${config.url}/notes/${note.renoteId}`;
-		html += `<p>RE: <a href="${url}">${url}</a></p>`;
-	}
-
 	return html;
 }
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 5d28e5f450..3ed6a6e16a 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -82,6 +82,20 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 
 	const files = await promisedFiles;
 
+	if (note.poll != null) {
+		if (note.text == null) note.text = '';
+		const url = `${config.url}/notes/${note._id}`;
+		// TODO: i18n
+		note.text += `\n\n[投票を見る](${url})`;
+	}
+
+	if (note.renoteId != null) {
+		if (note.text == null) note.text = '';
+		const url = `${config.url}/notes/${note.renoteId}`;
+		note.text += `\n\nRE: ${url}`;
+	}
+
+	// 省略されたメンションのホストを復元する
 	const text = note.text ? parseMfm(note.text).map(x => {
 		if (x.type == 'mention' && x.host == null) {
 			return `${x.content}@${config.host}`;

From 62509edcbe84ec922203aebfe10758a9fa0f61ce Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 12:18:59 +0900
Subject: [PATCH 281/539] Refactor

---
 src/remote/activitypub/renderer/note.ts | 28 ++++++++++++++-----------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index 3ed6a6e16a..b3ce1c03e4 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -82,34 +82,38 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
 
 	const files = await promisedFiles;
 
+	let text = note.text;
+
 	if (note.poll != null) {
-		if (note.text == null) note.text = '';
+		if (text == null) text = '';
 		const url = `${config.url}/notes/${note._id}`;
 		// TODO: i18n
-		note.text += `\n\n[投票を見る](${url})`;
+		text += `\n\n[投票を見る](${url})`;
 	}
 
 	if (note.renoteId != null) {
-		if (note.text == null) note.text = '';
+		if (text == null) text = '';
 		const url = `${config.url}/notes/${note.renoteId}`;
-		note.text += `\n\nRE: ${url}`;
+		text += `\n\nRE: ${url}`;
 	}
 
 	// 省略されたメンションのホストを復元する
-	const text = note.text ? parseMfm(note.text).map(x => {
-		if (x.type == 'mention' && x.host == null) {
-			return `${x.content}@${config.host}`;
-		} else {
-			return x.content;
-		}
-	}).join('') : null;
+	if (text != null) {
+		text = parseMfm(text).map(x => {
+			if (x.type == 'mention' && x.host == null) {
+				return `${x.content}@${config.host}`;
+			} else {
+				return x.content;
+			}
+		}).join('');
+	}
 
 	return {
 		id: `${config.url}/notes/${note._id}`,
 		type: 'Note',
 		attributedTo,
 		summary: note.cw,
-		content: toHtml(note),
+		content: toHtml(Object.assign({}, note, { text })),
 		_misskey_content: text,
 		published: note.createdAt.toISOString(),
 		to,

From 71bada97df5e431d362f7f37fdeef69137dcf3fb Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 12:19:54 +0900
Subject: [PATCH 282/539] 8.45.1

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index aabe65c356..13083b046c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.45.0",
-	"clientVersion": "1.0.9834",
+	"version": "8.45.1",
+	"clientVersion": "1.0.9840",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 0632a3ed3f8aba6ec4f08f5eaa051a33843ab9e0 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Mon, 17 Sep 2018 08:10:08 +0000
Subject: [PATCH 283/539] fix(package): update @types/node to version 10.10.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 13083b046c..45bcb6854c 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.9.4",
+		"@types/node": "10.10.0",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.2.0",

From f5a937c523b2165dedd1edd94267c3a0efb5a7a4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 22:51:10 +0900
Subject: [PATCH 284/539] Better hashtag parsing

---
 src/mfm/parse/elements/hashtag.ts |  4 ++--
 test/mfm.ts                       | 13 +++++++++++--
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/mfm/parse/elements/hashtag.ts b/src/mfm/parse/elements/hashtag.ts
index f4b6a78fa8..339026228a 100644
--- a/src/mfm/parse/elements/hashtag.ts
+++ b/src/mfm/parse/elements/hashtag.ts
@@ -9,9 +9,9 @@ export type TextElementHashtag = {
 };
 
 export default function(text: string, i: number) {
-	if (!(/^\s#[^\s]+/.test(text) || (i == 0 && /^#[^\s]+/.test(text)))) return null;
+	if (!(/^\s#[^\s\.,]+/.test(text) || (i == 0 && /^#[^\s\.,]+/.test(text)))) return null;
 	const isHead = text.startsWith('#');
-	const hashtag = text.match(/^\s?#[^\s]+/)[0];
+	const hashtag = text.match(/^\s?#[^\s\.,]+/)[0];
 	const res: any[] = !isHead ? [{
 		type: 'text',
 		content: text[0]
diff --git a/test/mfm.ts b/test/mfm.ts
index 901ffb80e3..a015092f0c 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -71,11 +71,20 @@ describe('Text', () => {
 		});
 
 		it('hashtag', () => {
-			const tokens = analyze('Strawberry Pasta #alice');
+			const tokens1 = analyze('Strawberry Pasta #alice');
 			assert.deepEqual([
 				{ type: 'text', content: 'Strawberry Pasta ' },
 				{ type: 'hashtag', content: '#alice', hashtag: 'alice' }
-			], tokens);
+			], tokens1);
+
+			const tokens2 = analyze('Foo #bar, baz #piyo.');
+			assert.deepEqual([
+				{ type: 'text', content: 'Foo ' },
+				{ type: 'hashtag', content: '#bar', hashtag: 'bar' },
+				{ type: 'text', content: ', baz ' },
+				{ type: 'hashtag', content: '#piyo', hashtag: 'piyo' },
+				{ type: 'text', content: '.' }
+			], tokens2);
 		});
 
 		it('url', () => {

From 311b4e90cac635ba50d662db7e87eece28cf4699 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 22:51:25 +0900
Subject: [PATCH 285/539] No lint when test

---
 gulpfile.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gulpfile.ts b/gulpfile.ts
index da111b2982..8a4a74d26c 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -78,7 +78,7 @@ gulp.task('build:copy', ['build:copy:views', 'build:copy:lang'], () =>
 	]).pipe(gulp.dest('./built/'))
 );
 
-gulp.task('test', ['lint', 'mocha']);
+gulp.task('test', ['mocha']);
 
 gulp.task('lint', () =>
 	gulp.src('./src/**/*.ts')

From 44f6fe6f1fa3873d6b6950dc5746725f014a1bb1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 17 Sep 2018 23:07:15 +0900
Subject: [PATCH 286/539] Refactor: Extract shouldMuteThisNote function

---
 src/misc/should-mute-this-note.ts        | 15 +++++++++++++++
 src/server/api/stream/global-timeline.ts | 14 +++-----------
 src/server/api/stream/hashtag.ts         | 14 +++-----------
 src/server/api/stream/home.ts            | 11 ++---------
 src/server/api/stream/hybrid-timeline.ts | 14 +++-----------
 src/server/api/stream/local-timeline.ts  | 14 +++-----------
 6 files changed, 29 insertions(+), 53 deletions(-)
 create mode 100644 src/misc/should-mute-this-note.ts

diff --git a/src/misc/should-mute-this-note.ts b/src/misc/should-mute-this-note.ts
new file mode 100644
index 0000000000..c818115a3c
--- /dev/null
+++ b/src/misc/should-mute-this-note.ts
@@ -0,0 +1,15 @@
+export default function(note: any, mutedUserIds: string[]): boolean {
+	if (mutedUserIds.indexOf(note.userId) != -1) {
+		return true;
+	}
+
+	if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
+		return true;
+	}
+
+	if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
+		return true;
+	}
+
+	return false;
+}
diff --git a/src/server/api/stream/global-timeline.ts b/src/server/api/stream/global-timeline.ts
index 4786450cbb..03852fb181 100644
--- a/src/server/api/stream/global-timeline.ts
+++ b/src/server/api/stream/global-timeline.ts
@@ -3,6 +3,7 @@ import Xev from 'xev';
 
 import { IUser } from '../../../models/user';
 import Mute from '../../../models/mute';
+import shouldMuteThisNote from '../../../misc/should-mute-this-note';
 
 export default async function(
 	request: websocket.request,
@@ -15,17 +16,8 @@ export default async function(
 
 	// Subscribe stream
 	subscriber.on('global-timeline', async note => {
-		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (mutedUserIds.indexOf(note.userId) != -1) {
-			return;
-		}
-		if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
-			return;
-		}
-		if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
-			return;
-		}
-		//#endregion
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, mutedUserIds)) return;
 
 		connection.send(JSON.stringify({
 			type: 'note',
diff --git a/src/server/api/stream/hashtag.ts b/src/server/api/stream/hashtag.ts
index db2806e796..54da4f9ad9 100644
--- a/src/server/api/stream/hashtag.ts
+++ b/src/server/api/stream/hashtag.ts
@@ -4,6 +4,7 @@ import Xev from 'xev';
 import { IUser } from '../../../models/user';
 import Mute from '../../../models/mute';
 import { pack } from '../../../models/note';
+import shouldMuteThisNote from '../../../misc/should-mute-this-note';
 
 export default async function(
 	request: websocket.request,
@@ -28,17 +29,8 @@ export default async function(
 			});
 		}
 
-		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (mutedUserIds.indexOf(note.userId) != -1) {
-			return;
-		}
-		if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
-			return;
-		}
-		if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
-			return;
-		}
-		//#endregion
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, mutedUserIds)) return;
 
 		connection.send(JSON.stringify({
 			type: 'note',
diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts
index 5f3b6744b2..f1fced42d7 100644
--- a/src/server/api/stream/home.ts
+++ b/src/server/api/stream/home.ts
@@ -8,6 +8,7 @@ import { pack as packNote, pack } from '../../../models/note';
 import readNotification from '../common/read-notification';
 import call from '../call';
 import { IApp } from '../../../models/app';
+import shouldMuteThisNote from '../../../misc/should-mute-this-note';
 
 const log = debug('misskey');
 
@@ -45,15 +46,7 @@ export default async function(
 
 		//#region 流れてきたメッセージがミュートしているユーザーが関わるものだったら無視する
 		if (x.type == 'note') {
-			if (mutedUserIds.includes(x.body.userId)) {
-				return;
-			}
-			if (x.body.reply != null && mutedUserIds.includes(x.body.reply.userId)) {
-				return;
-			}
-			if (x.body.renote != null && mutedUserIds.includes(x.body.renote.userId)) {
-				return;
-			}
+			if (shouldMuteThisNote(x.body, mutedUserIds)) return;
 		} else if (x.type == 'notification') {
 			if (mutedUserIds.includes(x.body.userId)) {
 				return;
diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts
index d0dae9b0dd..045b822783 100644
--- a/src/server/api/stream/hybrid-timeline.ts
+++ b/src/server/api/stream/hybrid-timeline.ts
@@ -4,6 +4,7 @@ import Xev from 'xev';
 import { IUser } from '../../../models/user';
 import Mute from '../../../models/mute';
 import { pack } from '../../../models/note';
+import shouldMuteThisNote from '../../../misc/should-mute-this-note';
 
 export default async function(
 	request: websocket.request,
@@ -26,17 +27,8 @@ export default async function(
 			});
 		}
 
-		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (mutedUserIds.indexOf(note.userId) != -1) {
-			return;
-		}
-		if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
-			return;
-		}
-		if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
-			return;
-		}
-		//#endregion
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, mutedUserIds)) return;
 
 		connection.send(JSON.stringify({
 			type: 'note',
diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts
index e21c071bab..ae054a5f9f 100644
--- a/src/server/api/stream/local-timeline.ts
+++ b/src/server/api/stream/local-timeline.ts
@@ -4,6 +4,7 @@ import Xev from 'xev';
 import { IUser } from '../../../models/user';
 import Mute from '../../../models/mute';
 import { pack } from '../../../models/note';
+import shouldMuteThisNote from '../../../misc/should-mute-this-note';
 
 export default async function(
 	request: websocket.request,
@@ -23,17 +24,8 @@ export default async function(
 			});
 		}
 
-		//#region 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (mutedUserIds.indexOf(note.userId) != -1) {
-			return;
-		}
-		if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
-			return;
-		}
-		if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
-			return;
-		}
-		//#endregion
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, mutedUserIds)) return;
 
 		connection.send(JSON.stringify({
 			type: 'note',

From 2fad6e6d5f57955dcf0db903154597a5b8b27700 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 02:13:42 +0900
Subject: [PATCH 287/539] Refactor

---
 src/models/note.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/models/note.ts b/src/models/note.ts
index bb600fc0cb..ce307d061a 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -196,7 +196,7 @@ export const hideNote = async (packedNote: any, meId: mongo.ObjectID) => {
 			hide = false;
 		} else {
 			// 指定されているかどうか
-			const specified = packedNote.visibleUserIds.some((id: mongo.ObjectID) => id.equals(meId));
+			const specified = packedNote.visibleUserIds.some((id: any) => meId.equals(id));
 
 			if (specified) {
 				hide = false;

From ab83e08bc7deb244d35e2315abead473d536d2c3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 02:14:12 +0900
Subject: [PATCH 288/539] =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?=
 =?UTF-8?q?=E3=82=B8=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4=E3=83=B3?=
 =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |   3 +
 .../views/components/timeline.core.vue        | 148 ++++++++++--------
 .../app/desktop/views/components/timeline.vue |  18 ++-
 .../views/pages/deck/deck.column-core.vue     |   5 +-
 .../views/pages/deck/deck.direct-column.vue   |  38 +++++
 .../desktop/views/pages/deck/deck.direct.vue  |  97 ++++++++++++
 .../app/desktop/views/pages/deck/deck.vue     |   9 ++
 .../app/mobile/views/pages/home.timeline.vue  | 147 +++++++++--------
 src/client/app/mobile/views/pages/home.vue    |  49 ++++--
 src/server/api/endpoints/notes/mentions.ts    |   7 +
 src/services/note/create.ts                   |  22 ++-
 11 files changed, 393 insertions(+), 150 deletions(-)
 create mode 100644 src/client/app/desktop/views/pages/deck/deck.direct-column.vue
 create mode 100644 src/client/app/desktop/views/pages/deck/deck.direct.vue

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index a3b2bd88e7..11dd76d0e6 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -169,6 +169,7 @@ common:
     hashtag: "ハッシュタグ"
     global: "グローバル"
     mentions: "あなた宛て"
+    direct: "ダイレクト投稿"
     notifications: "通知"
     list: "リスト"
     swap-left: "左に移動"
@@ -916,6 +917,7 @@ desktop/views/components/timeline.vue:
   hybrid: "ソーシャル"
   global: "グローバル"
   mentions: "あなた宛て"
+  messages: "メッセージ"
   list: "リスト"
   hashtag: "ハッシュタグ"
   add-tag-timeline: "ハッシュタグを追加"
@@ -1322,6 +1324,7 @@ mobile/views/pages/home.vue:
   hybrid: "ソーシャル"
   global: "グローバル"
   mentions: "あなた宛て"
+  messages: "メッセージ"
 
 mobile/views/pages/tag.vue:
   no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index d2176dee87..c8aa36f171 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -38,7 +38,14 @@ export default Vue.extend({
 			streamManager: null,
 			connection: null,
 			connectionId: null,
-			date: null
+			date: null,
+			baseQuery: {
+				includeMyRenotes: this.$store.state.settings.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+			},
+			query: {},
+			endpoint: null
 		};
 	},
 
@@ -47,53 +54,102 @@ export default Vue.extend({
 			return this.$store.state.i.followingCount == 0;
 		},
 
-		endpoint(): string {
-			switch (this.src) {
-				case 'home': return 'notes/timeline';
-				case 'local': return 'notes/local-timeline';
-				case 'hybrid': return 'notes/hybrid-timeline';
-				case 'global': return 'notes/global-timeline';
-				case 'mentions': return 'notes/mentions';
-				case 'tag': return 'notes/search_by_tag';
-			}
-		},
-
 		canFetchMore(): boolean {
 			return !this.moreFetching && !this.fetching && this.existMore;
 		}
 	},
 
 	mounted() {
+		const prepend = note => {
+			(this.$refs.timeline as any).prepend(note);
+		};
+
 		if (this.src == 'tag') {
+			this.endpoint = 'notes/search_by_tag';
+			this.query = {
+				query: this.tagTl.query
+			};
 			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.connection.close();
+			});
 		} else if (this.src == 'home') {
+			this.endpoint = 'notes/timeline';
+			const onChangeFollowing = () => {
+				this.fetch();
+			};
 			this.streamManager = (this as any).os.stream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
-			this.connection.on('follow', this.onChangeFollowing);
-			this.connection.on('unfollow', this.onChangeFollowing);
+			this.connection.on('note', prepend);
+			this.connection.on('follow', onChangeFollowing);
+			this.connection.on('unfollow', onChangeFollowing);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.connection.off('follow', onChangeFollowing);
+				this.connection.off('unfollow', onChangeFollowing);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'local') {
+			this.endpoint = 'notes/local-timeline';
 			this.streamManager = (this as any).os.streams.localTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'hybrid') {
+			this.endpoint = 'notes/hybrid-timeline';
 			this.streamManager = (this as any).os.streams.hybridTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'global') {
+			this.endpoint = 'notes/global-timeline';
 			this.streamManager = (this as any).os.streams.globalTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'mentions') {
+			this.endpoint = 'notes/mentions';
 			this.streamManager = (this as any).os.stream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('mention', this.onNote);
+			this.connection.on('mention', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('mention', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
+		} else if (this.src == 'messages') {
+			this.endpoint = 'notes/mentions';
+			this.query = {
+				visibility: 'specified'
+			};
+			const onNote = note => {
+				if (note.visibility == 'specified') {
+					prepend(note);
+				}
+			};
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('mention', onNote);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('mention', onNote);
+				this.streamManager.dispose(this.connectionId);
+			});
 		}
 
 		document.addEventListener('keydown', this.onKeydown);
@@ -102,28 +158,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		if (this.src == 'tag') {
-			this.connection.off('note', this.onNote);
-			this.connection.close();
-		} else if (this.src == 'home') {
-			this.connection.off('note', this.onNote);
-			this.connection.off('follow', this.onChangeFollowing);
-			this.connection.off('unfollow', this.onChangeFollowing);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'local') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'hybrid') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'global') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'mentions') {
-			this.connection.off('mention', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		}
-
+		this.$emit('beforeDestroy');
 		document.removeEventListener('keydown', this.onKeydown);
 	},
 
@@ -132,14 +167,10 @@ export default Vue.extend({
 			this.fetching = true;
 
 			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
-				(this as any).api(this.endpoint, {
+				(this as any).api(this.endpoint, Object.assign({
 					limit: fetchLimit + 1,
-					untilDate: this.date ? this.date.getTime() : undefined,
-					includeMyRenotes: this.$store.state.settings.showMyRenotes,
-					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
-					query: this.tagTl ? this.tagTl.query : undefined
-				}).then(notes => {
+					untilDate: this.date ? this.date.getTime() : undefined
+				}, this.baseQuery, this.query)).then(notes => {
 					if (notes.length == fetchLimit + 1) {
 						notes.pop();
 						this.existMore = true;
@@ -156,14 +187,10 @@ export default Vue.extend({
 
 			this.moreFetching = true;
 
-			const promise = (this as any).api(this.endpoint, {
+			const promise = (this as any).api(this.endpoint, Object.assign({
 				limit: fetchLimit + 1,
-				untilId: (this.$refs.timeline as any).tail().id,
-				includeMyRenotes: this.$store.state.settings.showMyRenotes,
-				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
-				query: this.tagTl ? this.tagTl.query : undefined
-			});
+				untilId: (this.$refs.timeline as any).tail().id
+			}, this.baseQuery, this.query));
 
 			promise.then(notes => {
 				if (notes.length == fetchLimit + 1) {
@@ -178,15 +205,6 @@ export default Vue.extend({
 			return promise;
 		},
 
-		onNote(note) {
-			// Prepend a note
-			(this.$refs.timeline as any).prepend(note);
-		},
-
-		onChangeFollowing() {
-			this.fetch();
-		},
-
 		focus() {
 			(this.$refs.timeline as any).focus();
 		},
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 2dc84004df..ccc35f95ff 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -5,10 +5,11 @@
 		<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
 		<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 		<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
-		<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
 		<span :data-active="src == 'tag'" @click="src = 'tag'" v-if="tagTl">%fa:hashtag% {{ tagTl.title }}</span>
 		<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
 		<div class="buttons">
+			<button :data-active="src == 'mentions'" @click="src = 'mentions'" title="%i18n:@mentions%">%fa:at%</button>
+			<button :data-active="src == 'messages'" @click="src = 'messages'" title="%i18n:@messages%">%fa:envelope R%</button>
 			<button @click="chooseTag" title="%i18n:@hashtag%" ref="tagButton">%fa:hashtag%</button>
 			<button @click="chooseList" title="%i18n:@list%" ref="listButton">%fa:list%</button>
 		</div>
@@ -18,6 +19,7 @@
 	<x-core v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 	<x-core v-if="src == 'global'" ref="tl" key="global" src="global"/>
 	<x-core v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
+	<x-core v-if="src == 'messages'" ref="tl" key="messages" src="messages"/>
 	<x-core v-if="src == 'tag'" ref="tl" key="tag" src="tag" :tag-tl="tagTl"/>
 	<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 </div>
@@ -202,6 +204,20 @@ root(isDark)
 				&:active
 					color isDark ? #b2c1d5 : #999
 
+				&[data-active]
+					color $theme-color
+					cursor default
+
+					&:before
+						content ""
+						display block
+						position absolute
+						bottom 0
+						left 0
+						width 100%
+						height 2px
+						background $theme-color
+
 		> span
 			display inline-block
 			padding 0 10px
diff --git a/src/client/app/desktop/views/pages/deck/deck.column-core.vue b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
index a320f697b3..e1490cb0e4 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column-core.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column-core.vue
@@ -8,6 +8,7 @@
 <x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked"/>
 <x-tl-column v-else-if="column.type == 'hashtag'" :column="column" :is-stacked="isStacked"/>
 <x-mentions-column v-else-if="column.type == 'mentions'" :column="column" :is-stacked="isStacked"/>
+<x-direct-column v-else-if="column.type == 'direct'" :column="column" :is-stacked="isStacked"/>
 </template>
 
 <script lang="ts">
@@ -16,13 +17,15 @@ import XTlColumn from './deck.tl-column.vue';
 import XNotificationsColumn from './deck.notifications-column.vue';
 import XWidgetsColumn from './deck.widgets-column.vue';
 import XMentionsColumn from './deck.mentions-column.vue';
+import XDirectColumn from './deck.direct-column.vue';
 
 export default Vue.extend({
 	components: {
 		XTlColumn,
 		XNotificationsColumn,
 		XWidgetsColumn,
-		XMentionsColumn
+		XMentionsColumn,
+		XDirectColumn
 	},
 
 	props: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.direct-column.vue b/src/client/app/desktop/views/pages/deck/deck.direct-column.vue
new file mode 100644
index 0000000000..d5093761f4
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.direct-column.vue
@@ -0,0 +1,38 @@
+<template>
+<x-column :name="name" :column="column" :is-stacked="isStacked">
+	<span slot="header">%fa:envelope R%{{ name }}</span>
+
+	<x-direct/>
+</x-column>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XColumn from './deck.column.vue';
+import XDirect from './deck.direct.vue';
+
+export default Vue.extend({
+	components: {
+		XColumn,
+		XDirect
+	},
+
+	props: {
+		column: {
+			type: Object,
+			required: true
+		},
+		isStacked: {
+			type: Boolean,
+			required: true
+		}
+	},
+
+	computed: {
+		name(): string {
+			if (this.column.name) return this.column.name;
+			return '%i18n:common.deck.direct%';
+		}
+	},
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.direct.vue b/src/client/app/desktop/views/pages/deck/deck.direct.vue
new file mode 100644
index 0000000000..ec9e6b9c3d
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.direct.vue
@@ -0,0 +1,97 @@
+<template>
+	<x-notes ref="timeline" :more="existMore ? more : null"/>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XNotes from './deck.notes.vue';
+
+const fetchLimit = 10;
+
+export default Vue.extend({
+	components: {
+		XNotes
+	},
+
+	props: {
+	},
+
+	data() {
+		return {
+			fetching: true,
+			moreFetching: false,
+			existMore: false,
+			connection: null,
+			connectionId: null
+		};
+	},
+
+	mounted() {
+		this.connection = (this as any).os.stream.getConnection();
+		this.connectionId = (this as any).os.stream.use();
+
+		this.connection.on('mention', this.onNote);
+
+		this.fetch();
+	},
+
+	beforeDestroy() {
+		this.connection.off('mention', this.onNote);
+		(this as any).os.stream.dispose(this.connectionId);
+	},
+
+	methods: {
+		fetch() {
+			this.fetching = true;
+
+			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
+				(this as any).api('notes/mentions', {
+					limit: fetchLimit + 1,
+					includeMyRenotes: this.$store.state.settings.showMyRenotes,
+					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+					visibility: 'specified'
+				}).then(notes => {
+					if (notes.length == fetchLimit + 1) {
+						notes.pop();
+						this.existMore = true;
+					}
+					res(notes);
+					this.fetching = false;
+					this.$emit('loaded');
+				}, rej);
+			}));
+		},
+		more() {
+			this.moreFetching = true;
+
+			const promise = (this as any).api('notes/mentions', {
+				limit: fetchLimit + 1,
+				untilId: (this.$refs.timeline as any).tail().id,
+				includeMyRenotes: this.$store.state.settings.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
+				visibility: 'specified'
+			});
+
+			promise.then(notes => {
+				if (notes.length == fetchLimit + 1) {
+					notes.pop();
+				} else {
+					this.existMore = false;
+				}
+				notes.forEach(n => (this.$refs.timeline as any).append(n));
+				this.moreFetching = false;
+			});
+
+			return promise;
+		},
+		onNote(note) {
+			// Prepend a note
+			if (note.visibility == 'specified') {
+				(this.$refs.timeline as any).prepend(note);
+			}
+		}
+	}
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index aafe9a45d3..e5aeba251a 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -147,6 +147,15 @@ export default Vue.extend({
 							type: 'mentions'
 						});
 					}
+				}, {
+					icon: '%fa:envelope R%',
+					text: '%i18n:common.deck.direct%',
+					action: () => {
+						this.$store.dispatch('settings/addDeckColumn', {
+							id: uuid(),
+							type: 'direct'
+						});
+					}
 				}, {
 					icon: '%fa:list%',
 					text: '%i18n:common.deck.list%',
diff --git a/src/client/app/mobile/views/pages/home.timeline.vue b/src/client/app/mobile/views/pages/home.timeline.vue
index fecb2384ba..225abcff6b 100644
--- a/src/client/app/mobile/views/pages/home.timeline.vue
+++ b/src/client/app/mobile/views/pages/home.timeline.vue
@@ -37,7 +37,14 @@ export default Vue.extend({
 			connection: null,
 			connectionId: null,
 			unreadCount: 0,
-			date: null
+			date: null,
+			baseQuery: {
+				includeMyRenotes: this.$store.state.settings.showMyRenotes,
+				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
+				includeLocalRenotes: this.$store.state.settings.showLocalRenotes
+			},
+			query: {},
+			endpoint: null
 		};
 	},
 
@@ -46,80 +53,109 @@ export default Vue.extend({
 			return this.$store.state.i.followingCount == 0;
 		},
 
-		endpoint(): string {
-			switch (this.src) {
-				case 'home': return 'notes/timeline';
-				case 'local': return 'notes/local-timeline';
-				case 'hybrid': return 'notes/hybrid-timeline';
-				case 'global': return 'notes/global-timeline';
-				case 'mentions': return 'notes/mentions';
-				case 'tag': return 'notes/search_by_tag';
-			}
-		},
-
 		canFetchMore(): boolean {
 			return !this.moreFetching && !this.fetching && this.existMore;
 		}
 	},
 
 	mounted() {
+		const prepend = note => {
+			(this.$refs.timeline as any).prepend(note);
+		};
+
 		if (this.src == 'tag') {
+			this.endpoint = 'notes/search_by_tag';
+			this.query = {
+				query: this.tagTl.query
+			};
 			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.connection.close();
+			});
 		} else if (this.src == 'home') {
+			this.endpoint = 'notes/timeline';
+			const onChangeFollowing = () => {
+				this.fetch();
+			};
 			this.streamManager = (this as any).os.stream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
-			this.connection.on('follow', this.onChangeFollowing);
-			this.connection.on('unfollow', this.onChangeFollowing);
+			this.connection.on('note', prepend);
+			this.connection.on('follow', onChangeFollowing);
+			this.connection.on('unfollow', onChangeFollowing);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.connection.off('follow', onChangeFollowing);
+				this.connection.off('unfollow', onChangeFollowing);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'local') {
+			this.endpoint = 'notes/local-timeline';
 			this.streamManager = (this as any).os.streams.localTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'hybrid') {
+			this.endpoint = 'notes/hybrid-timeline';
 			this.streamManager = (this as any).os.streams.hybridTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'global') {
+			this.endpoint = 'notes/global-timeline';
 			this.streamManager = (this as any).os.streams.globalTimelineStream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('note', this.onNote);
+			this.connection.on('note', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('note', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
 		} else if (this.src == 'mentions') {
+			this.endpoint = 'notes/mentions';
 			this.streamManager = (this as any).os.stream;
 			this.connection = this.streamManager.getConnection();
 			this.connectionId = this.streamManager.use();
-			this.connection.on('mention', this.onNote);
+			this.connection.on('mention', prepend);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('mention', prepend);
+				this.streamManager.dispose(this.connectionId);
+			});
+		} else if (this.src == 'messages') {
+			this.endpoint = 'notes/mentions';
+			this.query = {
+				visibility: 'specified'
+			};
+			const onNote = note => {
+				if (note.visibility == 'specified') {
+					prepend(note);
+				}
+			};
+			this.streamManager = (this as any).os.stream;
+			this.connection = this.streamManager.getConnection();
+			this.connectionId = this.streamManager.use();
+			this.connection.on('mention', onNote);
+			this.$once('beforeDestroy', () => {
+				this.connection.off('mention', onNote);
+				this.streamManager.dispose(this.connectionId);
+			});
 		}
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		if (this.src == 'tag') {
-			this.connection.off('note', this.onNote);
-			this.connection.close();
-		} else if (this.src == 'home') {
-			this.connection.off('note', this.onNote);
-			this.connection.off('follow', this.onChangeFollowing);
-			this.connection.off('unfollow', this.onChangeFollowing);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'local') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'hybrid') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'global') {
-			this.connection.off('note', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		} else if (this.src == 'mentions') {
-			this.connection.off('mention', this.onNote);
-			this.streamManager.dispose(this.connectionId);
-		}
+		this.$emit('beforeDestroy');
 	},
 
 	methods: {
@@ -127,14 +163,10 @@ export default Vue.extend({
 			this.fetching = true;
 
 			(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
-				(this as any).api(this.endpoint, {
+				(this as any).api(this.endpoint, Object.assign({
 					limit: fetchLimit + 1,
-					untilDate: this.date ? this.date.getTime() : undefined,
-					includeMyRenotes: this.$store.state.settings.showMyRenotes,
-					includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-					includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
-					query: this.tagTl ? this.tagTl.query : undefined
-				}).then(notes => {
+					untilDate: this.date ? this.date.getTime() : undefined
+				}, this.baseQuery, this.query)).then(notes => {
 					if (notes.length == fetchLimit + 1) {
 						notes.pop();
 						this.existMore = true;
@@ -151,14 +183,10 @@ export default Vue.extend({
 
 			this.moreFetching = true;
 
-			const promise = (this as any).api(this.endpoint, {
+			const promise = (this as any).api(this.endpoint, Object.assign({
 				limit: fetchLimit + 1,
-				untilId: (this.$refs.timeline as any).tail().id,
-				includeMyRenotes: this.$store.state.settings.showMyRenotes,
-				includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
-				includeLocalRenotes: this.$store.state.settings.showLocalRenotes,
-				query: this.tagTl ? this.tagTl.query : undefined
-			});
+				untilId: (this.$refs.timeline as any).tail().id
+			}, this.baseQuery, this.query));
 
 			promise.then(notes => {
 				if (notes.length == fetchLimit + 1) {
@@ -173,15 +201,6 @@ export default Vue.extend({
 			return promise;
 		},
 
-		onNote(note) {
-			// Prepend a note
-			(this.$refs.timeline as any).prepend(note);
-		},
-
-		onChangeFollowing() {
-			this.fetch();
-		},
-
 		focus() {
 			(this.$refs.timeline as any).focus();
 		},
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 3ec2f16b75..e61916fe18 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -7,6 +7,7 @@
 			<span v-if="src == 'hybrid'">%fa:share-alt%%i18n:@hybrid%</span>
 			<span v-if="src == 'global'">%fa:globe%%i18n:@global%</span>
 			<span v-if="src == 'mentions'">%fa:at%%i18n:@mentions%</span>
+			<span v-if="src == 'messages'">%fa:envelope R%%i18n:@messages%</span>
 			<span v-if="src == 'list'">%fa:list%{{ list.title }}</span>
 			<span v-if="src == 'tag'">%fa:hashtag%{{ tagTl.title }}</span>
 		</span>
@@ -23,16 +24,21 @@
 	<main :data-darkmode="$store.state.device.darkmode">
 		<div class="nav" v-if="showNav">
 			<div class="bg" @click="showNav = false"></div>
+			<div class="pointer"></div>
 			<div class="body">
 				<div>
 					<span :data-active="src == 'home'" @click="src = 'home'">%fa:home% %i18n:@home%</span>
 					<span :data-active="src == 'local'" @click="src = 'local'" v-if="enableLocalTimeline">%fa:R comments% %i18n:@local%</span>
 					<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 					<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
+					<div class="hr"></div>
 					<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
+					<span :data-active="src == 'messages'" @click="src = 'messages'">%fa:envelope R% %i18n:@messages%</span>
 					<template v-if="lists">
+						<div class="hr"></div>
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
 					</template>
+					<div class="hr" v-if="$store.state.settings.tagTimelines && $store.state.settings.tagTimelines.length > 0"></div>
 					<span v-for="tl in $store.state.settings.tagTimelines" :data-active="src == 'tag' && tagTl == tl" @click="src = 'tag'; tagTl = tl" :key="tl.id">%fa:hashtag% {{ tl.title }}</span>
 				</div>
 			</div>
@@ -44,6 +50,7 @@
 			<x-tl v-if="src == 'hybrid'" ref="tl" key="hybrid" src="hybrid"/>
 			<x-tl v-if="src == 'global'" ref="tl" key="global" src="global"/>
 			<x-tl v-if="src == 'mentions'" ref="tl" key="mentions" src="mentions"/>
+			<x-tl v-if="src == 'messages'" ref="tl" key="messages" src="messages"/>
 			<x-tl v-if="src == 'tag'" ref="tl" key="tag" src="tag" :tag-tl="tagTl"/>
 			<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
 		</div>
@@ -150,6 +157,26 @@ export default Vue.extend({
 
 root(isDark)
 	> .nav
+		> .pointer
+			position fixed
+			z-index 10002
+			top 56px
+			left 0
+			right 0
+
+			$size = 16px
+
+			&:after
+				content ""
+				display block
+				position absolute
+				top -($size * 2)
+				left s('calc(50% - %s)', $size)
+				border-top solid $size transparent
+				border-left solid $size transparent
+				border-right solid $size transparent
+				border-bottom solid $size isDark ? #272f3a : #fff
+
 		> .bg
 			position fixed
 			z-index 10000
@@ -166,28 +193,22 @@ root(isDark)
 			left 0
 			right 0
 			width 300px
+			max-height calc(100% - 70px)
 			margin 0 auto
+			overflow auto
+			-webkit-overflow-scrolling touch
 			background isDark ? #272f3a : #fff
 			border-radius 8px
 			box-shadow 0 0 16px rgba(#000, 0.1)
 
-			$balloon-size = 16px
-
-			&:after
-				content ""
-				display block
-				position absolute
-				top -($balloon-size * 2) + 1.5px
-				left s('calc(50% - %s)', $balloon-size)
-				border-top solid $balloon-size transparent
-				border-left solid $balloon-size transparent
-				border-right solid $balloon-size transparent
-				border-bottom solid $balloon-size isDark ? #272f3a : #fff
-
 			> div
 				padding 8px 0
 
-				> *
+				> .hr
+					margin 8px 0
+					border-top solid 1px isDark ? rgba(#000, 0.3) : rgba(#000, 0.1)
+
+				> *:not(.hr)
 					display block
 					padding 8px 16px
 					color isDark ? #cdd0d8 : #666
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index 3b2e262e4f..8675a9f562 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -27,6 +27,9 @@ export const meta = {
 
 		untilId: $.type(ID).optional.note({
 		}),
+
+		visibility: $.str.optional.note({
+		}),
 	}
 };
 
@@ -52,6 +55,10 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		_id: -1
 	};
 
+	if (ps.visibility) {
+		query.visibility = ps.visibility;
+	}
+
 	if (ps.following) {
 		const followingIds = await getFriendIds(user._id);
 
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 7daf83b294..7c1e71dcb3 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -142,6 +142,14 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 		mentionedUsers.push(await User.findOne({ _id: data.reply.userId }));
 	}
 
+	if (data.visibility == 'specified') {
+		data.visibleUsers.forEach(u => {
+			if (!mentionedUsers.some(x => x._id.equals(u._id))) {
+				mentionedUsers.push(u);
+			}
+		});
+	}
+
 	const note = await insertNote(user, data, tags, mentionedUsers);
 
 	res(note);
@@ -188,7 +196,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 	const nm = new NotificationManager(user, note);
 	const nmRelatedPromises = [];
 
-	createMentionedEvents(mentionedUsers, noteObj, nm);
+	createMentionedEvents(mentionedUsers, note, nm);
 
 	const noteActivity = await renderActivity(data, note);
 
@@ -318,7 +326,7 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 
 	if (['public', 'home', 'followers'].includes(note.visibility)) {
 		// フォロワーに配信
-		publishToFollowers(note, noteObj, user, noteActivity);
+		publishToFollowers(note, user, noteActivity);
 	}
 
 	// リストに配信
@@ -456,7 +464,7 @@ async function publishToUserLists(note: INote, noteObj: any) {
 	});
 }
 
-async function publishToFollowers(note: INote, noteObj: any, user: IUser, noteActivity: any) {
+async function publishToFollowers(note: INote, user: IUser, noteActivity: any) {
 	const detailPackedNote = await pack(note, null, {
 		detail: true,
 		skipHide: true
@@ -505,9 +513,13 @@ function deliverNoteToMentionedRemoteUsers(mentionedUsers: IUser[], user: ILocal
 	});
 }
 
-function createMentionedEvents(mentionedUsers: IUser[], noteObj: any, nm: NotificationManager) {
+function createMentionedEvents(mentionedUsers: IUser[], note: INote, nm: NotificationManager) {
 	mentionedUsers.filter(u => isLocalUser(u)).forEach(async (u) => {
-		publishUserStream(u._id, 'mention', noteObj);
+		const detailPackedNote = await pack(note, u, {
+			detail: true
+		});
+
+		publishUserStream(u._id, 'mention', detailPackedNote);
 
 		// Create notification
 		nm.push(u._id, 'mention');

From ce3797c4af7e5bee99f3352e34342b484b1f46a1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 02:15:19 +0900
Subject: [PATCH 289/539] 8.46.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 13083b046c..fca60a9b73 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.45.1",
-	"clientVersion": "1.0.9840",
+	"version": "8.46.0",
+	"clientVersion": "1.0.9851",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From df148e25da6b6e6d8ecfdadfa6299874f06995da Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Mon, 17 Sep 2018 17:24:15 +0000
Subject: [PATCH 290/539] fix(package): update @types/node to version 10.10.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index ba38f5c626..d5df0c69ca 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.10.0",
+		"@types/node": "10.10.1",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.2.0",

From 31ce3aa31296a1809cabc02f1ed6c92b328f5b3e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 05:35:06 +0900
Subject: [PATCH 291/539] =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=9C=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=82=B7=E3=83=A7=E3=83=BC=E3=83=88=E3=82=AB=E3=83=83?=
 =?UTF-8?q?=E3=83=88=E3=82=92=E5=BC=B7=E5=8C=96=E3=81=99=E3=82=8B=E3=81=AA?=
 =?UTF-8?q?=E3=81=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/hotkey.ts               |  79 ++++++++++
 src/client/app/common/keycode.ts              | 139 ++++++++++++++++++
 .../views/components/reaction-picker.vue      |  35 ++++-
 .../choose-file-from-drive-window.vue         |   2 +-
 .../choose-folder-from-drive-window.vue       |   2 +-
 .../desktop/views/components/drive-window.vue |   2 +-
 .../views/components/followers-window.vue     |   2 +-
 .../views/components/following-window.vue     |   2 +-
 .../desktop/views/components/game-window.vue  |   2 +-
 .../app/desktop/views/components/home.vue     |   4 +
 .../desktop/views/components/input-dialog.vue |   2 +-
 .../components/messaging-room-window.vue      |   2 +-
 .../views/components/messaging-window.vue     |   2 +-
 .../desktop/views/components/notes.note.vue   |  63 ++++----
 .../app/desktop/views/components/notes.vue    |   4 +-
 .../views/components/post-form-window.vue     |   6 +-
 .../views/components/progress-dialog.vue      |   2 +-
 .../received-follow-requests-window.vue       |   2 +-
 .../views/components/renote-form-window.vue   |  33 +++--
 .../views/components/settings-window.vue      |   2 +-
 .../views/components/timeline.core.vue        |  11 --
 .../app/desktop/views/components/timeline.vue |   4 +
 .../app/desktop/views/components/ui.vue       |  35 +++--
 .../views/components/user-lists-window.vue    |   2 +-
 .../app/desktop/views/components/window.vue   |   2 +-
 src/client/app/desktop/views/pages/home.vue   |  12 +-
 src/client/app/init.ts                        |   2 +
 27 files changed, 355 insertions(+), 100 deletions(-)
 create mode 100644 src/client/app/common/hotkey.ts
 create mode 100644 src/client/app/common/keycode.ts

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
new file mode 100644
index 0000000000..10cbeea543
--- /dev/null
+++ b/src/client/app/common/hotkey.ts
@@ -0,0 +1,79 @@
+import keyCode from './keycode';
+
+const getKeyMap = keymap => Object.keys(keymap).map(input => {
+	const result = {} as any;
+
+	const { keyup, keydown } = keymap[input];
+
+	input.split('+').forEach(keyName => {
+		switch (keyName.toLowerCase()) {
+			case 'ctrl':
+			case 'alt':
+			case 'shift':
+			case 'meta':
+				result[keyName] = true;
+				break;
+			default:
+				result.keyCode = keyCode(keyName);
+		}
+	});
+
+	result.callback = {
+		keydown: keydown || keymap[input],
+		keyup
+	};
+
+	return result;
+});
+
+const ignoreElemens = ['input', 'textarea'];
+
+export default {
+	install(Vue) {
+		Vue.directive('hotkey', {
+			bind(el, binding) {
+				el._hotkey_global = binding.modifiers.global === true;
+
+				el._keymap = getKeyMap(binding.value);
+
+				el.dataset.reservedKeyCodes = el._keymap.map(key => `'${key.keyCode}'`).join(' ');
+
+				el._keyHandler = e => {
+					const reservedKeyCodes = document.activeElement ? ((document.activeElement as any).dataset || {}).reservedKeyCodes || '' : '';
+					if (document.activeElement && ignoreElemens.some(el => document.activeElement.matches(el))) return;
+
+					for (const hotkey of el._keymap) {
+						if (el._hotkey_global && reservedKeyCodes.includes(`'${e.keyCode}'`)) break;
+
+						const callback = hotkey.keyCode === e.keyCode &&
+							!!hotkey.ctrl === e.ctrlKey &&
+							!!hotkey.alt === e.altKey &&
+							!!hotkey.shift === e.shiftKey &&
+							!!hotkey.meta === e.metaKey &&
+							hotkey.callback[e.type];
+
+						if (callback) {
+							e.preventDefault();
+							e.stopPropagation();
+							callback(e);
+						}
+					}
+				};
+
+				if (el._hotkey_global) {
+					document.addEventListener('keydown', el._keyHandler);
+				} else {
+					el.addEventListener('keydown', el._keyHandler);
+				}
+			},
+
+			unbind(el) {
+				if (el._hotkey_global) {
+					document.removeEventListener('keydown', el._keyHandler);
+				} else {
+					el.removeEventListener('keydown', el._keyHandler);
+				}
+			}
+		});
+	}
+};
diff --git a/src/client/app/common/keycode.ts b/src/client/app/common/keycode.ts
new file mode 100644
index 0000000000..c5ea6cb484
--- /dev/null
+++ b/src/client/app/common/keycode.ts
@@ -0,0 +1,139 @@
+export default searchInput => {
+	// Keyboard Events
+	if (searchInput && typeof searchInput === 'object') {
+		const hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode;
+		if (hasKeyCode) {
+			searchInput = hasKeyCode;
+		}
+	}
+
+	// Numbers
+	// if (typeof searchInput === 'number') {
+	//   return names[searchInput]
+	// }
+
+	// Everything else (cast to string)
+	const search = String(searchInput);
+
+	// check codes
+	const foundNamedKeyCodes = codes[search.toLowerCase()];
+	if (foundNamedKeyCodes) {
+		return foundNamedKeyCodes;
+	}
+
+	// check aliases
+	const foundNamedKeyAliases = aliases[search.toLowerCase()];
+	if (foundNamedKeyAliases) {
+		return foundNamedKeyAliases;
+	}
+
+	// weird character?
+	if (search.length === 1) {
+		return search.charCodeAt(0);
+	}
+
+	return undefined;
+};
+
+/**
+ * Get by name
+ *
+ *   exports.code['enter'] // => 13
+ */
+
+export const codes = {
+	'backspace': 8,
+	'tab': 9,
+	'enter': 13,
+	'shift': 16,
+	'ctrl': 17,
+	'alt': 18,
+	'pause/break': 19,
+	'caps lock': 20,
+	'esc': 27,
+	'space': 32,
+	'page up': 33,
+	'page down': 34,
+	'end': 35,
+	'home': 36,
+	'left': 37,
+	'up': 38,
+	'right': 39,
+	'down': 40,
+	// 'add': 43,
+	'insert': 45,
+	'delete': 46,
+	'command': 91,
+	'left command': 91,
+	'right command': 93,
+	'numpad *': 106,
+	// 'numpad +': 107,
+	'numpad +': 43,
+	'numpad add': 43, // as a trick
+	'numpad -': 109,
+	'numpad .': 110,
+	'numpad /': 111,
+	'num lock': 144,
+	'scroll lock': 145,
+	'my computer': 182,
+	'my calculator': 183,
+	';': 186,
+	'=': 187,
+	',': 188,
+	'-': 189,
+	'.': 190,
+	'/': 191,
+	'`': 192,
+	'[': 219,
+	'\\': 220,
+	']': 221,
+	"'": 222
+};
+
+// Helper aliases
+
+export const aliases = {
+	'windows': 91,
+	'⇧': 16,
+	'⌥': 18,
+	'⌃': 17,
+	'⌘': 91,
+	'ctl': 17,
+	'control': 17,
+	'option': 18,
+	'pause': 19,
+	'break': 19,
+	'caps': 20,
+	'return': 13,
+	'escape': 27,
+	'spc': 32,
+	'pgup': 33,
+	'pgdn': 34,
+	'ins': 45,
+	'del': 46,
+	'cmd': 91
+};
+
+/*!
+* Programatically add the following
+*/
+
+// lower case chars
+for (let i = 97; i < 123; i++) {
+	codes[String.fromCharCode(i)] = i - 32;
+}
+
+// numbers
+for (let i = 48; i < 58; i++) {
+	codes[i - 48] = i;
+}
+
+// function keys
+for (let i = 1; i < 13; i++) {
+	codes['f' + i] = i + 111;
+}
+
+// numpad keys
+for (let i = 0; i < 10; i++) {
+	codes['numpad ' + i] = i + 96;
+}
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index a4828c987b..58985658c6 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mk-reaction-picker">
+<div class="mk-reaction-picker" v-hotkey.global="keymap">
 	<div class="backdrop" ref="backdrop" @click="close"></div>
 	<div class="popover" :class="{ compact, big }" ref="popover">
 		<p v-if="!compact">{{ title }}</p>
@@ -31,28 +31,51 @@ export default Vue.extend({
 			type: Object,
 			required: true
 		},
+
 		source: {
 			required: true
 		},
+
 		compact: {
 			type: Boolean,
 			required: false,
 			default: false
 		},
+
 		cb: {
 			required: false
 		},
+
 		big: {
 			type: Boolean,
 			required: false,
 			default: false
 		}
 	},
+
 	data() {
 		return {
 			title: placeholder
 		};
 	},
+
+	computed: {
+		keymap(): any {
+			return {
+				'1': () => this.react('like'),
+				'2': () => this.react('love'),
+				'3': () => this.react('laugh'),
+				'4': () => this.react('hmm'),
+				'5': () => this.react('surprise'),
+				'6': () => this.react('congrats'),
+				'7': () => this.react('angry'),
+				'8': () => this.react('confused'),
+				'9': () => this.react('rip'),
+				'0': () => this.react('pudding'),
+			};
+		}
+	},
+
 	mounted() {
 		this.$nextTick(() => {
 			const popover = this.$refs.popover as any;
@@ -88,6 +111,7 @@ export default Vue.extend({
 			});
 		});
 	},
+
 	methods: {
 		react(reaction) {
 			(this as any).api('notes/reactions/create', {
@@ -95,15 +119,19 @@ export default Vue.extend({
 				reaction: reaction
 			}).then(() => {
 				if (this.cb) this.cb();
+				this.$emit('closed');
 				this.destroyDom();
 			});
 		},
+
 		onMouseover(e) {
 			this.title = e.target.title;
 		},
+
 		onMouseout(e) {
 			this.title = placeholder;
 		},
+
 		close() {
 			(this.$refs.backdrop as any).style.pointerEvents = 'none';
 			anime({
@@ -120,7 +148,10 @@ export default Vue.extend({
 				scale: 0.5,
 				duration: 200,
 				easing: 'easeInBack',
-				complete: () => this.destroyDom()
+				complete: () => {
+					this.$emit('closed');
+					this.destroyDom();
+				}
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/components/choose-file-from-drive-window.vue b/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
index b894f0e109..933d31f299 100644
--- a/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
+++ b/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="800px" height="500px" @closed="$destroy">
+<mk-window ref="window" is-modal width="800px" height="500px" @closed="destroyDom">
 	<span slot="header">
 		<span v-html="title" :class="$style.title"></span>
 		<span :class="$style.count" v-if="multiple && files.length > 0">({{ files.length }}%i18n:@choose-file%)</span>
diff --git a/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue b/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
index 0c4643fdcb..03d6fd1636 100644
--- a/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
+++ b/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="800px" height="500px" @closed="$destroy">
+<mk-window ref="window" is-modal width="800px" height="500px" @closed="destroyDom">
 	<span slot="header">
 		<span v-html="title" :class="$style.title"></span>
 	</span>
diff --git a/src/client/app/desktop/views/components/drive-window.vue b/src/client/app/desktop/views/components/drive-window.vue
index 1f45b64324..191579538d 100644
--- a/src/client/app/desktop/views/components/drive-window.vue
+++ b/src/client/app/desktop/views/components/drive-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" @closed="$destroy" width="800px" height="500px" :popout-url="popout">
+<mk-window ref="window" @closed="destroyDom" width="800px" height="500px" :popout-url="popout">
 	<template slot="header">
 		<p v-if="usage" :class="$style.info"><b>{{ usage.toFixed(1) }}%</b> %i18n:@used%</p>
 		<span :class="$style.title">%fa:cloud%%i18n:@drive%</span>
diff --git a/src/client/app/desktop/views/components/followers-window.vue b/src/client/app/desktop/views/components/followers-window.vue
index fdab7bc1ce..d5214adb2f 100644
--- a/src/client/app/desktop/views/components/followers-window.vue
+++ b/src/client/app/desktop/views/components/followers-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window width="400px" height="550px" @closed="$destroy">
+<mk-window width="400px" height="550px" @closed="destroyDom">
 	<span slot="header" :class="$style.header">
 		<img :src="user.avatarUrl" alt=""/>{{ '%i18n:@followers%'.replace('{}', name) }}
 	</span>
diff --git a/src/client/app/desktop/views/components/following-window.vue b/src/client/app/desktop/views/components/following-window.vue
index 7cca833a82..aa9f2bde7b 100644
--- a/src/client/app/desktop/views/components/following-window.vue
+++ b/src/client/app/desktop/views/components/following-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window width="400px" height="550px" @closed="$destroy">
+<mk-window width="400px" height="550px" @closed="destroyDom">
 	<span slot="header" :class="$style.header">
 		<img :src="user.avatarUrl" alt=""/>{{ '%i18n:@following%'.replace('{}', name) }}
 	</span>
diff --git a/src/client/app/desktop/views/components/game-window.vue b/src/client/app/desktop/views/components/game-window.vue
index 7c6cb9cd40..594eae58f8 100644
--- a/src/client/app/desktop/views/components/game-window.vue
+++ b/src/client/app/desktop/views/components/game-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="$destroy">
+<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="destroyDom">
 	<span slot="header" :class="$style.header">%fa:gamepad%%i18n:@game%</span>
 	<mk-reversi :class="$style.content" @gamed="g => game = g"/>
 </mk-window>
diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index d45cc82e13..79c9a9a517 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -237,6 +237,10 @@ export default Vue.extend({
 
 		warp(date) {
 			(this.$refs.tl as any).warp(date);
+		},
+
+		focus() {
+			(this.$refs.tl as any).focus();
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/input-dialog.vue b/src/client/app/desktop/views/components/input-dialog.vue
index e2cf4e48fd..cf7c09ea56 100644
--- a/src/client/app/desktop/views/components/input-dialog.vue
+++ b/src/client/app/desktop/views/components/input-dialog.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="500px" @before-close="beforeClose" @closed="$destroy">
+<mk-window ref="window" is-modal width="500px" @before-close="beforeClose" @closed="destroyDom">
 	<span slot="header" :class="$style.header">
 		%fa:i-cursor%{{ title }}
 	</span>
diff --git a/src/client/app/desktop/views/components/messaging-room-window.vue b/src/client/app/desktop/views/components/messaging-room-window.vue
index 41b421b0e7..3706377607 100644
--- a/src/client/app/desktop/views/components/messaging-room-window.vue
+++ b/src/client/app/desktop/views/components/messaging-room-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="$destroy">
+<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="destroyDom">
 	<span slot="header" :class="$style.header">%fa:comments%%i18n:@title% {{ user | userName }}</span>
 	<mk-messaging-room :user="user" :class="$style.content"/>
 </mk-window>
diff --git a/src/client/app/desktop/views/components/messaging-window.vue b/src/client/app/desktop/views/components/messaging-window.vue
index 9580c5061d..a8f0fc68b9 100644
--- a/src/client/app/desktop/views/components/messaging-window.vue
+++ b/src/client/app/desktop/views/components/messaging-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" width="500px" height="560px" @closed="$destroy">
+<mk-window ref="window" width="500px" height="560px" @closed="destroyDom">
 	<span slot="header" :class="$style.header">%fa:comments%%i18n:@title%</span>
 	<mk-messaging :class="$style.content" @navigate="navigate"/>
 </mk-window>
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 46a866f9a7..fadf47e628 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="note" tabindex="-1" :title="title" @keydown="onKeydown">
+<div class="note" tabindex="-1" v-hotkey="keymap" :title="title">
 	<div class="reply-to" v-if="p.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
 		<x-sub :note="p.reply"/>
 	</div>
@@ -111,6 +111,18 @@ export default Vue.extend({
 	},
 
 	computed: {
+		keymap(): any {
+			return {
+				'r': this.reply,
+				'a': this.react,
+				'n': this.renote,
+				'up': this.focusBefore,
+				'shift+tab': this.focusBefore,
+				'down': this.focusAfter,
+				'tab': this.focusAfter,
+			};
+		},
+
 		isRenote(): boolean {
 			return (this.note.renote &&
 				this.note.text == null &&
@@ -223,64 +235,39 @@ export default Vue.extend({
 		reply() {
 			(this as any).os.new(MkPostFormWindow, {
 				reply: this.p
-			});
+			}).$once('closed', this.focus);
 		},
 
 		renote() {
 			(this as any).os.new(MkRenoteFormWindow, {
 				note: this.p
-			});
+			}).$once('closed', this.focus);
 		},
 
 		react() {
 			(this as any).os.new(MkReactionPicker, {
 				source: this.$refs.reactButton,
 				note: this.p
-			});
+			}).$once('closed', this.focus);
 		},
 
 		menu() {
 			(this as any).os.new(MkNoteMenu, {
 				source: this.$refs.menuButton,
 				note: this.p
-			});
+			}).$once('closed', this.focus);
 		},
 
-		onKeydown(e) {
-			let shouldBeCancel = true;
+		focus() {
+			this.$el.focus();
+		},
 
-			switch (true) {
-				case e.which == 38: // [↑]
-				case e.which == 74: // [j]
-				case e.which == 9 && e.shiftKey: // [Shift] + [Tab]
-					focus(this.$el, e => e.previousElementSibling);
-					break;
+		focusBefore() {
+			focus(this.$el, e => e.previousElementSibling);
+		},
 
-				case e.which == 40: // [↓]
-				case e.which == 75: // [k]
-				case e.which == 9: // [Tab]
-					focus(this.$el, e => e.nextElementSibling);
-					break;
-
-				case e.which == 81: // [q]
-				case e.which == 69: // [e]
-					this.renote();
-					break;
-
-				case e.which == 70: // [f]
-				case e.which == 76: // [l]
-					//this.like();
-					break;
-
-				case e.which == 82: // [r]
-					this.reply();
-					break;
-
-				default:
-					shouldBeCancel = false;
-			}
-
-			if (shouldBeCancel) e.preventDefault();
+		focusAfter() {
+			focus(this.$el, e => e.nextElementSibling);
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index ec9aa285d0..469f62c080 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -12,7 +12,7 @@
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
 	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div">
 		<template v-for="(note, i) in _notes">
-			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
+			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" ref="note"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
 				<span>%fa:angle-up%{{ note._datetext }}</span>
 				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
@@ -89,7 +89,7 @@ export default Vue.extend({
 		},
 
 		focus() {
-			(this.$el as any).children[0].focus();
+			(this.$refs.note as any)[0].focus();
 		},
 
 		onNoteUpdated(i, note) {
diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue
index a88c96d1bf..ade84f6bb9 100644
--- a/src/client/app/desktop/views/components/post-form-window.vue
+++ b/src/client/app/desktop/views/components/post-form-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window class="mk-post-form-window" ref="window" is-modal @closed="$destroy">
+<mk-window class="mk-post-form-window" ref="window" is-modal @closed="onWindowClosed">
 	<span slot="header" class="mk-post-form-window--header">
 		<span class="icon" v-if="geo">%fa:map-marker-alt%</span>
 		<span v-if="!reply">%i18n:@note%</span>
@@ -53,6 +53,10 @@ export default Vue.extend({
 		},
 		onPosted() {
 			(this.$refs.window as any).close();
+		},
+		onWindowClosed() {
+			this.$emit('closed');
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/progress-dialog.vue b/src/client/app/desktop/views/components/progress-dialog.vue
index 2f59733d99..cc25ba8e30 100644
--- a/src/client/app/desktop/views/components/progress-dialog.vue
+++ b/src/client/app/desktop/views/components/progress-dialog.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" :is-modal="false" :can-close="false" width="500px" @closed="$destroy">
+<mk-window ref="window" :is-modal="false" :can-close="false" width="500px" @closed="destroyDom">
 	<span slot="header">{{ title }}<mk-ellipsis/></span>
 	<div :class="$style.body">
 		<p :class="$style.init" v-if="isNaN(value)">%i18n:@waiting%<mk-ellipsis/></p>
diff --git a/src/client/app/desktop/views/components/received-follow-requests-window.vue b/src/client/app/desktop/views/components/received-follow-requests-window.vue
index 26b7ec2590..d8a94f6cbe 100644
--- a/src/client/app/desktop/views/components/received-follow-requests-window.vue
+++ b/src/client/app/desktop/views/components/received-follow-requests-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="450px" height="500px" @closed="$destroy">
+<mk-window ref="window" is-modal width="450px" height="500px" @closed="destroyDom">
 	<span slot="header">%fa:envelope R% %i18n:@title%</span>
 
 	<div class="slpqaxdoxhvglersgjukmvizkqbmbokc" :data-darkmode="$store.state.device.darkmode">
diff --git a/src/client/app/desktop/views/components/renote-form-window.vue b/src/client/app/desktop/views/components/renote-form-window.vue
index df9d2f7fc7..6c9cb59d4a 100644
--- a/src/client/app/desktop/views/components/renote-form-window.vue
+++ b/src/client/app/desktop/views/components/renote-form-window.vue
@@ -1,7 +1,7 @@
 <template>
-<mk-window ref="window" is-modal @closed="$destroy">
+<mk-window ref="window" is-modal @closed="onWindowClosed">
 	<span slot="header" :class="$style.header">%fa:retweet%%i18n:@title%</span>
-	<mk-renote-form ref="form" :note="note" @posted="onPosted" @canceled="onCanceled"/>
+	<mk-renote-form ref="form" :note="note" @posted="onPosted" @canceled="onCanceled" v-hotkey.global="keymap"/>
 </mk-window>
 </template>
 
@@ -10,25 +10,32 @@ import Vue from 'vue';
 
 export default Vue.extend({
 	props: ['note'],
-	mounted() {
-		document.addEventListener('keydown', this.onDocumentKeydown);
-	},
-	beforeDestroy() {
-		document.removeEventListener('keydown', this.onDocumentKeydown);
+
+	computed: {
+		keymap(): any {
+			return {
+				'esc': this.close,
+				'ctrl+enter': this.post
+			};
+		}
 	},
+
 	methods: {
-		onDocumentKeydown(e) {
-			if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') {
-				if (e.which == 27) { // Esc
-					(this.$refs.window as any).close();
-				}
-			}
+		post() {
+			(this.$refs.form as any).ok();
+		},
+		close() {
+			(this.$refs.window as any).close();
 		},
 		onPosted() {
 			(this.$refs.window as any).close();
 		},
 		onCanceled() {
 			(this.$refs.window as any).close();
+		},
+		onWindowClosed() {
+			this.$emit('closed');
+			this.destroyDom();
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/settings-window.vue b/src/client/app/desktop/views/components/settings-window.vue
index b4cc570282..4247717748 100644
--- a/src/client/app/desktop/views/components/settings-window.vue
+++ b/src/client/app/desktop/views/components/settings-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="700px" height="550px" @closed="$destroy">
+<mk-window ref="window" is-modal width="700px" height="550px" @closed="destroyDom">
 	<span slot="header" :class="$style.header">%fa:cog%%i18n:@settings%</span>
 	<mk-settings :initial-page="initialPage" @done="close"/>
 </mk-window>
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index c8aa36f171..ff73bde95c 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -152,14 +152,11 @@ export default Vue.extend({
 			});
 		}
 
-		document.addEventListener('keydown', this.onKeydown);
-
 		this.fetch();
 	},
 
 	beforeDestroy() {
 		this.$emit('beforeDestroy');
-		document.removeEventListener('keydown', this.onKeydown);
 	},
 
 	methods: {
@@ -212,14 +209,6 @@ export default Vue.extend({
 		warp(date) {
 			this.date = date;
 			this.fetch();
-		},
-
-		onKeydown(e) {
-			if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') {
-				if (e.which == 84) { // t
-					this.focus();
-				}
-			}
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index ccc35f95ff..9f421a68ed 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -92,6 +92,10 @@ export default Vue.extend({
 			});
 		},
 
+		focus() {
+			(this.$refs.tl as any).focus();
+		},
+
 		warp(date) {
 			(this.$refs.tl as any).warp(date);
 		},
diff --git a/src/client/app/desktop/views/components/ui.vue b/src/client/app/desktop/views/components/ui.vue
index d410c3d980..a28cb3029e 100644
--- a/src/client/app/desktop/views/components/ui.vue
+++ b/src/client/app/desktop/views/components/ui.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="mk-ui" :style="style">
+<div class="mk-ui" :style="style" v-hotkey.global="keymap">
 	<x-header class="header" v-show="!zenMode"/>
 	<div class="content">
 		<slot></slot>
@@ -16,11 +16,13 @@ export default Vue.extend({
 	components: {
 		XHeader
 	},
+
 	data() {
 		return {
 			zenMode: false
 		};
 	},
+
 	computed: {
 		style(): any {
 			if (!this.$store.getters.isSignedIn || this.$store.state.i.wallpaperUrl == null) return {};
@@ -28,27 +30,24 @@ export default Vue.extend({
 				backgroundColor: this.$store.state.i.wallpaperColor && this.$store.state.i.wallpaperColor.length == 3 ? `rgb(${ this.$store.state.i.wallpaperColor.join(',') })` : null,
 				backgroundImage: `url(${ this.$store.state.i.wallpaperUrl })`
 			};
+		},
+
+		keymap(): any {
+			return {
+				'p': this.post,
+				'n': this.post,
+				'z': this.toggleZenMode
+			};
 		}
 	},
-	mounted() {
-		document.addEventListener('keydown', this.onKeydown);
-	},
-	beforeDestroy() {
-		document.removeEventListener('keydown', this.onKeydown);
-	},
+
 	methods: {
-		onKeydown(e) {
-			if (e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA') return;
+		post() {
+			(this as any).apis.post();
+		},
 
-			if (e.which == 80 || e.which == 78) { // p or n
-				e.preventDefault();
-				(this as any).apis.post();
-			}
-
-			if (e.which == 90) { // z
-				e.preventDefault();
-				this.zenMode = !this.zenMode;
-			}
+		toggleZenMode() {
+			this.zenMode = !this.zenMode;
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/components/user-lists-window.vue b/src/client/app/desktop/views/components/user-lists-window.vue
index 72ae9cf4e4..75253e0788 100644
--- a/src/client/app/desktop/views/components/user-lists-window.vue
+++ b/src/client/app/desktop/views/components/user-lists-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal width="450px" height="500px" @closed="$destroy">
+<mk-window ref="window" is-modal width="450px" height="500px" @closed="destroyDom">
 	<span slot="header">%fa:list% %i18n:@title%</span>
 
 	<div class="xkxvokkjlptzyewouewmceqcxhpgzprp" :data-darkmode="$store.state.device.darkmode">
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index 30f0ec558f..e6886956eb 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -190,8 +190,8 @@ export default Vue.extend({
 			});
 
 			setTimeout(() => {
-				this.destroyDom();
 				this.$emit('closed');
+				this.destroyDom();
 			}, 300);
 		},
 
diff --git a/src/client/app/desktop/views/pages/home.vue b/src/client/app/desktop/views/pages/home.vue
index c7ff0904e0..e595ef4c36 100644
--- a/src/client/app/desktop/views/pages/home.vue
+++ b/src/client/app/desktop/views/pages/home.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<mk-home :mode="mode" @loaded="loaded"/>
+	<mk-home :mode="mode" @loaded="loaded" ref="home" v-hotkey.global="keymap"/>
 </mk-ui>
 </template>
 
@@ -15,6 +15,13 @@ export default Vue.extend({
 			default: 'timeline'
 		}
 	},
+	computed: {
+		keymap(): any {
+			return {
+				't': this.focus
+			};
+		}
+	},
 	mounted() {
 		document.title = (this as any).os.instanceName;
 
@@ -23,6 +30,9 @@ export default Vue.extend({
 	methods: {
 		loaded() {
 			Progress.done();
+		},
+		focus() {
+			this.$refs.home.focus();
 		}
 	}
 });
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index db3852da60..3a03f8492e 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -8,6 +8,7 @@ import VueRouter from 'vue-router';
 import * as TreeView from 'vue-json-tree-view';
 import VAnimateCss from 'v-animate-css';
 import VModal from 'vue-js-modal';
+import VueHotkey from './common/hotkey';
 
 import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
@@ -19,6 +20,7 @@ Vue.use(VueRouter);
 Vue.use(TreeView);
 Vue.use(VAnimateCss);
 Vue.use(VModal);
+Vue.use(VueHotkey);
 
 // Register global directives
 require('./common/views/directives');

From 908872f374cec5f1bab5a36a33000348f0e54765 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 05:36:14 +0900
Subject: [PATCH 292/539] 8.47.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index d5df0c69ca..992635cff3 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.46.0",
-	"clientVersion": "1.0.9851",
+	"version": "8.47.0",
+	"clientVersion": "1.0.9873",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From fcea9dacb7c94296e875c2bfe92d671468718050 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 06:20:49 +0900
Subject: [PATCH 293/539] Clean up: Remove unused import

---
 src/client/app/desktop/views/pages/user/user.vue | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index afb5e674d9..28ccd78074 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -28,7 +28,6 @@
 <script lang="ts">
 import Vue from 'vue';
 import parseAcct from '../../../../../../misc/acct/parse';
-import getUserName from '../../../../../../misc/get-user-name';
 import Progress from '../../../../common/scripts/loading';
 import XHeader from './user.header.vue';
 import XTimeline from './user.timeline.vue';

From 1f2ebce8ed749d7e81e999944fc8a22ff39b87b7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 06:29:47 +0900
Subject: [PATCH 294/539] Resolve #1302

---
 .../app/desktop/views/pages/user/user.vue     |  2 +-
 .../app/mobile/views/pages/user/home.vue      |  2 +-
 src/docs/api/entities/user.yaml               |  8 ++---
 src/models/user.ts                            | 32 ++++++++++++++++---
 src/server/api/endpoints/i/pin.ts             | 14 +++++++-
 5 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index 28ccd78074..89dbd41b84 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -6,7 +6,7 @@
 		<main>
 			<div class="main">
 				<x-header :user="user"/>
-				<mk-note-detail v-if="user.pinnedNote" :note="user.pinnedNote" :compact="true"/>
+				<mk-note-detail v-for="n in user.pinnedNotes" :key="n.id" :note="n" :compact="true"/>
 				<x-timeline class="timeline" ref="tl" :user="user"/>
 			</div>
 			<div class="side">
diff --git a/src/client/app/mobile/views/pages/user/home.vue b/src/client/app/mobile/views/pages/user/home.vue
index 8b57276b17..4118afef19 100644
--- a/src/client/app/mobile/views/pages/user/home.vue
+++ b/src/client/app/mobile/views/pages/user/home.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="root home">
-	<mk-note-detail v-if="user.pinnedNote" :note="user.pinnedNote" :compact="true"/>
+	<mk-note-detail v-for="n in user.pinnedNotes" :key="n.id" :note="n" :compact="true"/>
 	<section class="recent-notes">
 		<h2>%fa:R comments%%i18n:@recent-notes%</h2>
 		<div>
diff --git a/src/docs/api/entities/user.yaml b/src/docs/api/entities/user.yaml
index c90b55ee88..e3755d8585 100644
--- a/src/docs/api/entities/user.yaml
+++ b/src/docs/api/entities/user.yaml
@@ -101,15 +101,15 @@ props:
       ja-JP: "投稿の数"
       en-US: "The number of the notes of this user"
 
-  pinnedNote:
-    type: "entity(Note)"
+  pinnedNotes:
+    type: "entity(Note)[]"
     optional: true
     desc:
       ja-JP: "ピン留めされた投稿"
       en-US: "The pinned note of this user"
 
-  pinnedNoteId:
-    type: "id(Note)"
+  pinnedNoteIds:
+    type: "id(Note)[]"
     optional: true
     desc:
       ja-JP: "ピン留めされた投稿のID"
diff --git a/src/models/user.ts b/src/models/user.ts
index 64197c91c2..b595fa8d71 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -35,6 +35,28 @@ User.createIndex('uri', { sparse: true, unique: true });
 
 export default User;
 
+// 後方互換性のため
+User.findOne({
+	pinnedNoteId: { $exists: true }
+}).then(async x => {
+	if (x == null) return;
+
+	const users = await User.find({
+		pinnedNoteId: { $exists: true }
+	});
+
+	users.forEach(u => {
+		User.update({ _id: u._id }, {
+			$set: {
+				pinnedNoteIds: [(u as any).pinnedNoteId]
+			},
+			$unset: {
+				pinnedNoteId: ''
+			}
+		});
+	});
+});
+
 type IUserBase = {
 	_id: mongo.ObjectID;
 	createdAt: Date;
@@ -53,7 +75,7 @@ type IUserBase = {
 	wallpaperUrl?: string;
 	data: any;
 	description: string;
-	pinnedNoteId: mongo.ObjectID;
+	pinnedNoteIds: mongo.ObjectID[];
 
 	/**
 	 * 凍結されているか否か
@@ -464,11 +486,11 @@ export const pack = (
 	}
 
 	if (opts.detail) {
-		if (_user.pinnedNoteId) {
-			// Populate pinned note
-			_user.pinnedNote = packNote(_user.pinnedNoteId, meId, {
+		if (_user.pinnedNoteIds) {
+			// Populate pinned notes
+			_user.pinnedNotes = Promise.all(_user.pinnedNoteIds.map((id: mongo.ObjectId) => packNote(id, meId, {
 				detail: true
-			});
+			})));
 		}
 
 		if (meId && !meId.equals(_user.id)) {
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index ae03a86336..8804d5aa70 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -21,9 +21,21 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		return rej('note not found');
 	}
 
+	const pinnedNoteIds = user.pinnedNoteIds || [];
+
+	if (pinnedNoteIds.some(id => id.equals(note._id))) {
+		return rej('already exists');
+	}
+
+	pinnedNoteIds.unshift(note._id);
+
+	if (pinnedNoteIds.length > 5) {
+		pinnedNoteIds.pop();
+	}
+
 	await User.update(user._id, {
 		$set: {
-			pinnedNoteId: note._id
+			pinnedNoteIds: pinnedNoteIds
 		}
 	});
 

From 2a4c53c3a415e38783316e37ba7a2eab69068d75 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 06:30:52 +0900
Subject: [PATCH 295/539] 8.48.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 992635cff3..685293f526 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.47.0",
-	"clientVersion": "1.0.9873",
+	"version": "8.48.0",
+	"clientVersion": "1.0.9876",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 19c72627fc6e9f3c89b649b2f88bf5e066961e7a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 08:19:45 +0900
Subject: [PATCH 296/539] Improve keyboard shortcut

---
 .../app/common/views/components/reaction-picker.vue   | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index 58985658c6..c329241d8a 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -62,16 +62,27 @@ export default Vue.extend({
 	computed: {
 		keymap(): any {
 			return {
+				'esc': this.close,
 				'1': () => this.react('like'),
+				'numpad 1': () => this.react('like'),
 				'2': () => this.react('love'),
+				'numpad 2': () => this.react('love'),
 				'3': () => this.react('laugh'),
+				'numpad 3': () => this.react('laugh'),
 				'4': () => this.react('hmm'),
+				'numpad 4': () => this.react('hmm'),
 				'5': () => this.react('surprise'),
+				'numpad 5': () => this.react('surprise'),
 				'6': () => this.react('congrats'),
+				'numpad 6': () => this.react('congrats'),
 				'7': () => this.react('angry'),
+				'numpad 7': () => this.react('angry'),
 				'8': () => this.react('confused'),
+				'numpad 8': () => this.react('confused'),
 				'9': () => this.react('rip'),
+				'numpad 9': () => this.react('rip'),
 				'0': () => this.react('pudding'),
+				'numpad 0': () => this.react('pudding'),
 			};
 		}
 	},

From 55e2ae1408e056295d37681814b62f24a50a617e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 09:11:52 +0900
Subject: [PATCH 297/539] Improve usability

---
 src/client/app/common/hotkey.ts               |  6 +-
 src/client/app/common/keycode.ts              |  3 +-
 .../views/components/reaction-picker.vue      | 61 ++++++++++++++++++-
 .../desktop/views/components/notes.note.vue   | 15 +++--
 4 files changed, 75 insertions(+), 10 deletions(-)

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
index 10cbeea543..62726887d1 100644
--- a/src/client/app/common/hotkey.ts
+++ b/src/client/app/common/hotkey.ts
@@ -13,8 +13,10 @@ const getKeyMap = keymap => Object.keys(keymap).map(input => {
 			case 'meta':
 				result[keyName] = true;
 				break;
-			default:
+			default: {
 				result.keyCode = keyCode(keyName);
+				if (!Array.isArray(result.keyCode)) result.keyCode = [result.keyCode];
+			}
 		}
 	});
 
@@ -45,7 +47,7 @@ export default {
 					for (const hotkey of el._keymap) {
 						if (el._hotkey_global && reservedKeyCodes.includes(`'${e.keyCode}'`)) break;
 
-						const callback = hotkey.keyCode === e.keyCode &&
+						const callback = hotkey.keyCode.includes(e.keyCode) &&
 							!!hotkey.ctrl === e.ctrlKey &&
 							!!hotkey.alt === e.altKey &&
 							!!hotkey.shift === e.shiftKey &&
diff --git a/src/client/app/common/keycode.ts b/src/client/app/common/keycode.ts
index c5ea6cb484..0324a5389a 100644
--- a/src/client/app/common/keycode.ts
+++ b/src/client/app/common/keycode.ts
@@ -67,8 +67,7 @@ export const codes = {
 	'left command': 91,
 	'right command': 93,
 	'numpad *': 106,
-	// 'numpad +': 107,
-	'numpad +': 43,
+	'numpad plus': [43, 107],
 	'numpad add': 43, // as a trick
 	'numpad -': 109,
 	'numpad .': 110,
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index c329241d8a..4e27fb36e3 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -3,7 +3,7 @@
 	<div class="backdrop" ref="backdrop" @click="close"></div>
 	<div class="popover" :class="{ compact, big }" ref="popover">
 		<p v-if="!compact">{{ title }}</p>
-		<div>
+		<div ref="buttons" :class="{ showFocus }">
 			<button @click="react('like')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="1" title="%i18n:common.reactions.like%"><mk-reaction-icon reaction='like'/></button>
 			<button @click="react('love')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="2" title="%i18n:common.reactions.love%"><mk-reaction-icon reaction='love'/></button>
 			<button @click="react('laugh')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="3" title="%i18n:common.reactions.laugh%"><mk-reaction-icon reaction='laugh'/></button>
@@ -50,12 +50,19 @@ export default Vue.extend({
 			type: Boolean,
 			required: false,
 			default: false
+		},
+
+		showFocus: {
+			type: Boolean,
+			required: false,
+			default: false
 		}
 	},
 
 	data() {
 		return {
-			title: placeholder
+			title: placeholder,
+			focus: null
 		};
 	},
 
@@ -63,6 +70,9 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'esc': this.close,
+				'enter': this.choose,
+				'space': this.choose,
+				'numpad plus': this.choose,
 				'1': () => this.react('like'),
 				'numpad 1': () => this.react('like'),
 				'2': () => this.react('love'),
@@ -83,12 +93,24 @@ export default Vue.extend({
 				'numpad 9': () => this.react('rip'),
 				'0': () => this.react('pudding'),
 				'numpad 0': () => this.react('pudding'),
+				'up': this.focusUp,
+				'right': this.focusRight,
+				'down': this.focusDown,
+				'left': this.focusLeft,
 			};
 		}
 	},
 
+	watch: {
+		focus(i) {
+			this.$refs.buttons.childNodes[i].focus();
+		}
+	},
+
 	mounted() {
 		this.$nextTick(() => {
+			this.focus = 0;
+
 			const popover = this.$refs.popover as any;
 
 			const rect = this.source.getBoundingClientRect();
@@ -164,6 +186,26 @@ export default Vue.extend({
 					this.destroyDom();
 				}
 			});
+		},
+
+		focusUp() {
+			this.focus = this.focus == 0 ? 9 : this.focus < 5 ? (this.focus + 4) : (this.focus - 5);
+		},
+
+		focusDown() {
+			this.focus = this.focus == 9 ? 0 : this.focus >= 5 ? (this.focus - 4) : (this.focus + 5);
+		},
+
+		focusRight() {
+			this.focus = this.focus == 9 ? 0 : (this.focus + 1);
+		},
+
+		focusLeft() {
+			this.focus = this.focus == 0 ? 9 : (this.focus - 1);
+		},
+
+		choose() {
+			this.$refs.buttons.childNodes[this.focus].click();
 		}
 	}
 });
@@ -249,6 +291,21 @@ root(isDark)
 			width 240px
 			text-align center
 
+			&.showFocus
+				> button:focus
+					z-index 1
+
+					&:after
+						content ""
+						pointer-events none
+						position absolute
+						top 0
+						right 0
+						bottom 0
+						left 0
+						border 2px solid rgba($theme-color, 0.3)
+						border-radius 4px
+
 			> button
 				padding 0
 				width 40px
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index fadf47e628..b8c5f31511 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -48,7 +48,7 @@
 				<button class="renoteButton" @click="renote" title="%i18n:@renote%">
 					%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
 				</button>
-				<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react" ref="reactButton" title="%i18n:@add-reaction%">
+				<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react()" ref="reactButton" title="%i18n:@add-reaction%">
 					%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
 				</button>
 				<button @click="menu" ref="menuButton">
@@ -114,7 +114,8 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'r': this.reply,
-				'a': this.react,
+				'a': () => this.react(true),
+				'numpad plus': () => this.react(true),
 				'n': this.renote,
 				'up': this.focusBefore,
 				'shift+tab': this.focusBefore,
@@ -244,10 +245,12 @@ export default Vue.extend({
 			}).$once('closed', this.focus);
 		},
 
-		react() {
+		react(viaKeyboard = false) {
+			this.blur();
 			(this as any).os.new(MkReactionPicker, {
 				source: this.$refs.reactButton,
-				note: this.p
+				note: this.p,
+				showFocus: viaKeyboard
 			}).$once('closed', this.focus);
 		},
 
@@ -262,6 +265,10 @@ export default Vue.extend({
 			this.$el.focus();
 		},
 
+		blur() {
+			this.$el.blur();
+		},
+
 		focusBefore() {
 			focus(this.$el, e => e.previousElementSibling);
 		},

From f66c31c771d31678472dde87712c7109532c930f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 09:20:06 +0900
Subject: [PATCH 298/539] Improve usability & refactoring

---
 src/client/app/common/keycode.ts              |  7 +---
 .../views/components/reaction-picker.vue      | 34 ++++++++-----------
 2 files changed, 15 insertions(+), 26 deletions(-)

diff --git a/src/client/app/common/keycode.ts b/src/client/app/common/keycode.ts
index 0324a5389a..55043ad76b 100644
--- a/src/client/app/common/keycode.ts
+++ b/src/client/app/common/keycode.ts
@@ -124,15 +124,10 @@ for (let i = 97; i < 123; i++) {
 
 // numbers
 for (let i = 48; i < 58; i++) {
-	codes[i - 48] = i;
+	codes[i - 48] = [i, (i - 48) + 96];
 }
 
 // function keys
 for (let i = 1; i < 13; i++) {
 	codes['f' + i] = i + 111;
 }
-
-// numpad keys
-for (let i = 0; i < 10; i++) {
-	codes['numpad ' + i] = i + 96;
-}
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index 4e27fb36e3..f415e89d0e 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -73,30 +73,20 @@ export default Vue.extend({
 				'enter': this.choose,
 				'space': this.choose,
 				'numpad plus': this.choose,
-				'1': () => this.react('like'),
-				'numpad 1': () => this.react('like'),
-				'2': () => this.react('love'),
-				'numpad 2': () => this.react('love'),
-				'3': () => this.react('laugh'),
-				'numpad 3': () => this.react('laugh'),
-				'4': () => this.react('hmm'),
-				'numpad 4': () => this.react('hmm'),
-				'5': () => this.react('surprise'),
-				'numpad 5': () => this.react('surprise'),
-				'6': () => this.react('congrats'),
-				'numpad 6': () => this.react('congrats'),
-				'7': () => this.react('angry'),
-				'numpad 7': () => this.react('angry'),
-				'8': () => this.react('confused'),
-				'numpad 8': () => this.react('confused'),
-				'9': () => this.react('rip'),
-				'numpad 9': () => this.react('rip'),
-				'0': () => this.react('pudding'),
-				'numpad 0': () => this.react('pudding'),
 				'up': this.focusUp,
 				'right': this.focusRight,
 				'down': this.focusDown,
 				'left': this.focusLeft,
+				'1': () => this.react('like'),
+				'2': () => this.react('love'),
+				'3': () => this.react('laugh'),
+				'4': () => this.react('hmm'),
+				'5': () => this.react('surprise'),
+				'6': () => this.react('congrats'),
+				'7': () => this.react('angry'),
+				'8': () => this.react('confused'),
+				'9': () => this.react('rip'),
+				'0': () => this.react('pudding'),
 			};
 		}
 	},
@@ -104,6 +94,10 @@ export default Vue.extend({
 	watch: {
 		focus(i) {
 			this.$refs.buttons.childNodes[i].focus();
+
+			if (this.showFocus) {
+				this.title = this.$refs.buttons.childNodes[i].title;
+			}
 		}
 	},
 

From dc8f592c1f926b2393c27f1cdfc6f02d5078dbd8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 09:21:02 +0900
Subject: [PATCH 299/539] 8.49.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 685293f526..64023ea980 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.48.0",
-	"clientVersion": "1.0.9876",
+	"version": "8.49.0",
+	"clientVersion": "1.0.9880",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 6ed3f9e41478b59bd27a3b8ae930091430b85e5b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 12:34:41 +0900
Subject: [PATCH 300/539] =?UTF-8?q?=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?=
 =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=E3=81=AA=E3=81=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/hotkey.ts               |  94 +++++++-----
 src/client/app/common/keycode.ts              | 134 +++---------------
 .../views/components/reaction-picker.vue      |   2 +-
 .../desktop/views/components/notes.note.vue   |   2 +-
 4 files changed, 78 insertions(+), 154 deletions(-)

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
index 62726887d1..66336fca6e 100644
--- a/src/client/app/common/hotkey.ts
+++ b/src/client/app/common/hotkey.ts
@@ -1,29 +1,42 @@
 import keyCode from './keycode';
+import { concat } from '../../../prelude/array';
 
-const getKeyMap = keymap => Object.keys(keymap).map(input => {
-	const result = {} as any;
+type pattern = {
+	which: string[];
+	ctrl?: boolean;
+	shift?: boolean;
+	alt?: boolean;
+};
 
-	const { keyup, keydown } = keymap[input];
+type action = {
+	patterns: pattern[];
 
-	input.split('+').forEach(keyName => {
-		switch (keyName.toLowerCase()) {
-			case 'ctrl':
-			case 'alt':
-			case 'shift':
-			case 'meta':
-				result[keyName] = true;
-				break;
-			default: {
-				result.keyCode = keyCode(keyName);
-				if (!Array.isArray(result.keyCode)) result.keyCode = [result.keyCode];
+	callback: Function;
+};
+
+const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): action => {
+	const result = {
+		patterns: [],
+		callback: callback
+	} as action;
+
+	result.patterns = patterns.split('|').map(part => {
+		const pattern = {
+			which: []
+		} as pattern;
+
+		part.trim().split('+').forEach(key => {
+			key = key.trim().toLowerCase();
+			switch (key) {
+				case 'ctrl': pattern.ctrl = true; break;
+				case 'alt': pattern.alt = true; break;
+				case 'shift': pattern.shift = true; break;
+				default: pattern.which = keyCode(key).map(k => k.toLowerCase());
 			}
-		}
-	});
+		});
 
-	result.callback = {
-		keydown: keydown || keymap[input],
-		keyup
-	};
+		return pattern;
+	});
 
 	return result;
 });
@@ -36,28 +49,39 @@ export default {
 			bind(el, binding) {
 				el._hotkey_global = binding.modifiers.global === true;
 
-				el._keymap = getKeyMap(binding.value);
+				const actions = getKeyMap(binding.value);
 
-				el.dataset.reservedKeyCodes = el._keymap.map(key => `'${key.keyCode}'`).join(' ');
+				const reservedKeys = concat(actions.map(a => a.patterns.map(p => p.which)));
+
+				el.dataset.reservedKeys = reservedKeys.map(key => `'${key}'`).join(' ');
 
 				el._keyHandler = e => {
-					const reservedKeyCodes = document.activeElement ? ((document.activeElement as any).dataset || {}).reservedKeyCodes || '' : '';
+					const key = e.code.toLowerCase();
+
+					const targetReservedKeys = document.activeElement ? ((document.activeElement as any).dataset || {}).reservedKeys || '' : '';
 					if (document.activeElement && ignoreElemens.some(el => document.activeElement.matches(el))) return;
 
-					for (const hotkey of el._keymap) {
-						if (el._hotkey_global && reservedKeyCodes.includes(`'${e.keyCode}'`)) break;
+					for (const action of actions) {
+						if (el._hotkey_global && targetReservedKeys.includes(`'${key}'`)) break;
 
-						const callback = hotkey.keyCode.includes(e.keyCode) &&
-							!!hotkey.ctrl === e.ctrlKey &&
-							!!hotkey.alt === e.altKey &&
-							!!hotkey.shift === e.shiftKey &&
-							!!hotkey.meta === e.metaKey &&
-							hotkey.callback[e.type];
+						const matched = action.patterns.some(pattern => {
+							let matched = pattern.which.includes(key);
+							if (pattern.ctrl && !e.ctrlKey) matched = false;
+							if (pattern.shift && !e.shiftKey) matched = false;
+							if (pattern.alt && !e.altKey) matched = false;
 
-						if (callback) {
-							e.preventDefault();
-							e.stopPropagation();
-							callback(e);
+							if (matched) {
+								e.preventDefault();
+								e.stopPropagation();
+								action.callback(e);
+								return true;
+							} else {
+								return false;
+							}
+						});
+
+						if (matched) {
+							break;
 						}
 					}
 				};
diff --git a/src/client/app/common/keycode.ts b/src/client/app/common/keycode.ts
index 55043ad76b..5786c1dc0a 100644
--- a/src/client/app/common/keycode.ts
+++ b/src/client/app/common/keycode.ts
@@ -1,116 +1,20 @@
-export default searchInput => {
-	// Keyboard Events
-	if (searchInput && typeof searchInput === 'object') {
-		const hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode;
-		if (hasKeyCode) {
-			searchInput = hasKeyCode;
-		}
+export default (input: string): string[] => {
+	if (Object.keys(aliases).some(a => a.toLowerCase() == input.toLowerCase())) {
+		const codes = aliases[input];
+		return Array.isArray(codes) ? codes : [codes];
+	} else {
+		return [input];
 	}
-
-	// Numbers
-	// if (typeof searchInput === 'number') {
-	//   return names[searchInput]
-	// }
-
-	// Everything else (cast to string)
-	const search = String(searchInput);
-
-	// check codes
-	const foundNamedKeyCodes = codes[search.toLowerCase()];
-	if (foundNamedKeyCodes) {
-		return foundNamedKeyCodes;
-	}
-
-	// check aliases
-	const foundNamedKeyAliases = aliases[search.toLowerCase()];
-	if (foundNamedKeyAliases) {
-		return foundNamedKeyAliases;
-	}
-
-	// weird character?
-	if (search.length === 1) {
-		return search.charCodeAt(0);
-	}
-
-	return undefined;
 };
 
-/**
- * Get by name
- *
- *   exports.code['enter'] // => 13
- */
-
-export const codes = {
-	'backspace': 8,
-	'tab': 9,
-	'enter': 13,
-	'shift': 16,
-	'ctrl': 17,
-	'alt': 18,
-	'pause/break': 19,
-	'caps lock': 20,
-	'esc': 27,
-	'space': 32,
-	'page up': 33,
-	'page down': 34,
-	'end': 35,
-	'home': 36,
-	'left': 37,
-	'up': 38,
-	'right': 39,
-	'down': 40,
-	// 'add': 43,
-	'insert': 45,
-	'delete': 46,
-	'command': 91,
-	'left command': 91,
-	'right command': 93,
-	'numpad *': 106,
-	'numpad plus': [43, 107],
-	'numpad add': 43, // as a trick
-	'numpad -': 109,
-	'numpad .': 110,
-	'numpad /': 111,
-	'num lock': 144,
-	'scroll lock': 145,
-	'my computer': 182,
-	'my calculator': 183,
-	';': 186,
-	'=': 187,
-	',': 188,
-	'-': 189,
-	'.': 190,
-	'/': 191,
-	'`': 192,
-	'[': 219,
-	'\\': 220,
-	']': 221,
-	"'": 222
-};
-
-// Helper aliases
-
 export const aliases = {
-	'windows': 91,
-	'⇧': 16,
-	'⌥': 18,
-	'⌃': 17,
-	'⌘': 91,
-	'ctl': 17,
-	'control': 17,
-	'option': 18,
-	'pause': 19,
-	'break': 19,
-	'caps': 20,
-	'return': 13,
-	'escape': 27,
-	'spc': 32,
-	'pgup': 33,
-	'pgdn': 34,
-	'ins': 45,
-	'del': 46,
-	'cmd': 91
+	'esc': 'Escape',
+	'enter': ['Enter', 'NumpadEnter'],
+	'up': 'ArrowUp',
+	'down': 'ArrowDown',
+	'left': 'ArrowLeft',
+	'right': 'ArrowRight',
+	'plus': ['NumpadAdd', 'Semicolon'],
 };
 
 /*!
@@ -119,15 +23,11 @@ export const aliases = {
 
 // lower case chars
 for (let i = 97; i < 123; i++) {
-	codes[String.fromCharCode(i)] = i - 32;
+	const char = String.fromCharCode(i);
+	aliases[char] = `Key${char.toUpperCase()}`;
 }
 
 // numbers
-for (let i = 48; i < 58; i++) {
-	codes[i - 48] = [i, (i - 48) + 96];
-}
-
-// function keys
-for (let i = 1; i < 13; i++) {
-	codes['f' + i] = i + 111;
+for (let i = 0; i < 10; i++) {
+	aliases[i] = [`Numpad${i}`, `Digit${i}`];
 }
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index f415e89d0e..811f82283d 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -72,7 +72,7 @@ export default Vue.extend({
 				'esc': this.close,
 				'enter': this.choose,
 				'space': this.choose,
-				'numpad plus': this.choose,
+				'plus': this.choose,
 				'up': this.focusUp,
 				'right': this.focusRight,
 				'down': this.focusDown,
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index b8c5f31511..26f6ef4554 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -115,7 +115,7 @@ export default Vue.extend({
 			return {
 				'r': this.reply,
 				'a': () => this.react(true),
-				'numpad plus': () => this.react(true),
+				'plus': () => this.react(true),
 				'n': this.renote,
 				'up': this.focusBefore,
 				'shift+tab': this.focusBefore,

From 71a93b2b435a1747a710a593588c1daec8ef7878 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 12:42:56 +0900
Subject: [PATCH 301/539] Refactor & Usability improvements

---
 src/client/app/common/hotkey.ts                |  3 ++-
 .../views/components/reaction-picker.vue       | 18 +++++++++++-------
 .../desktop/views/components/notes.note.vue    | 16 +++++++---------
 3 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
index 66336fca6e..03806fb184 100644
--- a/src/client/app/common/hotkey.ts
+++ b/src/client/app/common/hotkey.ts
@@ -51,7 +51,8 @@ export default {
 
 				const actions = getKeyMap(binding.value);
 
-				const reservedKeys = concat(actions.map(a => a.patterns.map(p => p.which)));
+				// flatten
+				const reservedKeys = concat(concat(actions.map(a => a.patterns.map(p => p.which))));
 
 				el.dataset.reservedKeys = reservedKeys.map(key => `'${key}'`).join(' ');
 
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index 811f82283d..ce0d2a8ea3 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -56,6 +56,12 @@ export default Vue.extend({
 			type: Boolean,
 			required: false,
 			default: false
+		},
+
+		animation: {
+			type: Boolean,
+			required: false,
+			default: true
 		}
 	},
 
@@ -70,9 +76,7 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'esc': this.close,
-				'enter': this.choose,
-				'space': this.choose,
-				'plus': this.choose,
+				'enter|space|plus': this.choose,
 				'up': this.focusUp,
 				'right': this.focusRight,
 				'down': this.focusDown,
@@ -126,7 +130,7 @@ export default Vue.extend({
 			anime({
 				targets: this.$refs.backdrop,
 				opacity: 1,
-				duration: 100,
+				duration: this.animation ? 100 : 0,
 				easing: 'linear'
 			});
 
@@ -134,7 +138,7 @@ export default Vue.extend({
 				targets: this.$refs.popover,
 				opacity: 1,
 				scale: [0.5, 1],
-				duration: 500
+				duration: this.animation ? 500 : 0
 			});
 		});
 	},
@@ -164,7 +168,7 @@ export default Vue.extend({
 			anime({
 				targets: this.$refs.backdrop,
 				opacity: 0,
-				duration: 200,
+				duration: this.animation ? 200 : 0,
 				easing: 'linear'
 			});
 
@@ -173,7 +177,7 @@ export default Vue.extend({
 				targets: this.$refs.popover,
 				opacity: 0,
 				scale: 0.5,
-				duration: 200,
+				duration: this.animation ? 200 : 0,
 				easing: 'easeInBack',
 				complete: () => {
 					this.$emit('closed');
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 26f6ef4554..18a1ce9e52 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -113,14 +113,11 @@ export default Vue.extend({
 	computed: {
 		keymap(): any {
 			return {
-				'r': this.reply,
-				'a': () => this.react(true),
-				'plus': () => this.react(true),
-				'n': this.renote,
-				'up': this.focusBefore,
-				'shift+tab': this.focusBefore,
-				'down': this.focusAfter,
-				'tab': this.focusAfter,
+				'r|left': this.reply,
+				'a|plus': () => this.react(true),
+				'n|right': this.renote,
+				'up|shift+tab': this.focusBefore,
+				'down|tab': this.focusAfter,
 			};
 		},
 
@@ -250,7 +247,8 @@ export default Vue.extend({
 			(this as any).os.new(MkReactionPicker, {
 				source: this.$refs.reactButton,
 				note: this.p,
-				showFocus: viaKeyboard
+				showFocus: viaKeyboard,
+				animation: !viaKeyboard
 			}).$once('closed', this.focus);
 		},
 

From bec48319ecb782ee997cdae108bf71347619b998 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 12:43:24 +0900
Subject: [PATCH 302/539] 8.50.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 64023ea980..68a06213a5 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.49.0",
-	"clientVersion": "1.0.9880",
+	"version": "8.50.0",
+	"clientVersion": "1.0.9883",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 11496d887e89ceccd64035f9e1836c5d415f4349 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 18 Sep 2018 13:08:27 +0900
Subject: [PATCH 303/539] Publish pinned notes (#2731)

---
 src/remote/activitypub/renderer/add.ts        |  9 +++
 .../renderer/ordered-collection.ts            |  4 +-
 src/remote/activitypub/renderer/person.ts     |  1 +
 src/remote/activitypub/renderer/remove.ts     |  9 +++
 src/remote/activitypub/type.ts                |  1 +
 src/server/activitypub.ts                     |  4 ++
 src/server/activitypub/featured.ts            | 38 ++++++++++++
 src/server/api/endpoints/i/pin.ts             | 10 ++-
 src/services/i/pin.ts                         | 61 +++++++++++++++++++
 9 files changed, 135 insertions(+), 2 deletions(-)
 create mode 100644 src/remote/activitypub/renderer/add.ts
 create mode 100644 src/remote/activitypub/renderer/remove.ts
 create mode 100644 src/server/activitypub/featured.ts
 create mode 100644 src/services/i/pin.ts

diff --git a/src/remote/activitypub/renderer/add.ts b/src/remote/activitypub/renderer/add.ts
new file mode 100644
index 0000000000..4d6fe392aa
--- /dev/null
+++ b/src/remote/activitypub/renderer/add.ts
@@ -0,0 +1,9 @@
+import config from '../../../config';
+import { ILocalUser } from '../../../models/user';
+
+export default (user: ILocalUser, target: any, object: any) => ({
+	type: 'Add',
+	actor: `${config.url}/users/${user._id}`,
+	target,
+	object
+});
diff --git a/src/remote/activitypub/renderer/ordered-collection.ts b/src/remote/activitypub/renderer/ordered-collection.ts
index 3c448cf873..5461005983 100644
--- a/src/remote/activitypub/renderer/ordered-collection.ts
+++ b/src/remote/activitypub/renderer/ordered-collection.ts
@@ -4,8 +4,9 @@
  * @param totalItems Total number of items
  * @param first URL of first page (optional)
  * @param last URL of last page (optional)
+ * @param orderedItems attached objects (optional)
  */
-export default function(id: string, totalItems: any, first: string, last: string) {
+export default function(id: string, totalItems: any, first?: string, last?: string, orderedItems?: object) {
 	const page: any = {
 		id,
 		type: 'OrderedCollection',
@@ -14,6 +15,7 @@ export default function(id: string, totalItems: any, first: string, last: string
 
 	if (first) page.first = first;
 	if (last) page.last = last;
+	if (orderedItems) page.orderedItems = orderedItems;
 
 	return page;
 }
diff --git a/src/remote/activitypub/renderer/person.ts b/src/remote/activitypub/renderer/person.ts
index 78918af368..52485e6959 100644
--- a/src/remote/activitypub/renderer/person.ts
+++ b/src/remote/activitypub/renderer/person.ts
@@ -21,6 +21,7 @@ export default async (user: ILocalUser) => {
 		outbox: `${id}/outbox`,
 		followers: `${id}/followers`,
 		following: `${id}/following`,
+		featured: `${id}/collections/featured`,
 		sharedInbox: `${config.url}/inbox`,
 		url: `${config.url}/@${user.username}`,
 		preferredUsername: user.username,
diff --git a/src/remote/activitypub/renderer/remove.ts b/src/remote/activitypub/renderer/remove.ts
new file mode 100644
index 0000000000..ed840be751
--- /dev/null
+++ b/src/remote/activitypub/renderer/remove.ts
@@ -0,0 +1,9 @@
+import config from '../../../config';
+import { ILocalUser } from '../../../models/user';
+
+export default (user: ILocalUser, target: any, object: any) => ({
+	type: 'Remove',
+	actor: `${config.url}/users/${user._id}`,
+	target,
+	object
+});
diff --git a/src/remote/activitypub/type.ts b/src/remote/activitypub/type.ts
index 28763d3e83..7bbea5fd18 100644
--- a/src/remote/activitypub/type.ts
+++ b/src/remote/activitypub/type.ts
@@ -53,6 +53,7 @@ export interface IPerson extends IObject {
 	publicKey: any;
 	followers: any;
 	following: any;
+	featured?: any;
 	outbox: any;
 	endpoints: string[];
 }
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index 3d346693d8..2cbce8cfbc 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -13,6 +13,7 @@ import renderPerson from '../remote/activitypub/renderer/person';
 import Outbox, { packActivity } from './activitypub/outbox';
 import Followers from './activitypub/followers';
 import Following from './activitypub/following';
+import Featured from './activitypub/featured';
 
 // Init router
 const router = new Router();
@@ -102,6 +103,9 @@ router.get('/users/:user/followers', Followers);
 // following
 router.get('/users/:user/following', Following);
 
+// featured
+router.get('/users/:user/collections/featured', Featured);
+
 // publickey
 router.get('/users/:user/publickey', async ctx => {
 	const userId = new mongo.ObjectID(ctx.params.user);
diff --git a/src/server/activitypub/featured.ts b/src/server/activitypub/featured.ts
new file mode 100644
index 0000000000..93c3700206
--- /dev/null
+++ b/src/server/activitypub/featured.ts
@@ -0,0 +1,38 @@
+import * as mongo from 'mongodb';
+import * as Router from 'koa-router';
+import config from '../../config';
+import User from '../../models/user';
+import pack from '../../remote/activitypub/renderer';
+import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';
+import { setResponseType } from '../activitypub';
+import Note from '../../models/note';
+import renderNote from '../../remote/activitypub/renderer/note';
+
+export default async (ctx: Router.IRouterContext) => {
+	const userId = new mongo.ObjectID(ctx.params.user);
+
+	// Verify user
+	const user = await User.findOne({
+		_id: userId,
+		host: null
+	});
+
+	if (user === null) {
+		ctx.status = 404;
+		return;
+	}
+
+	const pinnedNoteIds = user.pinnedNoteIds || [];
+
+	const pinnedNotes = await Promise.all(pinnedNoteIds.map(id => Note.findOne({ _id: id })));
+
+	const renderedNotes = await Promise.all(pinnedNotes.map(note => renderNote(note)));
+
+	const rendered = renderOrderedCollection(
+		`${config.url}/users/${userId}/collections/featured`,
+		renderedNotes.length, null, null, renderedNotes
+	);
+
+	ctx.body = pack(rendered);
+	setResponseType(ctx);
+};
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index 8804d5aa70..ce3b0318a9 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -2,6 +2,7 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Note from '../../../../models/note';
 import { pack } from '../../../../models/user';
+import { deliverPinnedChange } from '../../../../services/i/pin';
 
 /**
  * Pin note
@@ -21,6 +22,9 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		return rej('note not found');
 	}
 
+	let addedId;
+	let removedId;
+
 	const pinnedNoteIds = user.pinnedNoteIds || [];
 
 	if (pinnedNoteIds.some(id => id.equals(note._id))) {
@@ -28,9 +32,10 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	}
 
 	pinnedNoteIds.unshift(note._id);
+	addedId = note._id;
 
 	if (pinnedNoteIds.length > 5) {
-		pinnedNoteIds.pop();
+		removedId = pinnedNoteIds.pop();
 	}
 
 	await User.update(user._id, {
@@ -44,6 +49,9 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		detail: true
 	});
 
+	// Send Add/Remove to followers
+	deliverPinnedChange(user._id, removedId, addedId);
+
 	// Send response
 	res(iObj);
 });
diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
new file mode 100644
index 0000000000..c6d3e11788
--- /dev/null
+++ b/src/services/i/pin.ts
@@ -0,0 +1,61 @@
+import config from '../../config';
+import * as mongo from 'mongodb';
+import User, { isLocalUser, isRemoteUser, ILocalUser } from '../../models/user';
+import Following from '../../models/following';
+import renderAdd from '../../remote/activitypub/renderer/add';
+import renderRemove from '../../remote/activitypub/renderer/remove';
+import packAp from '../../remote/activitypub/renderer';
+import { deliver } from '../../queue';
+
+export async function deliverPinnedChange(userId: mongo.ObjectID, oldId: mongo.ObjectID, newId: mongo.ObjectID) {
+	const user = await User.findOne({
+		_id: userId
+	});
+
+	if (!isLocalUser(user)) return;
+
+	const queue = await CreateRemoteInboxes(user);
+
+	if (queue.length < 1) return;
+
+	const target = `${config.url}/users/${user._id}/collections/featured`;
+
+	if (oldId) {
+		const oldItem = `${config.url}/notes/${oldId}`;
+		const content = packAp(renderRemove(user, target, oldItem));
+		queue.forEach(inbox => {
+			deliver(user, content, inbox);
+		});
+	}
+
+	if (newId) {
+		const newItem = `${config.url}/notes/${newId}`;
+		const content = packAp(renderAdd(user, target, newItem));
+		queue.forEach(inbox => {
+			deliver(user, content, inbox);
+		});
+	}
+}
+
+/**
+ * ローカルユーザーのリモートフォロワーのinboxリストを作成する
+ * @param user ローカルユーザー
+ */
+async function CreateRemoteInboxes(user: ILocalUser): Promise<string[]> {
+	const followers = await Following.find({
+		followeeId: user._id
+	});
+
+	const queue: string[] = [];
+
+	followers.map(following => {
+		const follower = following._follower;
+
+		if (isRemoteUser(follower)) {
+			const inbox = follower.sharedInbox || follower.inbox;
+			if (!queue.includes(inbox)) queue.push(inbox);
+		}
+	});
+
+	return queue;
+}

From 8ba3fb13ebb780255f9b6f4ca89dc2f70b770098 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 13:12:41 +0900
Subject: [PATCH 304/539] Fix bug

---
 src/client/app/mobile/views/pages/home.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index e61916fe18..43afc98b45 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -35,7 +35,7 @@
 					<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
 					<span :data-active="src == 'messages'" @click="src = 'messages'">%fa:envelope R% %i18n:@messages%</span>
 					<template v-if="lists">
-						<div class="hr"></div>
+						<div class="hr" v-if="lists.length > 0"></div>
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
 					</template>
 					<div class="hr" v-if="$store.state.settings.tagTimelines && $store.state.settings.tagTimelines.length > 0"></div>

From 429bf179dcc9ece40f043ade3e725a9765a195b6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 13:14:17 +0900
Subject: [PATCH 305/539] Refactor: Better type annotations

---
 src/server/api/endpoints/i/pin.ts | 5 +++--
 src/services/i/pin.ts             | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index ce3b0318a9..d075976b74 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,3 +1,4 @@
+import * as mongo from 'mongodb';
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Note from '../../../../models/note';
@@ -22,8 +23,8 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		return rej('note not found');
 	}
 
-	let addedId;
-	let removedId;
+	let addedId: mongo.ObjectID;
+	let removedId: mongo.ObjectID;
 
 	const pinnedNoteIds = user.pinnedNoteIds || [];
 
diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
index c6d3e11788..5bf8d166bb 100644
--- a/src/services/i/pin.ts
+++ b/src/services/i/pin.ts
@@ -7,7 +7,7 @@ import renderRemove from '../../remote/activitypub/renderer/remove';
 import packAp from '../../remote/activitypub/renderer';
 import { deliver } from '../../queue';
 
-export async function deliverPinnedChange(userId: mongo.ObjectID, oldId: mongo.ObjectID, newId: mongo.ObjectID) {
+export async function deliverPinnedChange(userId: mongo.ObjectID, oldId?: mongo.ObjectID, newId?: mongo.ObjectID) {
 	const user = await User.findOne({
 		_id: userId
 	});

From ccfd48232a63931b6c8f425f5b52cf8c4315885c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 13:14:42 +0900
Subject: [PATCH 306/539] 8.51.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 68a06213a5..f38dc1c118 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.50.0",
-	"clientVersion": "1.0.9883",
+	"version": "8.51.0",
+	"clientVersion": "1.0.9887",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 1ac033ff184a82840a584a12bed1e74960619f57 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:30:50 +0900
Subject: [PATCH 307/539] Improve keyboard shortcut

---
 .../desktop/views/components/notes.note.vue   | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 18a1ce9e52..e53dbe1215 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -115,9 +115,19 @@ export default Vue.extend({
 			return {
 				'r|left': this.reply,
 				'a|plus': () => this.react(true),
-				'n|right': this.renote,
+				'q|n|right': this.renote,
 				'up|shift+tab': this.focusBefore,
 				'down|tab': this.focusAfter,
+				'1': () => this.reactDirectly('like'),
+				'2': () => this.reactDirectly('love'),
+				'3': () => this.reactDirectly('laugh'),
+				'4': () => this.reactDirectly('hmm'),
+				'5': () => this.reactDirectly('surprise'),
+				'6': () => this.reactDirectly('congrats'),
+				'7': () => this.reactDirectly('angry'),
+				'8': () => this.reactDirectly('confused'),
+				'9': () => this.reactDirectly('rip'),
+				'0': () => this.reactDirectly('pudding'),
 			};
 		},
 
@@ -252,6 +262,13 @@ export default Vue.extend({
 			}).$once('closed', this.focus);
 		},
 
+		reactDirectly(reaction) {
+			(this as any).api('notes/reactions/create', {
+				noteId: this.p.id,
+				reaction: reaction
+			});
+		},
+
 		menu() {
 			(this as any).os.new(MkNoteMenu, {
 				source: this.$refs.menuButton,

From 16c36163b4eedabdba337697cc85c2e513eae439 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:35:46 +0900
Subject: [PATCH 308/539] Fix bug

---
 src/client/app/desktop/views/components/notes.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 469f62c080..e6267ed204 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -10,7 +10,7 @@
 	</div>
 
 	<!-- トランジションを有効にするとなぜかメモリリークする -->
-	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div">
+	<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div" ref="notes">
 		<template v-for="(note, i) in _notes">
 			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" ref="note"/>
 			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
@@ -89,7 +89,7 @@ export default Vue.extend({
 		},
 
 		focus() {
-			(this.$refs.note as any)[0].focus();
+			(this.$refs.notes as any).children[0].focus ? (this.$refs.notes as any).children[0].focus() : (this.$refs.notes as any).$el.children[0].focus();
 		},
 
 		onNoteUpdated(i, note) {

From f4045fb5b32b69664427d844a66d37258e19c5b1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:39:18 +0900
Subject: [PATCH 309/539] Improve keyboard shortcuts

---
 src/client/app/desktop/views/components/notes.note.vue      | 2 +-
 .../app/desktop/views/components/renote-form-window.vue     | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index e53dbe1215..b96f3ab998 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -115,7 +115,7 @@ export default Vue.extend({
 			return {
 				'r|left': this.reply,
 				'a|plus': () => this.react(true),
-				'q|n|right': this.renote,
+				'q|right': this.renote,
 				'up|shift+tab': this.focusBefore,
 				'down|tab': this.focusAfter,
 				'1': () => this.reactDirectly('like'),
diff --git a/src/client/app/desktop/views/components/renote-form-window.vue b/src/client/app/desktop/views/components/renote-form-window.vue
index 6c9cb59d4a..44ad2da800 100644
--- a/src/client/app/desktop/views/components/renote-form-window.vue
+++ b/src/client/app/desktop/views/components/renote-form-window.vue
@@ -15,7 +15,8 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'esc': this.close,
-				'ctrl+enter': this.post
+				'enter': this.post,
+				'q': this.quote,
 			};
 		}
 	},
@@ -24,6 +25,9 @@ export default Vue.extend({
 		post() {
 			(this.$refs.form as any).ok();
 		},
+		quote() {
+			(this.$refs.form as any).onQuote();
+		},
 		close() {
 			(this.$refs.window as any).close();
 		},

From dba04cc59cb30d3acc9dd03be5c2be63718453e9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:43:54 +0900
Subject: [PATCH 310/539] Improve keyboard shortcuts

---
 .../app/common/views/components/reaction-picker.vue       | 8 ++++----
 src/client/app/desktop/views/components/notes.note.vue    | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index ce0d2a8ea3..fff2c56f00 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -77,10 +77,10 @@ export default Vue.extend({
 			return {
 				'esc': this.close,
 				'enter|space|plus': this.choose,
-				'up': this.focusUp,
-				'right': this.focusRight,
-				'down': this.focusDown,
-				'left': this.focusLeft,
+				'up|k': this.focusUp,
+				'left|h|shift+tab': this.focusLeft,
+				'right|l|tab': this.focusRight,
+				'down|j': this.focusDown,
 				'1': () => this.react('like'),
 				'2': () => this.react('love'),
 				'3': () => this.react('laugh'),
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index b96f3ab998..d60bce2545 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -116,8 +116,8 @@ export default Vue.extend({
 				'r|left': this.reply,
 				'a|plus': () => this.react(true),
 				'q|right': this.renote,
-				'up|shift+tab': this.focusBefore,
-				'down|tab': this.focusAfter,
+				'up|k|shift+tab': this.focusBefore,
+				'down|j|tab': this.focusAfter,
 				'1': () => this.reactDirectly('like'),
 				'2': () => this.reactDirectly('love'),
 				'3': () => this.reactDirectly('laugh'),

From 5184a07cf2ba3e5faa703e2f0cfcf465187585ea Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:50:13 +0900
Subject: [PATCH 311/539] Improve usability

---
 .../desktop/views/components/notes.note.vue    | 18 ++++++++++--------
 .../views/components/post-form-window.vue      | 18 ++++++++++++++++--
 .../views/components/renote-form-window.vue    | 15 +++++++++++++--
 .../app/desktop/views/components/window.vue    | 17 +++++++++++------
 4 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index d60bce2545..bffa6affc9 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -40,12 +40,12 @@
 			</div>
 			<footer>
 				<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
-				<button class="replyButton" @click="reply" title="%i18n:@reply%">
+				<button class="replyButton" @click="reply()" title="%i18n:@reply%">
 					<template v-if="p.reply">%fa:reply-all%</template>
 					<template v-else>%fa:reply%</template>
 					<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p>
 				</button>
-				<button class="renoteButton" @click="renote" title="%i18n:@renote%">
+				<button class="renoteButton" @click="renote()" title="%i18n:@renote%">
 					%fa:retweet%<p class="count" v-if="p.renoteCount > 0">{{ p.renoteCount }}</p>
 				</button>
 				<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react()" ref="reactButton" title="%i18n:@add-reaction%">
@@ -113,9 +113,9 @@ export default Vue.extend({
 	computed: {
 		keymap(): any {
 			return {
-				'r|left': this.reply,
+				'r|left': () => this.reply(true),
 				'a|plus': () => this.react(true),
-				'q|right': this.renote,
+				'q|right': () => this.renote(true),
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
 				'1': () => this.reactDirectly('like'),
@@ -240,15 +240,17 @@ export default Vue.extend({
 			}
 		},
 
-		reply() {
+		reply(viaKeyboard = false) {
 			(this as any).os.new(MkPostFormWindow, {
-				reply: this.p
+				reply: this.p,
+				animation: !viaKeyboard
 			}).$once('closed', this.focus);
 		},
 
-		renote() {
+		renote(viaKeyboard = false) {
 			(this as any).os.new(MkRenoteFormWindow, {
-				note: this.p
+				note: this.p,
+				animation: !viaKeyboard
 			}).$once('closed', this.focus);
 		},
 
diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue
index ade84f6bb9..6b6bf3a24a 100644
--- a/src/client/app/desktop/views/components/post-form-window.vue
+++ b/src/client/app/desktop/views/components/post-form-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window class="mk-post-form-window" ref="window" is-modal @closed="onWindowClosed">
+<mk-window class="mk-post-form-window" ref="window" is-modal @closed="onWindowClosed" :animation="animation">
 	<span slot="header" class="mk-post-form-window--header">
 		<span class="icon" v-if="geo">%fa:map-marker-alt%</span>
 		<span v-if="!reply">%i18n:@note%</span>
@@ -25,7 +25,19 @@
 import Vue from 'vue';
 
 export default Vue.extend({
-	props: ['reply'],
+	props: {
+		reply: {
+			type: Object,
+			required: true
+		},
+
+		animation: {
+			type: Boolean,
+			required: false,
+			default: true
+		}
+	},
+
 	data() {
 		return {
 			uploadings: [],
@@ -33,11 +45,13 @@ export default Vue.extend({
 			geo: null
 		};
 	},
+
 	mounted() {
 		this.$nextTick(() => {
 			(this.$refs.form as any).focus();
 		});
 	},
+
 	methods: {
 		onChangeUploadings(files) {
 			this.uploadings = files;
diff --git a/src/client/app/desktop/views/components/renote-form-window.vue b/src/client/app/desktop/views/components/renote-form-window.vue
index 44ad2da800..b9760fcbe9 100644
--- a/src/client/app/desktop/views/components/renote-form-window.vue
+++ b/src/client/app/desktop/views/components/renote-form-window.vue
@@ -1,5 +1,5 @@
 <template>
-<mk-window ref="window" is-modal @closed="onWindowClosed">
+<mk-window ref="window" is-modal @closed="onWindowClosed" :animation="animation">
 	<span slot="header" :class="$style.header">%fa:retweet%%i18n:@title%</span>
 	<mk-renote-form ref="form" :note="note" @posted="onPosted" @canceled="onCanceled" v-hotkey.global="keymap"/>
 </mk-window>
@@ -9,7 +9,18 @@
 import Vue from 'vue';
 
 export default Vue.extend({
-	props: ['note'],
+	props: {
+		note: {
+			type: Object,
+			required: true
+		},
+
+		animation: {
+			type: Boolean,
+			required: false,
+			default: true
+		}
+	},
 
 	computed: {
 		keymap(): any {
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index e6886956eb..5eece3795f 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -76,6 +76,11 @@ export default Vue.extend({
 		name: {
 			type: String,
 			default: null
+		},
+		animation: {
+			type: Boolean,
+			required: false,
+			default: true
 		}
 	},
 
@@ -142,7 +147,7 @@ export default Vue.extend({
 				anime({
 					targets: bg,
 					opacity: 1,
-					duration: 100,
+					duration: this.animation ? 100 : 0,
 					easing: 'linear'
 				});
 			}
@@ -152,7 +157,7 @@ export default Vue.extend({
 				targets: main,
 				opacity: 1,
 				scale: [1.1, 1],
-				duration: 200,
+				duration: this.animation ? 200 : 0,
 				easing: 'easeOutQuad'
 			});
 
@@ -160,7 +165,7 @@ export default Vue.extend({
 
 			setTimeout(() => {
 				this.$emit('opened');
-			}, 300);
+			}, this.animation ? 300 : 0);
 		},
 
 		close() {
@@ -174,7 +179,7 @@ export default Vue.extend({
 				anime({
 					targets: bg,
 					opacity: 0,
-					duration: 300,
+					duration: this.animation ? 300 : 0,
 					easing: 'linear'
 				});
 			}
@@ -185,14 +190,14 @@ export default Vue.extend({
 				targets: main,
 				opacity: 0,
 				scale: 0.8,
-				duration: 300,
+				duration: this.animation ? 300 : 0,
 				easing: [0.5, -0.5, 1, 0.5]
 			});
 
 			setTimeout(() => {
 				this.$emit('closed');
 				this.destroyDom();
-			}, 300);
+			}, this.animation ? 300 : 0);
 		},
 
 		popout() {

From 87b6ef0ec52b684b60a4d99d1fe9b4a82db6bc52 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:53:17 +0900
Subject: [PATCH 312/539] Improve keyboard shortcut

---
 src/client/app/desktop/views/components/notes.note.vue | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index bffa6affc9..a2ba85bdf9 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -115,6 +115,7 @@ export default Vue.extend({
 			return {
 				'r|left': () => this.reply(true),
 				'a|plus': () => this.react(true),
+				'ctrl+q|ctrl+right': this.renoteDirectly,
 				'q|right': () => this.renote(true),
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
@@ -254,6 +255,12 @@ export default Vue.extend({
 			}).$once('closed', this.focus);
 		},
 
+		renoteDirectly() {
+			(this as any).api('notes/create', {
+				renoteId: this.p.id
+			});
+		},
+
 		react(viaKeyboard = false) {
 			this.blur();
 			(this as any).os.new(MkReactionPicker, {

From 0ed704d173f00b352e299c53e5e497dde5a460fb Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 14:54:01 +0900
Subject: [PATCH 313/539] 8.52.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index f38dc1c118..6dedee712a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.51.0",
-	"clientVersion": "1.0.9887",
+	"version": "8.52.0",
+	"clientVersion": "1.0.9894",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 3b628ec3c464951a47896dca550ae1da66c05ec5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 15:02:15 +0900
Subject: [PATCH 314/539] =?UTF-8?q?=E5=B0=86=E6=9D=A5=E7=9A=84=E3=81=AB?=
 =?UTF-8?q?=E3=83=90=E3=82=B0=E3=81=AB=E7=B9=8B=E3=81=8C=E3=82=8A=E3=81=8B?=
 =?UTF-8?q?=E3=81=AD=E3=81=AA=E3=81=84=E6=8C=99=E5=8B=95=E3=82=92=E4=BF=AE?=
 =?UTF-8?q?=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/hotkey.ts | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
index 03806fb184..e63fcc9f97 100644
--- a/src/client/app/common/hotkey.ts
+++ b/src/client/app/common/hotkey.ts
@@ -22,7 +22,10 @@ const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): a
 
 	result.patterns = patterns.split('|').map(part => {
 		const pattern = {
-			which: []
+			which: [],
+			ctrl: false,
+			alt: false,
+			shift: false
 		} as pattern;
 
 		part.trim().split('+').forEach(key => {
@@ -66,10 +69,10 @@ export default {
 						if (el._hotkey_global && targetReservedKeys.includes(`'${key}'`)) break;
 
 						const matched = action.patterns.some(pattern => {
-							let matched = pattern.which.includes(key);
-							if (pattern.ctrl && !e.ctrlKey) matched = false;
-							if (pattern.shift && !e.shiftKey) matched = false;
-							if (pattern.alt && !e.altKey) matched = false;
+							const matched = pattern.which.includes(key) &&
+								pattern.ctrl == e.ctrlKey &&
+								pattern.shift == e.shiftKey &&
+								pattern.alt == e.altKey;
 
 							if (matched) {
 								e.preventDefault();

From 6ead1de383764bf4c7cbd3b2e453ed8bde6da0d3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 15:02:26 +0900
Subject: [PATCH 315/539] Improve readability

---
 src/client/app/desktop/views/components/notes.note.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index a2ba85bdf9..e2c61dabe8 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -115,8 +115,8 @@ export default Vue.extend({
 			return {
 				'r|left': () => this.reply(true),
 				'a|plus': () => this.react(true),
-				'ctrl+q|ctrl+right': this.renoteDirectly,
 				'q|right': () => this.renote(true),
+				'ctrl+q|ctrl+right': this.renoteDirectly,
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
 				'1': () => this.reactDirectly('like'),

From 8bf4e5533851886057687b46a41f1cd88e4cd810 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 16:45:20 +0900
Subject: [PATCH 316/539] Improve keyboard shortcuts

---
 src/client/app/common/views/components/menu.vue        |  4 ++--
 .../app/common/views/components/reaction-picker.vue    |  4 ++--
 src/client/app/desktop/views/components/notes.note.vue | 10 ++++++----
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index fba7e235e0..ad5ec619ba 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -2,9 +2,9 @@
 <div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
 	<div class="backdrop" ref="backdrop" @click="close"></div>
 	<div class="popover" :class="{ hukidasi }" ref="popover">
-		<template v-for="item in items">
+		<template v-for="item, i in items">
 			<div v-if="item === null"></div>
-			<button v-if="item" @click="clicked(item.action)" v-html="item.icon ? item.icon + ' ' + item.text : item.text"></button>
+			<button v-if="item" @click="clicked(item.action)" v-html="item.icon ? item.icon + ' ' + item.text : item.text" :tabindex="i"></button>
 		</template>
 	</div>
 </div>
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index fff2c56f00..f732e40b9d 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -97,10 +97,10 @@ export default Vue.extend({
 
 	watch: {
 		focus(i) {
-			this.$refs.buttons.childNodes[i].focus();
+			this.$refs.buttons.children[i].focus();
 
 			if (this.showFocus) {
-				this.title = this.$refs.buttons.childNodes[i].title;
+				this.title = this.$refs.buttons.children[i].title;
 			}
 		}
 	},
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index e2c61dabe8..d1178a933a 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -51,7 +51,7 @@
 				<button class="reactionButton" :class="{ reacted: p.myReaction != null }" @click="react()" ref="reactButton" title="%i18n:@add-reaction%">
 					%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p>
 				</button>
-				<button @click="menu" ref="menuButton">
+				<button @click="menu()" ref="menuButton">
 					%fa:ellipsis-h%
 				</button>
 				<!-- <button title="%i18n:@detail">
@@ -114,11 +114,12 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'r|left': () => this.reply(true),
-				'a|plus': () => this.react(true),
+				'e|a|plus': () => this.react(true),
 				'q|right': () => this.renote(true),
 				'ctrl+q|ctrl+right': this.renoteDirectly,
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
+				'm|o': () => this.menu(true),
 				'1': () => this.reactDirectly('like'),
 				'2': () => this.reactDirectly('love'),
 				'3': () => this.reactDirectly('laugh'),
@@ -278,10 +279,11 @@ export default Vue.extend({
 			});
 		},
 
-		menu() {
+		menu(viaKeyboard = false) {
 			(this as any).os.new(MkNoteMenu, {
 				source: this.$refs.menuButton,
-				note: this.p
+				note: this.p,
+				animation: !viaKeyboard
 			}).$once('closed', this.focus);
 		},
 

From 30608d3e22ed0d0af726200229c25794a789f5e7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 18 Sep 2018 16:45:55 +0900
Subject: [PATCH 317/539] 8.53.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 6dedee712a..4da69b44a9 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.52.0",
-	"clientVersion": "1.0.9894",
+	"version": "8.53.0",
+	"clientVersion": "1.0.9898",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 7b9cea06ef94de28216ab9921879cd3c24ccca0f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:26:06 +0900
Subject: [PATCH 318/539] Fix

---
 src/client/app/desktop/views/components/post-form-window.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue
index 6b6bf3a24a..466d5e1fd8 100644
--- a/src/client/app/desktop/views/components/post-form-window.vue
+++ b/src/client/app/desktop/views/components/post-form-window.vue
@@ -28,7 +28,7 @@ export default Vue.extend({
 	props: {
 		reply: {
 			type: Object,
-			required: true
+			required: false
 		},
 
 		animation: {

From b0d60ef2c2a4f7a3cc25730a19791aed8fcc1a35 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:27:19 +0900
Subject: [PATCH 319/539] Add new shortcut

---
 src/client/app/desktop/views/components/notes.note.vue | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index d1178a933a..1a670a9e7a 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -120,6 +120,7 @@ export default Vue.extend({
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
 				'm|o': () => this.menu(true),
+				's': this.toggleShowContent,
 				'1': () => this.reactDirectly('like'),
 				'2': () => this.reactDirectly('love'),
 				'3': () => this.reactDirectly('laugh'),
@@ -287,6 +288,10 @@ export default Vue.extend({
 			}).$once('closed', this.focus);
 		},
 
+		toggleShowContent() {
+			this.showContent = !this.showContent;
+		},
+
 		focus() {
 			this.$el.focus();
 		},

From fd770b008e3b4a71c83dba71d588f9a6399a771c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:32:44 +0900
Subject: [PATCH 320/539] Add new shortcut

---
 .../views/components/ui.header.notifications.vue       | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/ui.header.notifications.vue b/src/client/app/desktop/views/components/ui.header.notifications.vue
index 59a16df9ec..74dcd4111f 100644
--- a/src/client/app/desktop/views/components/ui.header.notifications.vue
+++ b/src/client/app/desktop/views/components/ui.header.notifications.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="notifications">
+<div class="notifications" v-hotkey.global="keymap">
 	<button :data-active="isOpen" @click="toggle" title="%i18n:@title%">
 		%fa:R bell%<template v-if="hasUnreadNotification">%fa:circle%</template>
 	</button>
@@ -19,11 +19,19 @@ export default Vue.extend({
 			isOpen: false
 		};
 	},
+
 	computed: {
 		hasUnreadNotification(): boolean {
 			return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadNotification;
+		},
+
+		keymap(): any {
+			return {
+				'shift+n': this.toggle
+			};
 		}
 	},
+
 	methods: {
 		toggle() {
 			this.isOpen ? this.close() : this.open();

From 3c865d6054b0efdcd32fdde7fd0997dfa85694d5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:35:32 +0900
Subject: [PATCH 321/539] Add new shortcut

---
 src/client/app/desktop/views/components/notes.note.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 1a670a9e7a..fdf41a52c9 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -119,6 +119,7 @@ export default Vue.extend({
 				'ctrl+q|ctrl+right': this.renoteDirectly,
 				'up|k|shift+tab': this.focusBefore,
 				'down|j|tab': this.focusAfter,
+				'esc': this.blur,
 				'm|o': () => this.menu(true),
 				's': this.toggleShowContent,
 				'1': () => this.reactDirectly('like'),

From 7bc9de03a6013cd0d4d979193f2429aa0532c403 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 19 Sep 2018 02:39:15 +0900
Subject: [PATCH 322/539] fix(package): update webpack to version 4.19.1
 (#2732)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 4da69b44a9..cf468ee98b 100644
--- a/package.json
+++ b/package.json
@@ -219,7 +219,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.2",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.19.0",
+		"webpack": "4.19.1",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.26",
 		"ws": "6.0.0",

From 89f6b03cd6f434857f2b76c622c5e9c1f8f5d2ce Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Wed, 19 Sep 2018 02:39:57 +0900
Subject: [PATCH 323/539] fix(package): update web-push to version 3.3.3
 (#2733)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index cf468ee98b..28f856ef0a 100644
--- a/package.json
+++ b/package.json
@@ -217,7 +217,7 @@
 		"vuewordcloud": "18.7.11",
 		"vuex": "3.0.1",
 		"vuex-persistedstate": "2.5.4",
-		"web-push": "3.3.2",
+		"web-push": "3.3.3",
 		"webfinger.js": "2.6.6",
 		"webpack": "4.19.1",
 		"webpack-cli": "3.1.0",

From a23b8cebbcc1fd4aed01464ed19943ca7ac69647 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:41:09 +0900
Subject: [PATCH 324/539] 8.54.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 28f856ef0a..3fd494abf4 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.53.0",
-	"clientVersion": "1.0.9898",
+	"version": "8.54.0",
+	"clientVersion": "1.0.9905",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 609d68933e16852dc4779266bce4860d2ef72448 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 02:51:06 +0900
Subject: [PATCH 325/539] Add new shortcut

---
 .../app/desktop/views/components/ui.header.account.vue   | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index 5e26389d89..1e8a45beaf 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="account">
+<div class="account" v-hotkey.global="keymap">
 	<button class="header" :data-active="isOpen" @click="toggle">
 		<span class="username">{{ $store.state.i.username }}<template v-if="!isOpen">%fa:angle-down%</template><template v-if="isOpen">%fa:angle-up%</template></span>
 		<mk-avatar class="avatar" :user="$store.state.i"/>
@@ -63,6 +63,13 @@ export default Vue.extend({
 			isOpen: false
 		};
 	},
+	computed: {
+		keymap(): any {
+			return {
+				'a|m': this.toggle
+			};
+		}
+	},
 	beforeDestroy() {
 		this.close();
 	},

From 8414db57f00609377336896de20ffdf565d6c924 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Wed, 19 Sep 2018 07:17:19 +0900
Subject: [PATCH 326/539] Specify AP Cache-Control (#2735)

---
 src/server/activitypub.ts           | 4 ++++
 src/server/activitypub/featured.ts  | 1 +
 src/server/activitypub/followers.ts | 1 +
 src/server/activitypub/following.ts | 1 +
 src/server/activitypub/outbox.ts    | 2 ++
 5 files changed, 9 insertions(+)

diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index 2cbce8cfbc..adbc6639fa 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -75,6 +75,7 @@ router.get('/notes/:note', async (ctx, next) => {
 	}
 
 	ctx.body = pack(await renderNote(note, false));
+	ctx.set('Cache-Control', 'public, max-age=180');
 	setResponseType(ctx);
 });
 
@@ -91,6 +92,7 @@ router.get('/notes/:note/activity', async ctx => {
 	}
 
 	ctx.body = pack(await packActivity(note));
+	ctx.set('Cache-Control', 'public, max-age=180');
 	setResponseType(ctx);
 });
 
@@ -122,6 +124,7 @@ router.get('/users/:user/publickey', async ctx => {
 
 	if (isLocalUser(user)) {
 		ctx.body = pack(renderKey(user));
+		ctx.set('Cache-Control', 'public, max-age=180');
 		setResponseType(ctx);
 	} else {
 		ctx.status = 400;
@@ -136,6 +139,7 @@ async function userInfo(ctx: Router.IRouterContext, user: IUser) {
 	}
 
 	ctx.body = pack(await renderPerson(user as ILocalUser));
+	ctx.set('Cache-Control', 'public, max-age=180');
 	setResponseType(ctx);
 }
 
diff --git a/src/server/activitypub/featured.ts b/src/server/activitypub/featured.ts
index 93c3700206..f400cc416f 100644
--- a/src/server/activitypub/featured.ts
+++ b/src/server/activitypub/featured.ts
@@ -34,5 +34,6 @@ export default async (ctx: Router.IRouterContext) => {
 	);
 
 	ctx.body = pack(rendered);
+	ctx.set('Cache-Control', 'private, max-age=0, must-revalidate');
 	setResponseType(ctx);
 };
diff --git a/src/server/activitypub/followers.ts b/src/server/activitypub/followers.ts
index eb58703443..fcc75fc5b1 100644
--- a/src/server/activitypub/followers.ts
+++ b/src/server/activitypub/followers.ts
@@ -78,6 +78,7 @@ export default async (ctx: Router.IRouterContext) => {
 		// index page
 		const rendered = renderOrderedCollection(partOf, user.followersCount, `${partOf}?page=true`, null);
 		ctx.body = pack(rendered);
+		ctx.set('Cache-Control', 'private, max-age=0, must-revalidate');
 		setResponseType(ctx);
 	}
 };
diff --git a/src/server/activitypub/following.ts b/src/server/activitypub/following.ts
index 80878fd4ca..2c739ff07d 100644
--- a/src/server/activitypub/following.ts
+++ b/src/server/activitypub/following.ts
@@ -78,6 +78,7 @@ export default async (ctx: Router.IRouterContext) => {
 		// index page
 		const rendered = renderOrderedCollection(partOf, user.followingCount, `${partOf}?page=true`, null);
 		ctx.body = pack(rendered);
+		ctx.set('Cache-Control', 'private, max-age=0, must-revalidate');
 		setResponseType(ctx);
 	}
 };
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index 1d062f61a1..aeb6f25dd4 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -88,6 +88,7 @@ export default async (ctx: Router.IRouterContext) => {
 		);
 
 		ctx.body = pack(rendered);
+		ctx.set('Cache-Control', 'private, max-age=0, must-revalidate');
 		setResponseType(ctx);
 	} else {
 		// index page
@@ -96,6 +97,7 @@ export default async (ctx: Router.IRouterContext) => {
 			`${partOf}?page=true&since_id=000000000000000000000000`
 		);
 		ctx.body = pack(rendered);
+		ctx.set('Cache-Control', 'private, max-age=0, must-revalidate');
 		setResponseType(ctx);
 	}
 };

From a9a2f4820bc02620917aa6b1703bc5cfff4c36c9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 08:36:06 +0900
Subject: [PATCH 327/539] Add keyboard shortcut doc

---
 src/client/app/app.vue              | 23 ++++++-
 src/docs/keyboard-shortcut.ja-JP.md | 96 +++++++++++++++++++++++++++++
 src/docs/style.styl                 | 21 +++++++
 3 files changed, 139 insertions(+), 1 deletion(-)
 create mode 100644 src/docs/keyboard-shortcut.ja-JP.md

diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 7a46e7dea0..9de01ef060 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -1,3 +1,24 @@
 <template>
-<router-view id="app"></router-view>
+<router-view id="app" v-hotkey.global="keymap"></router-view>
 </template>
+
+<script lang="ts">
+import Vue from 'vue';
+import { url, lang } from './config';
+
+export default Vue.extend({
+	computed: {
+		keymap(): any {
+			return {
+				'h|slash': this.help
+			};
+		}
+	},
+
+	methods: {
+		help() {
+			window.open(`${url}/docs/${lang}/keyboard-shortcut`, '_blank');
+		}
+	}
+});
+</script>
diff --git a/src/docs/keyboard-shortcut.ja-JP.md b/src/docs/keyboard-shortcut.ja-JP.md
new file mode 100644
index 0000000000..59101dc290
--- /dev/null
+++ b/src/docs/keyboard-shortcut.ja-JP.md
@@ -0,0 +1,96 @@
+# Misskeyキーボードショートカットまとめ
+
+## グローバル
+これらのショートカットは基本的にどこでも使えます。
+<table>
+	<thead>
+		<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
+		<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
+		<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
+		<tr><td><kbd class="key">A</kbd>, <kbd class="key">M</kbd></td><td>アカウントメニューを表示/隠す</td><td><b>A</b>ccount, <b>M</b>y, <b>M</b>e, <b>M</b>enu</td></tr>
+		<tr><td><kbd class="key">Z</kbd></td><td>上部のバーを隠す</td><td><b>Z</b>en</td></tr>
+		<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
+	</tbody>
+</table>
+
+## 投稿にフォーカスされた状態
+<table>
+	<thead>
+		<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">←</kbd>, <kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
+		<tr><td><kbd class="key">→</kbd>, <kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
+		<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">→</kbd></kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
+		<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
+		<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
+		<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
+		<tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
+		<tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
+	</tbody>
+</table>
+
+## Renoteフォーム
+<table>
+	<thead>
+		<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
+		<tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
+		<tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
+	</tbody>
+</table>
+
+## リアクションフォーム
+デフォルトで「👍」にフォーカスが当たっている状態です。
+<table>
+	<thead>
+		<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
+		<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</td></tr>
+		<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションで確定(対応については後述)</td><td>-</td></tr>
+		<tr><td><kbd class="key">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
+	</tbody>
+</table>
+
+## リアクションと数字キーの対応
+<table>
+	<thead>
+		<tr><th>数字キー</th><th>リアクション</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">1</kbd></td><td>👍</td></tr>
+		<tr><td><kbd class="key">2</kbd></td><td>❤️</td></tr>
+		<tr><td><kbd class="key">3</kbd></td><td>😆</td></tr>
+		<tr><td><kbd class="key">4</kbd></td><td>🤔</td></tr>
+		<tr><td><kbd class="key">5</kbd></td><td>😮</td></tr>
+		<tr><td><kbd class="key">6</kbd></td><td>🎉</td></tr>
+		<tr><td><kbd class="key">7</kbd></td><td>💢</td></tr>
+		<tr><td><kbd class="key">8</kbd></td><td>😥</td></tr>
+		<tr><td><kbd class="key">9</kbd></td><td>😇</td></tr>
+		<tr><td><kbd class="key">0</kbd></td><td>🍮 or 🍣</td></tr>
+	</tbody>
+</table>
+
+# 例
+<table>
+	<thead>
+		<tr><th>ショートカット</th><th>動作</th></tr>
+	</thead>
+	<tbody>
+		<tr><td><kbd class="key">t</kbd><kbd class="key">+</kbd><kbd class="key">+</kbd></td><td>タイムラインの最新の投稿に👍する</td></tr>
+		<tr><td><kbd class="key">t</kbd><kbd class="key">1</kbd></td><td>タイムラインの最新の投稿に👍する</td></tr>
+		<tr><td><kbd class="key">t</kbd><kbd class="key">0</kbd></td><td>タイムラインの最新の投稿に🍮する</td></tr>
+	</tbody>
+</table>
diff --git a/src/docs/style.styl b/src/docs/style.styl
index b01fe493ac..70d77b5499 100644
--- a/src/docs/style.styl
+++ b/src/docs/style.styl
@@ -128,3 +128,24 @@ pre
 	> code
 		display block
 		padding 16px
+
+kbd.group
+	display inline-block
+	padding 4px
+	background #fbfbfb
+	border 1px solid #d6d6d6
+	border-radius 4px
+	box-shadow 0 1px 1px rgba(0, 0, 0, 0.1)
+
+kbd.key
+	display inline-block
+	padding 6px 8px
+	background #fff
+	border solid 1px #cecece
+	border-radius 4px
+	box-shadow 0 1px 1px rgba(0, 0, 0, 0.1)
+
+td
+	> kbd.group,
+	> kbd.key
+		margin 4px

From 195f676500699bc39beb6eab603ae49dc735ed67 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 08:38:18 +0900
Subject: [PATCH 328/539] 8.55.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 3fd494abf4..802d1d233f 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.54.0",
-	"clientVersion": "1.0.9905",
+	"version": "8.55.0",
+	"clientVersion": "1.0.9909",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From d9f0e158a35eec183da77e84a3b038fab645bf62 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 14:18:34 +0900
Subject: [PATCH 329/539] Implement #2736

---
 .../app/common/scripts/streaming/home.ts      | 24 +++++++
 .../desktop/views/components/notes.note.vue   |  8 ++-
 .../app/desktop/views/components/timeline.vue | 11 +++-
 .../desktop/views/pages/deck/deck.note.vue    |  8 ++-
 .../app/mobile/views/components/note.vue      |  8 ++-
 .../app/mobile/views/components/ui.header.vue |  3 -
 src/client/app/mobile/views/pages/drive.vue   |  6 +-
 .../app/mobile/views/pages/favorites.vue      |  2 +-
 .../app/mobile/views/pages/games/reversi.vue  |  2 +-
 src/client/app/mobile/views/pages/home.vue    | 27 +++++++-
 .../app/mobile/views/pages/messaging-room.vue |  2 +-
 .../app/mobile/views/pages/messaging.vue      |  2 +-
 src/client/app/mobile/views/pages/note.vue    |  2 +-
 .../app/mobile/views/pages/notifications.vue  |  2 +-
 .../app/mobile/views/pages/settings.vue       |  2 +-
 src/client/app/mobile/views/pages/tag.vue     |  2 +-
 src/client/app/mobile/views/pages/widgets.vue |  2 +-
 src/models/note-unread.ts                     | 17 +++++
 src/models/note.ts                            |  4 +-
 src/models/user.ts                            |  8 ++-
 src/server/api/endpoints/i.ts                 |  1 +
 src/server/api/stream/home.ts                 |  4 ++
 src/services/note/create.ts                   | 22 ++++---
 src/services/note/read.ts                     | 62 +++++++++++++++++++
 src/services/note/unread.ts                   | 47 ++++++++++++++
 25 files changed, 239 insertions(+), 39 deletions(-)
 create mode 100644 src/models/note-unread.ts
 create mode 100644 src/services/note/read.ts
 create mode 100644 src/services/note/unread.ts

diff --git a/src/client/app/common/scripts/streaming/home.ts b/src/client/app/common/scripts/streaming/home.ts
index dd18c70d70..26729507fb 100644
--- a/src/client/app/common/scripts/streaming/home.ts
+++ b/src/client/app/common/scripts/streaming/home.ts
@@ -50,6 +50,30 @@ export class HomeStream extends Stream {
 			});
 		});
 
+		this.on('unreadMention', () => {
+			os.store.dispatch('mergeMe', {
+				hasUnreadMentions: true
+			});
+		});
+
+		this.on('readAllUnreadMentions', () => {
+			os.store.dispatch('mergeMe', {
+				hasUnreadMentions: false
+			});
+		});
+
+		this.on('unreadSpecifiedNote', () => {
+			os.store.dispatch('mergeMe', {
+				hasUnreadSpecifiedNotes: true
+			});
+		});
+
+		this.on('readAllUnreadSpecifiedNotes', () => {
+			os.store.dispatch('mergeMe', {
+				hasUnreadSpecifiedNotes: false
+			});
+		});
+
 		this.on('clientSettingUpdated', x => {
 			os.store.commit('settings/set', {
 				key: x.key,
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index fdf41a52c9..ac2c1ce97f 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -213,10 +213,14 @@ export default Vue.extend({
 	methods: {
 		capture(withHandler = false) {
 			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
+				const data = {
 					type: 'capture',
 					id: this.p.id
-				});
+				} as any;
+				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
+					data.read = true;
+				}
+				this.connection.send(data);
 				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
 			}
 		},
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 9f421a68ed..7d683236bb 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -8,8 +8,8 @@
 		<span :data-active="src == 'tag'" @click="src = 'tag'" v-if="tagTl">%fa:hashtag% {{ tagTl.title }}</span>
 		<span :data-active="src == 'list'" @click="src = 'list'" v-if="list">%fa:list% {{ list.title }}</span>
 		<div class="buttons">
-			<button :data-active="src == 'mentions'" @click="src = 'mentions'" title="%i18n:@mentions%">%fa:at%</button>
-			<button :data-active="src == 'messages'" @click="src = 'messages'" title="%i18n:@messages%">%fa:envelope R%</button>
+			<button :data-active="src == 'mentions'" @click="src = 'mentions'" title="%i18n:@mentions%">%fa:at%<i class="badge" v-if="$store.state.i.hasUnreadMentions">%fa:circle%</i></button>
+			<button :data-active="src == 'messages'" @click="src = 'messages'" title="%i18n:@messages%">%fa:envelope R%<i class="badge" v-if="$store.state.i.hasUnreadSpecifiedNotes">%fa:circle%</i></button>
 			<button @click="chooseTag" title="%i18n:@hashtag%" ref="tagButton">%fa:hashtag%</button>
 			<button @click="chooseList" title="%i18n:@list%" ref="listButton">%fa:list%</button>
 		</div>
@@ -202,6 +202,13 @@ root(isDark)
 				line-height 42px
 				color isDark ? #9baec8 : #ccc
 
+				> .badge
+					position absolute
+					top -4px
+					right 4px
+					font-size 10px
+					color $theme-color
+
 				&:hover
 					color isDark ? #b2c1d5 : #aaa
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 980fb03136..99274b0f41 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -147,10 +147,14 @@ export default Vue.extend({
 	methods: {
 		capture(withHandler = false) {
 			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
+				const data = {
 					type: 'capture',
 					id: this.p.id
-				});
+				} as any;
+				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
+					data.read = true;
+				}
+				this.connection.send(data);
 				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
 			}
 		},
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 8787b39a93..0ce72cab11 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -160,10 +160,14 @@ export default Vue.extend({
 	methods: {
 		capture(withHandler = false) {
 			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
+				const data = {
 					type: 'capture',
 					id: this.p.id
-				});
+				} as any;
+				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
+					data.read = true;
+				}
+				this.connection.send(data);
 				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
 			}
 		},
diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index c9b3ab51ae..15c8299c2e 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -188,9 +188,6 @@ root(isDark)
 				overflow hidden
 				text-overflow ellipsis
 
-				[data-fa], [data-icon]
-					margin-right 4px
-
 				> img
 					display inline-block
 					vertical-align bottom
diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue
index 27ac956043..c0fc7b48dc 100644
--- a/src/client/app/mobile/views/pages/drive.vue
+++ b/src/client/app/mobile/views/pages/drive.vue
@@ -1,9 +1,9 @@
 <template>
 <mk-ui>
 	<span slot="header">
-		<template v-if="folder">%fa:R folder-open%{{ folder.name }}</template>
-		<template v-if="file"><mk-file-type-icon data-icon :type="file.type"/>{{ file.name }}</template>
-		<template v-if="!folder && !file">%fa:cloud%%i18n:@drive%</template>
+		<template v-if="folder"><span style="margin-right:4px;">%fa:R folder-open%</span>{{ folder.name }}</template>
+		<template v-if="file"><mk-file-type-icon data-icon :type="file.type" style="margin-right:4px;"/>{{ file.name }}</template>
+		<template v-if="!folder && !file"><span style="margin-right:4px;">%fa:cloud%</span>%i18n:@drive%</template>
 	</span>
 	<template slot="func"><button @click="fn">%fa:ellipsis-h%</button></template>
 	<mk-drive
diff --git a/src/client/app/mobile/views/pages/favorites.vue b/src/client/app/mobile/views/pages/favorites.vue
index 6b9aec6a0c..53512e804c 100644
--- a/src/client/app/mobile/views/pages/favorites.vue
+++ b/src/client/app/mobile/views/pages/favorites.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:star%%i18n:@title%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:star%</span>%i18n:@title%</span>
 
 	<main>
 		<template v-for="favorite in favorites">
diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue
index bdadc88a43..f3bba586de 100644
--- a/src/client/app/mobile/views/pages/games/reversi.vue
+++ b/src/client/app/mobile/views/pages/games/reversi.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:gamepad%</span>%i18n:@reversi%</span>
 	<mk-reversi :game-id="$route.params.game" @nav="nav" :self-nav="false"/>
 </mk-ui>
 </template>
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 43afc98b45..ca62d4e2f8 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -1,7 +1,7 @@
 <template>
 <mk-ui>
 	<span slot="header" @click="showNav = true">
-		<span>
+		<span :class="$style.title">
 			<span v-if="src == 'home'">%fa:home%%i18n:@home%</span>
 			<span v-if="src == 'local'">%fa:R comments%%i18n:@local%</span>
 			<span v-if="src == 'hybrid'">%fa:share-alt%%i18n:@hybrid%</span>
@@ -15,6 +15,7 @@
 			<template v-if="!showNav">%fa:angle-down%</template>
 			<template v-else>%fa:angle-up%</template>
 		</span>
+		<i :class="$style.badge" v-if="$store.state.i.hasUnreadMentions || $store.state.i.hasUnreadSpecifiedNotes">%fa:circle%</i>
 	</span>
 
 	<template slot="func">
@@ -32,8 +33,8 @@
 					<span :data-active="src == 'hybrid'" @click="src = 'hybrid'" v-if="enableLocalTimeline">%fa:share-alt% %i18n:@hybrid%</span>
 					<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
 					<div class="hr"></div>
-					<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%</span>
-					<span :data-active="src == 'messages'" @click="src = 'messages'">%fa:envelope R% %i18n:@messages%</span>
+					<span :data-active="src == 'mentions'" @click="src = 'mentions'">%fa:at% %i18n:@mentions%<i class="badge" v-if="$store.state.i.hasUnreadMentions">%fa:circle%</i></span>
+					<span :data-active="src == 'messages'" @click="src = 'messages'">%fa:envelope R% %i18n:@messages%<i class="badge" v-if="$store.state.i.hasUnreadSpecifiedNotes">%fa:circle%</i></span>
 					<template v-if="lists">
 						<div class="hr" v-if="lists.length > 0"></div>
 						<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
@@ -220,6 +221,11 @@ root(isDark)
 					&:not([data-active]):hover
 						background isDark ? #353e4a : #eee
 
+					> .badge
+						margin-left 6px
+						font-size 10px
+						color $theme-color
+
 	> .tl
 		max-width 680px
 		margin 0 auto
@@ -238,3 +244,18 @@ main:not([data-darkmode])
 	root(false)
 
 </style>
+
+<style lang="stylus" module>
+@import '~const.styl'
+
+.title
+	i
+		margin-right 4px
+
+.badge
+	margin-left 6px
+	font-size 10px
+	color $theme-color
+	vertical-align middle
+
+</style>
diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue
index 401397d856..750ba26294 100644
--- a/src/client/app/mobile/views/pages/messaging-room.vue
+++ b/src/client/app/mobile/views/pages/messaging-room.vue
@@ -1,7 +1,7 @@
 <template>
 <mk-ui>
 	<span slot="header">
-		<template v-if="user">%fa:R comments%{{ user | userName }}</template>
+		<template v-if="user"><span style="margin-right:4px;">%fa:R comments%</span>{{ user | userName }}</template>
 		<template v-else><mk-ellipsis/></template>
 	</span>
 	<mk-messaging-room v-if="!fetching" :user="user" :is-naked="true"/>
diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue
index 3883505281..98ae79fe6c 100644
--- a/src/client/app/mobile/views/pages/messaging.vue
+++ b/src/client/app/mobile/views/pages/messaging.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:R comments%%i18n:@messaging%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:R comments%</span>%i18n:@messaging%</span>
 	<mk-messaging @navigate="navigate" :header-top="48"/>
 </mk-ui>
 </template>
diff --git a/src/client/app/mobile/views/pages/note.vue b/src/client/app/mobile/views/pages/note.vue
index fee60b350e..d7307c79a8 100644
--- a/src/client/app/mobile/views/pages/note.vue
+++ b/src/client/app/mobile/views/pages/note.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:R sticky-note%%i18n:@title%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:R sticky-note%</span>%i18n:@title%</span>
 	<main v-if="!fetching">
 		<div>
 			<mk-note-detail :note="note"/>
diff --git a/src/client/app/mobile/views/pages/notifications.vue b/src/client/app/mobile/views/pages/notifications.vue
index 4d3c8ee534..bddcd457bb 100644
--- a/src/client/app/mobile/views/pages/notifications.vue
+++ b/src/client/app/mobile/views/pages/notifications.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:R bell%%i18n:@notifications%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:R bell%</span>%i18n:@notifications%</span>
 	<template slot="func"><button @click="fn">%fa:check%</button></template>
 
 	<main>
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index f315c058df..9e90416370 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:cog%%i18n:@settings%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:cog%</span>%i18n:@settings%</span>
 	<main :data-darkmode="$store.state.device.darkmode">
 		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div>
 
diff --git a/src/client/app/mobile/views/pages/tag.vue b/src/client/app/mobile/views/pages/tag.vue
index a545e2b839..3f963501e0 100644
--- a/src/client/app/mobile/views/pages/tag.vue
+++ b/src/client/app/mobile/views/pages/tag.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:hashtag%{{ $route.params.tag }}</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:hashtag%</span>{{ $route.params.tag }}</span>
 
 	<main>
 		<p v-if="!fetching && empty">%fa:search% {{ '%i18n:no-posts-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:no-posts-found%'.split('{}')[1] }}</p>
diff --git a/src/client/app/mobile/views/pages/widgets.vue b/src/client/app/mobile/views/pages/widgets.vue
index a83103632e..c649529c0e 100644
--- a/src/client/app/mobile/views/pages/widgets.vue
+++ b/src/client/app/mobile/views/pages/widgets.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<span slot="header">%fa:home%%i18n:@dashboard%</span>
+	<span slot="header"><span style="margin-right:4px;">%fa:home%</span>%i18n:@dashboard%</span>
 	<template slot="func">
 		<button @click="customizing = !customizing">%fa:cog%</button>
 	</template>
diff --git a/src/models/note-unread.ts b/src/models/note-unread.ts
new file mode 100644
index 0000000000..62408d23b6
--- /dev/null
+++ b/src/models/note-unread.ts
@@ -0,0 +1,17 @@
+import * as mongo from 'mongodb';
+import db from '../db/mongodb';
+
+const NoteUnread = db.get<INoteUnread>('noteUnreads');
+NoteUnread.createIndex(['userId', 'noteId'], { unique: true });
+export default NoteUnread;
+
+export interface INoteUnread {
+	_id: mongo.ObjectID;
+	noteId: mongo.ObjectID;
+	userId: mongo.ObjectID;
+	isSpecified: boolean;
+
+	_note: {
+		userId: mongo.ObjectID;
+	};
+}
diff --git a/src/models/note.ts b/src/models/note.ts
index ce307d061a..ba88e9f481 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -295,8 +295,8 @@ export const pack = async (
 
 	delete _note._user;
 	delete _note._reply;
-	delete _note.repost;
-	delete _note.mentions;
+	delete _note._renote;
+	delete _note._files;
 	if (_note.geo) delete _note.geo.type;
 
 	// Populate user
diff --git a/src/models/user.ts b/src/models/user.ts
index b595fa8d71..bacae485a8 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -348,7 +348,8 @@ export const pack = (
 	me?: string | mongo.ObjectID | IUser,
 	options?: {
 		detail?: boolean,
-		includeSecrets?: boolean
+		includeSecrets?: boolean,
+		includeHasUnreadNotes?: boolean
 	}
 ) => new Promise<any>(async (resolve, reject) => {
 
@@ -510,6 +511,11 @@ export const pack = (
 		}
 	}
 
+	if (!opts.includeHasUnreadNotes) {
+		delete _user.hasUnreadSpecifiedNotes;
+		delete _user.hasUnreadMentions;
+	}
+
 	// resolve promises in _user object
 	_user = await rap(_user);
 
diff --git a/src/server/api/endpoints/i.ts b/src/server/api/endpoints/i.ts
index 1f99ef2d8d..5aa2070650 100644
--- a/src/server/api/endpoints/i.ts
+++ b/src/server/api/endpoints/i.ts
@@ -22,6 +22,7 @@ export default (params: any, user: ILocalUser, app: IApp) => new Promise(async (
 	// Serialize
 	res(await pack(user, user, {
 		detail: true,
+		includeHasUnreadNotes: true,
 		includeSecrets: isSecure
 	}));
 
diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts
index f1fced42d7..5575d0d523 100644
--- a/src/server/api/stream/home.ts
+++ b/src/server/api/stream/home.ts
@@ -9,6 +9,7 @@ import readNotification from '../common/read-notification';
 import call from '../call';
 import { IApp } from '../../../models/app';
 import shouldMuteThisNote from '../../../misc/should-mute-this-note';
+import readNote from '../../../services/note/read';
 
 const log = debug('misskey');
 
@@ -94,6 +95,9 @@ export default async function(
 				if (!msg.id) return;
 				log(`CAPTURE: ${msg.id} by @${user.username}`);
 				subscriber.on(`note-stream:${msg.id}`, onNoteStream);
+				if (msg.read) {
+					readNote(user._id, msg.id);
+				}
 				break;
 
 			case 'decapture':
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 7c1e71dcb3..b62b8c43ba 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -25,6 +25,7 @@ import { TextElementMention } from '../../mfm/parse/elements/mention';
 import { TextElementHashtag } from '../../mfm/parse/elements/hashtag';
 import { updateNoteStats } from '../update-chart';
 import { erase, unique } from '../../prelude/array';
+import insertNoteUnread from './unread';
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
@@ -170,6 +171,17 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 	// Increment notes count (user)
 	incNotesCountOfUser(user);
 
+	// 未読通知を作成
+	if (data.visibility == 'specified') {
+		data.visibleUsers.forEach(u => {
+			insertNoteUnread(u, note, true);
+		});
+	} else {
+		mentionedUsers.forEach(u => {
+			insertNoteUnread(u, note, false);
+		});
+	}
+
 	if (data.reply) {
 		saveReply(data.reply, note);
 	}
@@ -314,16 +326,6 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 		publishGlobalTimelineStream(noteObj);
 	}
 
-	if (note.visibility == 'specified') {
-		visibleUsers.forEach(async (u) => {
-			const n = await pack(note, u, {
-				detail: true
-			});
-			publishUserStream(u._id, 'note', n);
-			publishHybridTimelineStream(u._id, n);
-		});
-	}
-
 	if (['public', 'home', 'followers'].includes(note.visibility)) {
 		// フォロワーに配信
 		publishToFollowers(note, user, noteActivity);
diff --git a/src/services/note/read.ts b/src/services/note/read.ts
new file mode 100644
index 0000000000..46918bc38c
--- /dev/null
+++ b/src/services/note/read.ts
@@ -0,0 +1,62 @@
+import * as mongo from 'mongodb';
+import { publishUserStream } from '../../stream';
+import User from '../../models/user';
+import NoteUnread from '../../models/note-unread';
+
+/**
+ * Mark a note as read
+ */
+export default (
+	user: string | mongo.ObjectID,
+	note: string | mongo.ObjectID
+) => new Promise<any>(async (resolve, reject) => {
+
+	const userId: mongo.ObjectID = mongo.ObjectID.prototype.isPrototypeOf(user)
+		? user as mongo.ObjectID
+		: new mongo.ObjectID(user);
+
+	const noteId: mongo.ObjectID = mongo.ObjectID.prototype.isPrototypeOf(note)
+		? note as mongo.ObjectID
+		: new mongo.ObjectID(note);
+
+	// Remove document
+	await NoteUnread.remove({
+		userId: userId,
+		noteId: noteId
+	});
+
+	const count1 = await NoteUnread
+		.count({
+			userId: userId,
+			isSpecified: false
+		}, {
+			limit: 1
+		});
+
+	const count2 = await NoteUnread
+		.count({
+			userId: userId,
+			isSpecified: true
+		}, {
+			limit: 1
+		});
+
+	if (count1 == 0 || count2 == 0) {
+		User.update({ _id: userId }, {
+			$set: {
+				hasUnreadMentions: count1 != 0 || count2 != 0,
+				hasUnreadSpecifiedNotes: count2 != 0
+			}
+		});
+	}
+
+	if (count1 == 0) {
+		// 全て既読になったイベントを発行
+		publishUserStream(userId, 'readAllUnreadMentions');
+	}
+
+	if (count2 == 0) {
+		// 全て既読になったイベントを発行
+		publishUserStream(userId, 'readAllUnreadSpecifiedNotes');
+	}
+});
diff --git a/src/services/note/unread.ts b/src/services/note/unread.ts
new file mode 100644
index 0000000000..6e10c8b248
--- /dev/null
+++ b/src/services/note/unread.ts
@@ -0,0 +1,47 @@
+import NoteUnread from '../../models/note-unread';
+import User, { IUser } from '../../models/user';
+import { INote } from '../../models/note';
+import Mute from '../../models/mute';
+import { publishUserStream } from '../../stream';
+
+export default async function(user: IUser, note: INote, isSpecified = false) {
+	const unread = await NoteUnread.insert({
+		noteId: note._id,
+		userId: user._id,
+		isSpecified,
+		_note: {
+			userId: note.userId
+		}
+	});
+
+	// 3秒経っても既読にならなかったら「未読の投稿がありますよ」イベントを発行する
+	setTimeout(async () => {
+		const exist = await NoteUnread.findOne({ _id: unread._id });
+		if (exist == null) return;
+
+		//#region ただしミュートされているなら発行しない
+		const mute = await Mute.find({
+			muterId: user._id
+		});
+		const mutedUserIds = mute.map(m => m.muteeId.toString());
+		if (mutedUserIds.includes(note.userId.toString())) return;
+		//#endregion
+
+		User.update({
+			_id: user._id
+		}, {
+			$set: isSpecified ? {
+				hasUnreadSpecifiedNotes: true,
+				hasUnreadMentions: true
+			} : {
+				hasUnreadMentions: true
+			}
+		});
+
+		publishUserStream(user._id, 'unreadMention', note._id);
+
+		if (isSpecified) {
+			publishUserStream(user._id, 'unreadSpecifiedNote', note._id);
+		}
+	}, 3000);
+}

From ea3bcbbc375c35f94d3ecb957f85b8024d146386 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 14:22:46 +0900
Subject: [PATCH 330/539] =?UTF-8?q?=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7?=
 =?UTF-8?q?=E3=83=A5=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92=E8=AA=BF=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/web/docs.ts | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts
index 14ccbdd04f..3432861989 100644
--- a/src/server/web/docs.ts
+++ b/src/server/web/docs.ts
@@ -162,8 +162,7 @@ const router = new Router();
 router.get('/assets/*', async ctx => {
 	await send(ctx, ctx.params[0], {
 		root: `${__dirname}/../../docs/assets/`,
-		maxage: ms('7 days'),
-		immutable: true
+		maxage: ms('1 days')
 	});
 });
 

From 7576569dc97a8e1390a7a841b1944187134ff9dd Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 14:24:40 +0900
Subject: [PATCH 331/539] 8.56.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 802d1d233f..a20cc12ae7 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.55.0",
-	"clientVersion": "1.0.9909",
+	"version": "8.56.0",
+	"clientVersion": "1.0.9912",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From faf29b768f0d774401b234a40eb227bf33cbe034 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 19 Sep 2018 17:29:03 +0900
Subject: [PATCH 332/539] Make admin can delete any note

---
 src/client/app/common/views/components/note-menu.vue | 5 +++++
 src/server/api/endpoints/notes/delete.ts             | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index c9912fb1e2..08fae46dd6 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -33,12 +33,16 @@ export default Vue.extend({
 					text: '%i18n:@pin%',
 					action: this.pin
 				});
+			}
+
+			if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
 				items.push({
 					icon: '%fa:trash-alt R%',
 					text: '%i18n:@delete%',
 					action: this.del
 				});
 			}
+
 			if (this.note.uri) {
 				items.push({
 					icon: '%fa:external-link-square-alt%',
@@ -48,6 +52,7 @@ export default Vue.extend({
 					}
 				});
 			}
+
 			return items;
 		}
 	},
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 6d9826cf7b..741a8a1dc0 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -21,14 +21,17 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 
 	// Fetch note
 	const note = await Note.findOne({
-		_id: noteId,
-		userId: user._id
+		_id: noteId
 	});
 
 	if (note === null) {
 		return rej('note not found');
 	}
 
+	if (!user.isAdmin && !note.userId.equals(user._id)) {
+		return rej('access denied');
+	}
+
 	await deleteNote(user, note);
 
 	res();

From cd7f8b080e50fa6f4ae094262d33cf7f750c4ea7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 04:56:24 +0900
Subject: [PATCH 333/539] Fix #2738

---
 src/misc/should-mute-this-note.ts | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/misc/should-mute-this-note.ts b/src/misc/should-mute-this-note.ts
index c818115a3c..663e60af6d 100644
--- a/src/misc/should-mute-this-note.ts
+++ b/src/misc/should-mute-this-note.ts
@@ -1,13 +1,19 @@
+import * as mongo from 'mongodb';
+
+function toString(id: any) {
+	return mongo.ObjectID.prototype.isPrototypeOf(id) ? (id as mongo.ObjectID).toHexString() : id;
+}
+
 export default function(note: any, mutedUserIds: string[]): boolean {
-	if (mutedUserIds.indexOf(note.userId) != -1) {
+	if (mutedUserIds.includes(toString(note.userId))) {
 		return true;
 	}
 
-	if (note.reply != null && mutedUserIds.indexOf(note.reply.userId) != -1) {
+	if (note.reply != null && mutedUserIds.includes(toString(note.reply.userId))) {
 		return true;
 	}
 
-	if (note.renote != null && mutedUserIds.indexOf(note.renote.userId) != -1) {
+	if (note.renote != null && mutedUserIds.includes(toString(note.renote.userId))) {
 		return true;
 	}
 

From 54224826961e07b16679fdc083b6af2a30936241 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 06:27:41 +0900
Subject: [PATCH 334/539] Resolve #1153

---
 src/mfm/parse/elements/quote.ts |  2 +-
 test/mfm.ts                     | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/mfm/parse/elements/quote.ts b/src/mfm/parse/elements/quote.ts
index ea99240d5f..aa932cbf8d 100644
--- a/src/mfm/parse/elements/quote.ts
+++ b/src/mfm/parse/elements/quote.ts
@@ -9,7 +9,7 @@ export type TextElementQuote = {
 };
 
 export default function(text: string) {
-	const match = text.match(/^"([\s\S]+?)\n"/);
+	const match = text.match(/^"([\s\S]+?)\n"/) || text.match(/^>([\s\S]+?)\n\n/) || text.match(/^\n>([\s\S]+?)\n\n/) || text.match(/^>([\s\S]+?)$/);
 	if (!match) return null;
 	const quote = match[0];
 	return {
diff --git a/test/mfm.ts b/test/mfm.ts
index a015092f0c..25a7c290e4 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -87,6 +87,20 @@ describe('Text', () => {
 			], tokens2);
 		});
 
+		it('quote', () => {
+			const tokens1 = analyze('> foo\nbar\baz');
+			assert.deepEqual([
+				{ type: 'quote', content: '> foo\nbar\baz', quote: 'foo\nbar\baz' }
+			], tokens1);
+
+			const tokens2 = analyze('before\n> foo\nbar\baz\n\nafter');
+			assert.deepEqual([
+				{ type: 'text', content: 'before' },
+				{ type: 'quote', content: '\n> foo\nbar\baz\n\n', quote: 'foo\nbar\baz' },
+				{ type: 'text', content: 'after' }
+			], tokens2);
+		});
+
 		it('url', () => {
 			const tokens = analyze('https://himasaku.net');
 			assert.deepEqual([{

From 51a1f30225f1124028aac69c7370574b09c25a29 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 20 Sep 2018 06:29:03 +0900
Subject: [PATCH 335/539] fix(package): update @types/webpack to version 4.4.12
 (#2739)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a20cc12ae7..9162687c56 100644
--- a/package.json
+++ b/package.json
@@ -77,7 +77,7 @@
 		"@types/systeminformation": "3.23.0",
 		"@types/tmp": "0.0.33",
 		"@types/uuid": "3.4.4",
-		"@types/webpack": "4.4.11",
+		"@types/webpack": "4.4.12",
 		"@types/webpack-stream": "3.2.10",
 		"@types/websocket": "0.0.40",
 		"@types/ws": "6.0.1",

From 6341807d02f17f420435194801476fa2cbb069c9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 16:16:01 +0900
Subject: [PATCH 336/539] :art:

---
 src/client/app/desktop/views/components/home.vue | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index 79c9a9a517..db1e404352 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -38,7 +38,7 @@
 			</div>
 		</div>
 	</div>
-	<div class="main">
+	<div class="main" :class="{ withBg: $store.state.i.wallpaperUrl != null }">
 		<template v-if="customize">
 			<x-draggable v-for="place in ['left', 'right']"
 				:list="widgets[place]"
@@ -340,7 +340,10 @@ root(isDark)
 		display flex
 		justify-content center
 		margin 0 auto
-		max-width 1220px
+		max-width 1230px
+
+		&.withBg
+			background rgba(isDark ? #000 : #fff, 0.5)
 
 		> *
 			.customize-container

From 77a0450b5d84d83d39b45485d9fe60103e30808e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 16:21:51 +0900
Subject: [PATCH 337/539] :art:

---
 src/client/app/desktop/views/components/home.vue | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index db1e404352..4f4f894065 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -340,7 +340,7 @@ root(isDark)
 		display flex
 		justify-content center
 		margin 0 auto
-		max-width 1230px
+		max-width 1240px
 
 		&.withBg
 			background rgba(isDark ? #000 : #fff, 0.5)
@@ -358,7 +358,7 @@ root(isDark)
 
 		> .main
 			padding 16px
-			width calc(100% - 275px * 2)
+			width calc(100% - 280px * 2)
 			order 2
 
 			> .form
@@ -374,7 +374,7 @@ root(isDark)
 					border-radius 0
 
 		> *:not(.main)
-			width 275px
+			width 280px
 			padding 16px 0 16px 0
 
 			> *:not(:last-child)

From d058ecc4ea0bb2b242ba5cc525dc9442964b5939 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 17:21:16 +0900
Subject: [PATCH 338/539] Resolve #2698

---
 .../views/pages/admin/admin.dashboard.vue     | 14 +++++++++-
 .../app/desktop/views/pages/welcome.vue       | 24 +++++++++++++++++
 src/client/app/mobile/views/pages/welcome.vue | 26 ++++++++++++++++++-
 src/models/meta.ts                            |  1 +
 src/server/api/endpoints/admin/update-meta.ts | 10 +++++++
 src/server/api/endpoints/meta.ts              |  3 ++-
 6 files changed, 75 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index c86c30db17..5d0f6d451e 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -14,6 +14,14 @@
 	</div>
 
 	<div class="form">
+		<div>
+			<label>
+				<p>%i18n:@banner-url%</p>
+				<input v-model="bannerUrl">
+			</label>
+			<button class="ui" @click="updateMeta">%i18n:@save%</button>
+		</div>
+
 		<div>
 			<label>
 				<input type="checkbox" v-model="disableRegistration" @change="updateMeta">
@@ -46,6 +54,7 @@ export default Vue.extend({
 			stats: null,
 			disableRegistration: false,
 			disableLocalTimeline: false,
+			bannerUrl: null,
 			inviteCode: null,
 			connection: null,
 			connectionId: null
@@ -58,6 +67,7 @@ export default Vue.extend({
 		(this as any).os.getMeta().then(meta => {
 			this.disableRegistration = meta.disableRegistration;
 			this.disableLocalTimeline = meta.disableLocalTimeline;
+			this.bannerUrl = meta.bannerUrl;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -76,7 +86,8 @@ export default Vue.extend({
 		updateMeta() {
 			(this as any).api('admin/update-meta', {
 				disableRegistration: this.disableRegistration,
-				disableLocalTimeline: this.disableLocalTimeline
+				disableLocalTimeline: this.disableLocalTimeline,
+				bannerUrl: this.bannerUrl
 			});
 		}
 	}
@@ -114,6 +125,7 @@ export default Vue.extend({
 
 	> .form
 		> div
+			padding 16px
 			border-bottom solid 1px #eee
 
 </style>
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index ea1734f8c7..913fa6b21b 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -1,5 +1,7 @@
 <template>
 <div class="mk-welcome">
+	<div class="banner" :style="{ backgroundImage: banner ? `url(${banner})` : null }"></div>
+
 	<button @click="dark">
 		<template v-if="$store.state.device.darkmode">%fa:moon%</template>
 		<template v-else>%fa:R moon%</template>
@@ -154,6 +156,7 @@ export default Vue.extend({
 		return {
 			meta: null,
 			stats: null,
+			banner: null,
 			copyright,
 			host,
 			name: 'Misskey',
@@ -169,6 +172,7 @@ export default Vue.extend({
 			this.name = meta.name;
 			this.description = meta.description;
 			this.announcements = meta.broadcasts;
+			this.banner = meta.bannerUrl;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -308,6 +312,26 @@ root(isDark)
 	//background-position center
 	//background-size cover
 
+	> .banner
+		position absolute
+		top 0
+		left 0
+		width 100%
+		height 400px
+		background-position center
+		background-size cover
+		opacity 0.7
+
+		&:after
+			content ""
+			display block
+			position absolute
+			bottom 0
+			left 0
+			width 100%
+			height 100px
+			background linear-gradient(transparent, isDark ? #191b22 : #f7f7f7)
+
 	> .forkit
 		position absolute
 		top 0
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 74f43f2c71..65a7af93a9 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -1,5 +1,7 @@
 <template>
 <div class="wgwfgvvimdjvhjfwxropcwksnzftjqes">
+	<div class="banner" :style="{ backgroundImage: banner ? `url(${banner})` : null }"></div>
+
 	<div>
 		<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name">
 		<p class="host">{{ host }}</p>
@@ -80,6 +82,7 @@ export default Vue.extend({
 			meta: null,
 			copyright,
 			stats: null,
+			banner: null,
 			host,
 			name: 'Misskey',
 			description: '',
@@ -93,6 +96,7 @@ export default Vue.extend({
 			this.name = meta.name;
 			this.description = meta.description;
 			this.announcements = meta.broadcasts;
+			this.banner = meta.bannerUrl;
 		});
 
 		(this as any).api('stats').then(stats => {
@@ -121,7 +125,27 @@ root(isDark)
 	text-align center
 	//background #fff
 
-	> div
+	> .banner
+		position absolute
+		top 0
+		left 0
+		width 100%
+		height 300px
+		background-position center
+		background-size cover
+		opacity 0.7
+
+		&:after
+			content ""
+			display block
+			position absolute
+			bottom 0
+			left 0
+			width 100%
+			height 100px
+			background linear-gradient(transparent, isDark ? #191b22 : #f7f7f7)
+
+	> div:not(.banner)
 		padding 32px
 		margin 0 auto
 		max-width 500px
diff --git a/src/models/meta.ts b/src/models/meta.ts
index 8ca68416f8..3c0347485c 100644
--- a/src/models/meta.ts
+++ b/src/models/meta.ts
@@ -14,4 +14,5 @@ export type IMeta = {
 	disableRegistration?: boolean;
 	disableLocalTimeline?: boolean;
 	hidedTags?: string[];
+	bannerUrl?: string;
 };
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index 3f5cd56b2f..f0ebfbe936 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -34,6 +34,12 @@ export const meta = {
 				'ja-JP': '統計などで無視するハッシュタグ'
 			}
 		}),
+
+		bannerUrl: $.str.optional.nullable.note({
+			desc: {
+				'ja-JP': 'インスタンスのバナー画像URL'
+			}
+		}),
 	}
 };
 
@@ -59,6 +65,10 @@ export default (params: any) => new Promise(async (res, rej) => {
 		set.hidedTags = ps.hidedTags;
 	}
 
+	if (ps.bannerUrl !== undefined) {
+		set.bannerUrl = ps.bannerUrl;
+	}
+
 	await Meta.update({}, {
 		$set: set
 	}, { upsert: true });
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 18b0882f76..6c585d2c3a 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -38,6 +38,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		driveCapacityPerLocalUserMb: config.localDriveCapacityMb,
 		recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null,
 		swPublickey: config.sw ? config.sw.public_key : null,
-		hidedTags: (me && me.isAdmin) ? meta.hidedTags : undefined
+		hidedTags: (me && me.isAdmin) ? meta.hidedTags : undefined,
+		bannerUrl: meta.bannerUrl
 	});
 });

From 6283b7668e0bc2b00dcb4e77d3e6b8678761664a Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 20 Sep 2018 17:23:26 +0900
Subject: [PATCH 339/539] fix(package): update @types/koa-router to version
 7.0.32 (#2740)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 9162687c56..6161db4feb 100644
--- a/package.json
+++ b/package.json
@@ -51,7 +51,7 @@
 		"@types/koa-logger": "3.1.0",
 		"@types/koa-mount": "3.0.1",
 		"@types/koa-multer": "1.0.0",
-		"@types/koa-router": "7.0.31",
+		"@types/koa-router": "7.0.32",
 		"@types/koa-send": "4.1.1",
 		"@types/koa-views": "2.0.3",
 		"@types/koa__cors": "2.2.3",

From 01131e2606c0ca1439d0e167aeb2ab5d78f3c204 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 20 Sep 2018 17:23:55 +0900
Subject: [PATCH 340/539] 8.57.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 6161db4feb..4688a04caa 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.56.0",
-	"clientVersion": "1.0.9912",
+	"version": "8.57.0",
+	"clientVersion": "1.0.9922",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 51b0244cf2003fcbeec813ea523954ad92952051 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 21 Sep 2018 04:30:29 +0900
Subject: [PATCH 341/539] fix(package): update websocket to version 1.0.28
 (#2746)

Closes #2743
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 4688a04caa..351b3b31b0 100644
--- a/package.json
+++ b/package.json
@@ -221,7 +221,7 @@
 		"webfinger.js": "2.6.6",
 		"webpack": "4.19.1",
 		"webpack-cli": "3.1.0",
-		"websocket": "1.0.26",
+		"websocket": "1.0.28",
 		"ws": "6.0.0",
 		"xev": "2.0.1"
 	},

From a5f817d8962ff16b68109f0b55267fa021c6d3e8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 21 Sep 2018 08:33:24 +0900
Subject: [PATCH 342/539] Fix #2744

---
 src/mfm/parse/elements/quote.ts | 17 ++++++++++++-----
 test/mfm.ts                     | 18 ++++++++++++++----
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/src/mfm/parse/elements/quote.ts b/src/mfm/parse/elements/quote.ts
index aa932cbf8d..994ce98ca8 100644
--- a/src/mfm/parse/elements/quote.ts
+++ b/src/mfm/parse/elements/quote.ts
@@ -8,13 +8,20 @@ export type TextElementQuote = {
 	quote: string
 };
 
-export default function(text: string) {
-	const match = text.match(/^"([\s\S]+?)\n"/) || text.match(/^>([\s\S]+?)\n\n/) || text.match(/^\n>([\s\S]+?)\n\n/) || text.match(/^>([\s\S]+?)$/);
+export default function(text: string, index: number) {
+	const match = text.match(/^"([\s\S]+?)\n"/) || text.match(/^\n>([\s\S]+?)(\n\n|$)/) ||
+		(index == 0 ? text.match(/^>([\s\S]+?)(\n\n|$)/) : null);
+
 	if (!match) return null;
-	const quote = match[0];
+
+	const quote = match[1]
+		.split('\n')
+		.map(line => line.replace(/^>+/g, '').trim())
+		.join('\n');
+
 	return {
 		type: 'quote',
-		content: quote,
-		quote: match[1].trim(),
+		content: match[0],
+		quote: quote,
 	} as TextElementQuote;
 }
diff --git a/test/mfm.ts b/test/mfm.ts
index 25a7c290e4..b0c793e44b 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -88,17 +88,27 @@ describe('Text', () => {
 		});
 
 		it('quote', () => {
-			const tokens1 = analyze('> foo\nbar\baz');
+			const tokens1 = analyze('> foo\nbar\nbaz');
 			assert.deepEqual([
-				{ type: 'quote', content: '> foo\nbar\baz', quote: 'foo\nbar\baz' }
+				{ type: 'quote', content: '> foo\nbar\nbaz', quote: 'foo\nbar\nbaz' }
 			], tokens1);
 
-			const tokens2 = analyze('before\n> foo\nbar\baz\n\nafter');
+			const tokens2 = analyze('before\n> foo\nbar\nbaz\n\nafter');
 			assert.deepEqual([
 				{ type: 'text', content: 'before' },
-				{ type: 'quote', content: '\n> foo\nbar\baz\n\n', quote: 'foo\nbar\baz' },
+				{ type: 'quote', content: '\n> foo\nbar\nbaz\n\n', quote: 'foo\nbar\nbaz' },
 				{ type: 'text', content: 'after' }
 			], tokens2);
+
+			const tokens3 = analyze('piyo> foo\nbar\nbaz');
+			assert.deepEqual([
+				{ type: 'text', content: 'piyo> foo\nbar\nbaz' }
+			], tokens3);
+
+			const tokens4 = analyze('> foo\n> bar\n> baz');
+			assert.deepEqual([
+				{ type: 'quote', content: '> foo\n> bar\n> baz', quote: 'foo\nbar\nbaz' }
+			], tokens4);
 		});
 
 		it('url', () => {

From 80b6e8090e93fbeb556171a8b7356cc8127bbd13 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 21 Sep 2018 08:35:06 +0900
Subject: [PATCH 343/539] fix(package): update @types/bcryptjs to version 2.4.2
 (#2742)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 351b3b31b0..d3b31e75df 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,7 @@
 		"@koa/cors": "2.2.2",
 		"@prezzemolo/rap": "0.1.2",
 		"@prezzemolo/zip": "0.0.3",
-		"@types/bcryptjs": "2.4.1",
+		"@types/bcryptjs": "2.4.2",
 		"@types/dateformat": "1.0.1",
 		"@types/debug": "0.0.30",
 		"@types/deep-equal": "1.0.1",

From 00a3f8d3929c55a165f6f00877c847162139d5c6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 21 Sep 2018 08:37:26 +0900
Subject: [PATCH 344/539] Fix #2741

---
 src/services/note/unread.ts | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/services/note/unread.ts b/src/services/note/unread.ts
index 6e10c8b248..2d50976283 100644
--- a/src/services/note/unread.ts
+++ b/src/services/note/unread.ts
@@ -5,6 +5,14 @@ import Mute from '../../models/mute';
 import { publishUserStream } from '../../stream';
 
 export default async function(user: IUser, note: INote, isSpecified = false) {
+	//#region ミュートしているなら無視
+	const mute = await Mute.find({
+		muterId: user._id
+	});
+	const mutedUserIds = mute.map(m => m.muteeId.toString());
+	if (mutedUserIds.includes(note.userId.toString())) return;
+	//#endregion
+
 	const unread = await NoteUnread.insert({
 		noteId: note._id,
 		userId: user._id,
@@ -19,14 +27,6 @@ export default async function(user: IUser, note: INote, isSpecified = false) {
 		const exist = await NoteUnread.findOne({ _id: unread._id });
 		if (exist == null) return;
 
-		//#region ただしミュートされているなら発行しない
-		const mute = await Mute.find({
-			muterId: user._id
-		});
-		const mutedUserIds = mute.map(m => m.muteeId.toString());
-		if (mutedUserIds.includes(note.userId.toString())) return;
-		//#endregion
-
 		User.update({
 			_id: user._id
 		}, {

From 382b1d2250bb532e5a7a291b83fb797fb775f7cc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 21 Sep 2018 08:40:12 +0900
Subject: [PATCH 345/539] 8.57.1

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index d3b31e75df..0c25f7dbeb 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.57.0",
-	"clientVersion": "1.0.9922",
+	"version": "8.57.1",
+	"clientVersion": "1.0.9928",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From ecc235c545542c4083566d074a97ba0e97da701d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 21 Sep 2018 16:43:46 +0900
Subject: [PATCH 346/539] Fix bug

---
 src/server/api/endpoints/notes/delete.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 741a8a1dc0..2fe36897c0 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import deleteNote from '../../../../services/note/delete';
-import { ILocalUser } from '../../../../models/user';
+import User, { ILocalUser } from '../../../../models/user';
 
 export const meta = {
 	desc: {
@@ -32,7 +32,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		return rej('access denied');
 	}
 
-	await deleteNote(user, note);
+	await deleteNote(await User.findOne({ _id: note.userId }), note);
 
 	res();
 });

From 0a870b8e7ee42c442d2519e025cea76d9fb78cb4 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sat, 22 Sep 2018 05:11:53 +0900
Subject: [PATCH 347/539] fix(package): update @types/node to version 10.10.2
 (#2750)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 0c25f7dbeb..fdb3552b01 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.10.1",
+		"@types/node": "10.10.2",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.2.0",

From 82d94b59634306fa8c76080af4fa1f2189b52ff2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 08:49:14 +0900
Subject: [PATCH 348/539] Fix #2747

---
 src/client/app/desktop/views/pages/user/user.photos.vue | 2 +-
 src/client/app/mobile/views/pages/user/home.photos.vue  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index c5cd9e24fe..d4c5a47f92 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -4,7 +4,7 @@
 	<p class="initializing" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@loading%<mk-ellipsis/></p>
 	<div class="stream" v-if="!fetching && images.length > 0">
 		<div v-for="image in images" class="img"
-			:style="`background-image: url(${image.url})`"
+			:style="`background-image: url(${image.thumbnailUrl})`"
 		></div>
 	</div>
 	<p class="empty" v-if="!fetching && images.length == 0">%i18n:@no-photos%</p>
diff --git a/src/client/app/mobile/views/pages/user/home.photos.vue b/src/client/app/mobile/views/pages/user/home.photos.vue
index e9025ec816..261a3f796c 100644
--- a/src/client/app/mobile/views/pages/user/home.photos.vue
+++ b/src/client/app/mobile/views/pages/user/home.photos.vue
@@ -4,7 +4,7 @@
 	<div class="stream" v-if="!fetching && images.length > 0">
 		<a v-for="image in images"
 			class="img"
-			:style="`background-image: url(${image.media.url})`"
+			:style="`background-image: url(${image.media.thumbnailUrl})`"
 			:href="image.note | notePage"
 		></a>
 	</div>

From 251629ab612e3345843b9a49dd29e01787310972 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 15:58:11 +0900
Subject: [PATCH 349/539] :art:

---
 .../app/common/views/widgets/broadcast.vue    | 58 ++++++++++---------
 .../app/desktop/views/components/calendar.vue |  3 +-
 .../desktop/views/components/note-detail.vue  |  3 +-
 .../app/desktop/views/components/timeline.vue |  4 +-
 .../desktop/views/components/ui.header.vue    |  2 +-
 .../views/components/widget-container.vue     |  5 +-
 .../pages/user/user.followers-you-know.vue    |  3 +-
 .../desktop/views/pages/user/user.friends.vue |  3 +-
 .../desktop/views/pages/user/user.header.vue  |  3 +-
 .../desktop/views/pages/user/user.photos.vue  |  3 +-
 .../desktop/views/pages/user/user.profile.vue |  3 +-
 .../app/desktop/views/pages/user/user.vue     |  6 +-
 .../app/desktop/views/widgets/profile.vue     | 48 ++++++++-------
 13 files changed, 67 insertions(+), 77 deletions(-)

diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index f2fa720f52..c471229f15 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -1,25 +1,30 @@
 <template>
-<div class="anltbovirfeutcigvwgmgxipejaeozxi"
-	:data-found="announcements && announcements.length != 0"
-	:data-melt="props.design == 1"
-	:data-mobile="platform == 'mobile'"
->
-	<div class="icon">
-		<svg height="32" version="1.1" viewBox="0 0 32 32" width="32">
-			<path class="tower" d="M16.04,11.24c1.79,0,3.239-1.45,3.239-3.24S17.83,4.76,16.04,4.76c-1.79,0-3.24,1.45-3.24,3.24 C12.78,9.78,14.24,11.24,16.04,11.24z M16.04,13.84c-0.82,0-1.66-0.2-2.4-0.6L7.34,29.98h2.98l1.72-2h8l1.681,2H24.7L18.42,13.24 C17.66,13.64,16.859,13.84,16.04,13.84z M16.02,14.8l2.02,7.2h-4L16.02,14.8z M12.04,25.98l2-2h4l2,2H12.04z"></path>
-			<path class="wave a" d="M4.66,1.04c-0.508-0.508-1.332-0.508-1.84,0c-1.86,1.92-2.8,4.44-2.8,6.94c0,2.52,0.94,5.04,2.8,6.96 c0.5,0.52,1.32,0.52,1.82,0s0.5-1.36,0-1.88C3.28,11.66,2.6,9.82,2.6,7.98S3.28,4.3,4.64,2.9C5.157,2.391,5.166,1.56,4.66,1.04z"></path>
-			<path class="wave b" d="M9.58,12.22c0.5-0.5,0.5-1.34,0-1.84C8.94,9.72,8.62,8.86,8.62,8s0.32-1.72,0.96-2.38c0.5-0.52,0.5-1.34,0-1.84 C9.346,3.534,9.02,3.396,8.68,3.4c-0.32,0-0.66,0.12-0.9,0.38C6.64,4.94,6.08,6.48,6.08,8s0.58,3.06,1.7,4.22 C8.28,12.72,9.1,12.72,9.58,12.22z"></path>
-			<path class="wave c" d="M22.42,3.78c-0.5,0.5-0.5,1.34,0,1.84c0.641,0.66,0.96,1.52,0.96,2.38s-0.319,1.72-0.96,2.38c-0.5,0.52-0.5,1.34,0,1.84 c0.487,0.497,1.285,0.505,1.781,0.018c0.007-0.006,0.013-0.012,0.02-0.018c1.139-1.16,1.699-2.7,1.699-4.22s-0.561-3.06-1.699-4.22 c-0.494-0.497-1.297-0.5-1.794-0.007C22.424,3.775,22.422,3.778,22.42,3.78z"></path>
-			<path class="wave d" d="M29.18,1.06c-0.479-0.502-1.273-0.522-1.775-0.044c-0.016,0.015-0.029,0.029-0.045,0.044c-0.5,0.52-0.5,1.36,0,1.88 c1.361,1.4,2.041,3.24,2.041,5.08s-0.68,3.66-2.041,5.08c-0.5,0.52-0.5,1.36,0,1.88c0.509,0.508,1.332,0.508,1.841,0 c1.86-1.92,2.8-4.44,2.8-6.96C31.99,5.424,30.98,2.931,29.18,1.06z"></path>
-		</svg>
-	</div>
-	<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
-	<h1 v-if="!fetching">{{ announcements.length == 0 ? '%i18n:@no-broadcasts%' : announcements[i].title }}</h1>
-	<p v-if="!fetching">
-		<span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
-		<template v-if="announcements.length == 0">%i18n:@have-a-nice-day%</template>
-	</p>
-	<a v-if="announcements.length > 1" @click="next">%i18n:@next% &gt;&gt;</a>
+<div class="anltbovirfeutcigvwgmgxipejaeozxi">
+	<mk-widget-container :show-header="false" :naked="props.design == 1">
+		<div class="anltbovirfeutcigvwgmgxipejaeozxi-body"
+			:data-found="announcements && announcements.length != 0"
+			:data-melt="props.design == 1"
+			:data-mobile="platform == 'mobile'"
+			:data-darkmode="$store.state.device.darkmode"
+		>
+			<div class="icon">
+				<svg height="32" version="1.1" viewBox="0 0 32 32" width="32">
+					<path class="tower" d="M16.04,11.24c1.79,0,3.239-1.45,3.239-3.24S17.83,4.76,16.04,4.76c-1.79,0-3.24,1.45-3.24,3.24 C12.78,9.78,14.24,11.24,16.04,11.24z M16.04,13.84c-0.82,0-1.66-0.2-2.4-0.6L7.34,29.98h2.98l1.72-2h8l1.681,2H24.7L18.42,13.24 C17.66,13.64,16.859,13.84,16.04,13.84z M16.02,14.8l2.02,7.2h-4L16.02,14.8z M12.04,25.98l2-2h4l2,2H12.04z"></path>
+					<path class="wave a" d="M4.66,1.04c-0.508-0.508-1.332-0.508-1.84,0c-1.86,1.92-2.8,4.44-2.8,6.94c0,2.52,0.94,5.04,2.8,6.96 c0.5,0.52,1.32,0.52,1.82,0s0.5-1.36,0-1.88C3.28,11.66,2.6,9.82,2.6,7.98S3.28,4.3,4.64,2.9C5.157,2.391,5.166,1.56,4.66,1.04z"></path>
+					<path class="wave b" d="M9.58,12.22c0.5-0.5,0.5-1.34,0-1.84C8.94,9.72,8.62,8.86,8.62,8s0.32-1.72,0.96-2.38c0.5-0.52,0.5-1.34,0-1.84 C9.346,3.534,9.02,3.396,8.68,3.4c-0.32,0-0.66,0.12-0.9,0.38C6.64,4.94,6.08,6.48,6.08,8s0.58,3.06,1.7,4.22 C8.28,12.72,9.1,12.72,9.58,12.22z"></path>
+					<path class="wave c" d="M22.42,3.78c-0.5,0.5-0.5,1.34,0,1.84c0.641,0.66,0.96,1.52,0.96,2.38s-0.319,1.72-0.96,2.38c-0.5,0.52-0.5,1.34,0,1.84 c0.487,0.497,1.285,0.505,1.781,0.018c0.007-0.006,0.013-0.012,0.02-0.018c1.139-1.16,1.699-2.7,1.699-4.22s-0.561-3.06-1.699-4.22 c-0.494-0.497-1.297-0.5-1.794-0.007C22.424,3.775,22.422,3.778,22.42,3.78z"></path>
+					<path class="wave d" d="M29.18,1.06c-0.479-0.502-1.273-0.522-1.775-0.044c-0.016,0.015-0.029,0.029-0.045,0.044c-0.5,0.52-0.5,1.36,0,1.88 c1.361,1.4,2.041,3.24,2.041,5.08s-0.68,3.66-2.041,5.08c-0.5,0.52-0.5,1.36,0,1.88c0.509,0.508,1.332,0.508,1.841,0 c1.86-1.92,2.8-4.44,2.8-6.96C31.99,5.424,30.98,2.931,29.18,1.06z"></path>
+				</svg>
+			</div>
+			<p class="fetching" v-if="fetching">%i18n:@fetching%<mk-ellipsis/></p>
+			<h1 v-if="!fetching">{{ announcements.length == 0 ? '%i18n:@no-broadcasts%' : announcements[i].title }}</h1>
+			<p v-if="!fetching">
+				<span v-if="announcements.length != 0" v-html="announcements[i].text"></span>
+				<template v-if="announcements.length == 0">%i18n:@have-a-nice-day%</template>
+			</p>
+			<a v-if="announcements.length > 1" @click="next">%i18n:@next% &gt;&gt;</a>
+		</div>
+	</mk-widget-container>
 </div>
 </template>
 
@@ -68,11 +73,10 @@ export default define({
 <style lang="stylus" scoped>
 root(isDark)
 	padding 10px
-	border solid 1px #4078c0
-	border-radius 6px
+	background isDark ? #253a50 : #f3f9ff
 
 	&[data-melt]
-		border none
+		background transparent
 
 	&[data-found]
 		padding-left 50px
@@ -133,7 +137,7 @@ root(isDark)
 		z-index 1
 		margin 0
 		font-size 0.7em
-		color isDark ? #fff : #555
+		color isDark ? #fff : #57616f
 
 		&.fetching
 			text-align center
@@ -146,10 +150,10 @@ root(isDark)
 		> p
 			color #fff
 
-.anltbovirfeutcigvwgmgxipejaeozxi[data-darkmode]
+.anltbovirfeutcigvwgmgxipejaeozxi-body[data-darkmode]
 	root(true)
 
-.anltbovirfeutcigvwgmgxipejaeozxi:not([data-darkmode])
+.anltbovirfeutcigvwgmgxipejaeozxi-body:not([data-darkmode])
 	root(false)
 
 </style>
diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index de9650b21b..0280f07a61 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -133,8 +133,7 @@ export default Vue.extend({
 root(isDark)
 	color isDark ? #c5ced6 : #777
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 	overflow hidden
 
 	&[data-melt]
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 7307eeb7dc..670be422fe 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -231,8 +231,7 @@ root(isDark)
 	overflow hidden
 	text-align left
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.1)
-	border-radius 8px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 	> .read-more
 		display block
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 7d683236bb..75324c6b1d 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -179,14 +179,12 @@ export default Vue.extend({
 
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 	> header
 		padding 0 8px
 		z-index 10
 		background isDark ? #313543 : #fff
-		border-radius 6px 6px 0 0
 		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
 
 		> .buttons
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index ac8a6c7765..f1e37cc577 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -125,7 +125,7 @@ root(isDark)
 	top 0
 	z-index 1000
 	width 100%
-	box-shadow 0 1px 1px rgba(#000, 0.075)
+	box-shadow 0 0px 8px rgba(#000, 0.2)
 
 	> .warn
 		display block
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index 7cfcd68eba..f9f07a919c 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -36,13 +36,12 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, isDark ? 0.2 : 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 	overflow hidden
 
 	&.naked
 		background transparent !important
-		border none !important
+		box-shadow none !important
 
 	> header
 		background isDark ? #313543 : #fff
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index 0e7e3f1d77..1c848000b2 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -38,8 +38,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 	> .title
 		z-index 1
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index a238565588..499a276bfe 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -42,8 +42,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 	overflow hidden
 
 	> .title
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index 4b434ec219..ac7057d3b4 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -104,8 +104,7 @@ export default Vue.extend({
 
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border 1px solid rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 	overflow hidden
 
 	&[data-is-dark-background]
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index d4c5a47f92..fd4e5813b2 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -41,8 +41,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 	overflow hidden
 
 	> .title
diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue
index efd5be4672..7674df3884 100644
--- a/src/client/app/desktop/views/pages/user/user.profile.vue
+++ b/src/client/app/desktop/views/pages/user/user.profile.vue
@@ -87,8 +87,7 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
+	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 	> *:first-child
 		border-top none !important
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index 89dbd41b84..89e7dbd47b 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -118,8 +118,7 @@ root(isDark)
 			margin-right 16px
 
 			> .timeline
-				border 1px solid rgba(#000, 0.075)
-				border-radius 6px
+				box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 		> .side
 			width 275px
@@ -138,8 +137,7 @@ root(isDark)
 				font-size 12px
 				color #aaa
 				background isDark ? #21242f : #fff
-				border solid 1px rgba(#000, 0.075)
-				border-radius 6px
+				box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
 
 				a
 					color #999
diff --git a/src/client/app/desktop/views/widgets/profile.vue b/src/client/app/desktop/views/widgets/profile.vue
index a22607b612..04ef18c8e3 100644
--- a/src/client/app/desktop/views/widgets/profile.vue
+++ b/src/client/app/desktop/views/widgets/profile.vue
@@ -1,20 +1,25 @@
 <template>
-<div class="mkw-profile"
-	:data-compact="props.design == 1 || props.design == 2"
-	:data-melt="props.design == 2"
->
-	<div class="banner"
-		:style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl})` : ''"
-		title="%i18n:@update-banner%"
-		@click="() => os.apis.updateBanner()"
-	></div>
-	<mk-avatar class="avatar" :user="$store.state.i"
-		:disable-link="true"
-		@click="() => os.apis.updateAvatar()"
-		title="%i18n:@update-avatar%"
-	/>
-	<router-link class="name" :to="$store.state.i | userPage">{{ $store.state.i | userName }}</router-link>
-	<p class="username">@{{ $store.state.i | acct }}</p>
+<div class="egwyvoaaryotefqhqtmiyawwefemjfsd">
+	<mk-widget-container :show-header="false" :naked="props.design == 2">
+		<div class="egwyvoaaryotefqhqtmiyawwefemjfsd-body"
+			:data-compact="props.design == 1 || props.design == 2"
+			:data-melt="props.design == 2"
+			:data-darkmode="$store.state.device.darkmode"
+		>
+			<div class="banner"
+				:style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl})` : ''"
+				title="%i18n:@update-banner%"
+				@click="() => os.apis.updateBanner()"
+			></div>
+			<mk-avatar class="avatar" :user="$store.state.i"
+				:disable-link="true"
+				@click="() => os.apis.updateAvatar()"
+				title="%i18n:@update-avatar%"
+			/>
+			<router-link class="name" :to="$store.state.i | userPage">{{ $store.state.i | userName }}</router-link>
+			<p class="username">@{{ $store.state.i | acct }}</p>
+		</div>
+	</mk-widget-container>
 </div>
 </template>
 
@@ -42,10 +47,6 @@ export default define({
 
 <style lang="stylus" scoped>
 root(isDark)
-	overflow hidden
-	background isDark ? #282c37 : #fff
-	border solid 1px rgba(#000, 0.075)
-	border-radius 6px
 
 	&[data-compact]
 		> .banner:before
@@ -75,9 +76,6 @@ root(isDark)
 			display none
 
 	&[data-melt]
-		background transparent !important
-		border none !important
-
 		> .banner
 			visibility hidden
 
@@ -120,10 +118,10 @@ root(isDark)
 		font-size 0.9em
 		color isDark ? #606984 : #999
 
-.mkw-profile[data-darkmode]
+.egwyvoaaryotefqhqtmiyawwefemjfsd-body[data-darkmode]
 	root(true)
 
-.mkw-profile:not([data-darkmode])
+.egwyvoaaryotefqhqtmiyawwefemjfsd-body:not([data-darkmode])
 	root(false)
 
 </style>

From aa5528d11eacbecc1310227f2671580cac02cc65 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 19:59:37 +0900
Subject: [PATCH 350/539] :art:

---
 .../app/desktop/views/components/home.vue     |  5 +--
 .../desktop/views/components/ui.header.vue    |  5 +--
 .../app/desktop/views/components/ui.vue       | 37 +++++++++++++------
 3 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index 4f4f894065..7d6a1e28a0 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -38,7 +38,7 @@
 			</div>
 		</div>
 	</div>
-	<div class="main" :class="{ withBg: $store.state.i.wallpaperUrl != null }">
+	<div class="main">
 		<template v-if="customize">
 			<x-draggable v-for="place in ['left', 'right']"
 				:list="widgets[place]"
@@ -342,9 +342,6 @@ root(isDark)
 		margin 0 auto
 		max-width 1240px
 
-		&.withBg
-			background rgba(isDark ? #000 : #fff, 0.5)
-
 		> *
 			.customize-container
 				cursor move
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index f1e37cc577..c8b9bdb2a2 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -55,7 +55,7 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.$store.commit('setUiHeaderHeight', 48);
+		this.$store.commit('setUiHeaderHeight', this.$el.offsetHeight);
 
 		if (this.$store.getters.isSignedIn) {
 			const ago = (new Date().getTime() - new Date(this.$store.state.i.lastUsedAt).getTime()) / 1000;
@@ -120,8 +120,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	position -webkit-sticky
-	position sticky
+	position fixed
 	top 0
 	z-index 1000
 	width 100%
diff --git a/src/client/app/desktop/views/components/ui.vue b/src/client/app/desktop/views/components/ui.vue
index a28cb3029e..740eedf43f 100644
--- a/src/client/app/desktop/views/components/ui.vue
+++ b/src/client/app/desktop/views/components/ui.vue
@@ -1,5 +1,6 @@
 <template>
-<div class="mk-ui" :style="style" v-hotkey.global="keymap">
+<div class="mk-ui" v-hotkey.global="keymap">
+	<div class="bg" v-if="$store.getters.isSignedIn && $store.state.i.wallpaperUrl" :style="style"></div>
 	<x-header class="header" v-show="!zenMode"/>
 	<div class="content">
 		<slot></slot>
@@ -41,6 +42,16 @@ export default Vue.extend({
 		}
 	},
 
+	watch: {
+		'$store.state.uiHeaderHeight'() {
+			this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
+		}
+	},
+
+	mounted() {
+		this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
+	},
+
 	methods: {
 		post() {
 			(this as any).apis.post();
@@ -55,20 +66,22 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .mk-ui
-	display flex
-	flex-direction column
-	flex 1
-	background-size cover
-	background-position center
-	background-attachment fixed
+	min-height 100vh
+	padding-top 48px
+
+	> .bg
+		position fixed
+		top 0
+		left 0
+		width 100%
+		height 100vh
+		background-size cover
+		background-position center
+		background-attachment fixed
+		opacity 0.3
 
 	> .header
 		@media (max-width 1000px)
 			display none
 
-	> .content
-		display flex
-		flex-direction column
-		flex 1
-		overflow hidden
 </style>

From 93e5e4afc0d6c5175b1904eec1a6bd6e27d9f8c6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 20:11:13 +0900
Subject: [PATCH 351/539] :art:

---
 src/client/app/desktop/views/components/ui.vue          | 5 ++++-
 src/client/app/desktop/views/pages/deck/deck.column.vue | 2 +-
 src/client/app/desktop/views/pages/deck/deck.vue        | 7 ++++++-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/components/ui.vue b/src/client/app/desktop/views/components/ui.vue
index 740eedf43f..2d1e98447b 100644
--- a/src/client/app/desktop/views/components/ui.vue
+++ b/src/client/app/desktop/views/components/ui.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="mk-ui" v-hotkey.global="keymap">
 	<div class="bg" v-if="$store.getters.isSignedIn && $store.state.i.wallpaperUrl" :style="style"></div>
-	<x-header class="header" v-show="!zenMode"/>
+	<x-header class="header" v-show="!zenMode" ref="header"/>
 	<div class="content">
 		<slot></slot>
 	</div>
@@ -59,6 +59,9 @@ export default Vue.extend({
 
 		toggleZenMode() {
 			this.zenMode = !this.zenMode;
+			this.$nextTick(() => {
+				this.$store.commit('setUiHeaderHeight', this.$refs.header.$el.offsetHeight);
+			});
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index abb09775fb..04aa5e82d1 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -279,7 +279,7 @@ root(isDark)
 	height 100%
 	background isDark ? #282C37 : #fff
 	border-radius 6px
-	box-shadow 0 2px 16px rgba(#000, 0.1)
+	//box-shadow 0 2px 16px rgba(#000, 0.1)
 	overflow hidden
 
 	&.draghover
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index e5aeba251a..810770a022 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui :class="$style.root">
-	<div class="qlvquzbjribqcaozciifydkngcwtyzje" :data-darkmode="$store.state.device.darkmode">
+	<div class="qlvquzbjribqcaozciifydkngcwtyzje" :data-darkmode="$store.state.device.darkmode" :style="style">
 		<template v-for="ids in layout">
 			<div v-if="ids.length > 1" class="folder">
 				<template v-for="id, i in ids">
@@ -35,6 +35,11 @@ export default Vue.extend({
 			if (this.$store.state.settings.deck == null) return [];
 			if (this.$store.state.settings.deck.layout == null) return this.$store.state.settings.deck.columns.map(c => [c.id]);
 			return this.$store.state.settings.deck.layout;
+		},
+		style(): any {
+			return {
+				height: `calc(100vh - ${this.$store.state.uiHeaderHeight}px)`
+			};
 		}
 	},
 

From 3e5330a92bc19f0b0e6ff6dd1a4c4670b508dbf3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 20:39:12 +0900
Subject: [PATCH 352/539] :art:

---
 locales/ja-JP.yml                             |  2 ++
 .../app/desktop/views/components/calendar.vue |  3 ++-
 .../desktop/views/components/note-detail.vue  |  3 ++-
 .../app/desktop/views/components/settings.vue | 12 +++++++++++
 .../app/desktop/views/components/timeline.vue |  4 +++-
 .../desktop/views/components/ui.header.vue    | 11 ++++++++--
 .../views/components/widget-container.vue     |  3 ++-
 .../pages/user/user.followers-you-know.vue    |  3 ++-
 .../desktop/views/pages/user/user.friends.vue |  3 ++-
 .../desktop/views/pages/user/user.header.vue  |  3 ++-
 .../desktop/views/pages/user/user.photos.vue  |  3 ++-
 .../desktop/views/pages/user/user.profile.vue |  3 ++-
 .../views/pages/user/user.timeline.vue        |  3 ++-
 .../app/desktop/views/pages/user/user.vue     | 10 +++++-----
 .../app/desktop/views/pages/welcome.vue       |  2 +-
 src/client/app/init.ts                        | 20 +++++++++++++++++++
 src/client/app/store.ts                       |  2 ++
 17 files changed, 72 insertions(+), 18 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 11dd76d0e6..6ae38d45fd 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -779,6 +779,8 @@ desktop/views/components/settings.vue:
   choose-wallpaper: "壁紙を選択"
   delete-wallpaper: "壁紙を削除"
   dark-mode: "ダークモード"
+  use-shadow: "UIに影を使用"
+  rounded-corners: "UIの角を丸める"
   circle-icons: "円形のアイコンを使用"
   contrasted-acct: "ユーザー名にコントラストを付ける"
   gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index 0280f07a61..e71983f821 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -133,7 +133,8 @@ export default Vue.extend({
 root(isDark)
 	color isDark ? #c5ced6 : #777
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 	overflow hidden
 
 	&[data-melt]
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 670be422fe..80faae0d42 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -231,7 +231,8 @@ root(isDark)
 	overflow hidden
 	text-align left
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 
 	> .read-more
 		display block
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 312a7ed56e..cf10ea0f56 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -60,6 +60,8 @@
 				<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
+				<mk-switch v-model="useShadow" text="%i18n:@use-shadow%"/>
+				<mk-switch v-model="roundedCorners" text="%i18n:@rounded-corners%"/>
 				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
 				<mk-switch v-model="reduceMotion" text="%i18n:common.reduce-motion%"/>
 				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
@@ -316,6 +318,16 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
 		},
 
+		useShadow: {
+			get() { return this.$store.state.settings.useShadow; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'useShadow', value }); }
+		},
+
+		roundedCorners: {
+			get() { return this.$store.state.settings.roundedCorners; },
+			set(value) { this.$store.dispatch('settings/set', { key: 'roundedCorners', value }); }
+		},
+
 		fetchOnScroll: {
 			get() { return this.$store.state.settings.fetchOnScroll; },
 			set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 75324c6b1d..c008c175de 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -179,7 +179,9 @@ export default Vue.extend({
 
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
+	overflow hidden
 
 	> header
 		padding 0 8px
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index c8b9bdb2a2..bec0ee37ad 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="header">
+<div class="header" :style="style">
 	<p class="warn" v-if="env != 'production'">%i18n:common.do-not-use-in-production%</p>
 	<mk-special-message/>
 	<div class="main" ref="main">
@@ -54,6 +54,14 @@ export default Vue.extend({
 		};
 	},
 
+	computed: {
+		style(): any {
+			return {
+				'box-shadow': this.$store.state.settings.useShadow ? '0 0px 8px rgba(0, 0, 0, 0.2)' : 'none'
+			};
+		}
+	},
+
 	mounted() {
 		this.$store.commit('setUiHeaderHeight', this.$el.offsetHeight);
 
@@ -124,7 +132,6 @@ root(isDark)
 	top 0
 	z-index 1000
 	width 100%
-	box-shadow 0 0px 8px rgba(#000, 0.2)
 
 	> .warn
 		display block
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index f9f07a919c..fbf7691cd3 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -36,7 +36,8 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 	overflow hidden
 
 	&.naked
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index 1c848000b2..0965d801c9 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -38,7 +38,8 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 
 	> .title
 		z-index 1
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index 499a276bfe..de37dc95c9 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -42,7 +42,8 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 	overflow hidden
 
 	> .title
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index ac7057d3b4..f727910e77 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -104,7 +104,8 @@ export default Vue.extend({
 
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 	overflow hidden
 
 	&[data-is-dark-background]
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index fd4e5813b2..591edfd829 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -41,7 +41,8 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 	overflow hidden
 
 	> .title
diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue
index 7674df3884..1ea242270a 100644
--- a/src/client/app/desktop/views/pages/user/user.profile.vue
+++ b/src/client/app/desktop/views/pages/user/user.profile.vue
@@ -87,7 +87,8 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 root(isDark)
 	background isDark ? #282C37 : #fff
-	box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+	box-shadow var(--shadow)
+	border-radius var(--round)
 
 	> *:first-child
 		border-top none !important
diff --git a/src/client/app/desktop/views/pages/user/user.timeline.vue b/src/client/app/desktop/views/pages/user/user.timeline.vue
index 54221380a7..be6adaac93 100644
--- a/src/client/app/desktop/views/pages/user/user.timeline.vue
+++ b/src/client/app/desktop/views/pages/user/user.timeline.vue
@@ -116,12 +116,13 @@ export default Vue.extend({
 
 root(isDark)
 	background isDark ? #282C37 : #fff
+	border-radius var(--round)
+	overflow hidden
 
 	> header
 		padding 0 8px
 		z-index 10
 		background isDark ? #313543 : #fff
-		border-radius 6px 6px 0 0
 		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
 
 		> span
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index 89e7dbd47b..b1ebe2392e 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -88,17 +88,16 @@ root(isDark)
 		margin-bottom 16px
 		padding 14px 16px
 		font-size 14px
-		border-radius 6px
+		box-shadow var(--shadow)
+		border-radius var(--round)
 
 		&.is-suspended
 			color isDark ? #ffb4b4 : #570808
 			background isDark ? #611d1d : #ffdbdb
-			border solid 1px isDark ? #d64a4a : #e09696
 
 		&.is-remote
 			color isDark ? #ffbd3e : #573c08
 			background isDark ? #42321c : #fff0db
-			border solid 1px isDark ? #90733c : #dcbb7b
 
 		> a
 			font-weight bold
@@ -118,7 +117,7 @@ root(isDark)
 			margin-right 16px
 
 			> .timeline
-				box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+				box-shadow var(--shadow)
 
 		> .side
 			width 275px
@@ -137,7 +136,8 @@ root(isDark)
 				font-size 12px
 				color #aaa
 				background isDark ? #21242f : #fff
-				box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+				box-shadow var(--shadow)
+				border-radius var(--round)
 
 				a
 					color #999
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 913fa6b21b..baa27dd8df 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -355,7 +355,7 @@ root(isDark)
 		.block
 			color isDark ? #fff : #444
 			background isDark ? #282C37 : #fff
-			box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
+			box-shadow var(--shadow)
 			//border-radius 8px
 			overflow auto
 
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 3a03f8492e..4e1d1b70c7 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -125,6 +125,26 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
 			});
 			//#endregion
 
+			//#region shadow
+			const shadow = '0 3px 8px rgba(0, 0, 0, 0.2)';
+			if (os.store.state.settings.useShadow) document.documentElement.style.setProperty('--shadow', shadow);
+			os.store.watch(s => {
+				return s.settings.useShadow;
+			}, v => {
+				document.documentElement.style.setProperty('--shadow', v ? shadow : 'none');
+			});
+			//#endregion
+
+			//#region rounded corners
+			const round = '6px';
+			if (os.store.state.settings.roundedCorners) document.documentElement.style.setProperty('--round', round);
+			os.store.watch(s => {
+				return s.settings.roundedCorners;
+			}, v => {
+				document.documentElement.style.setProperty('--round', v ? round : '0');
+			});
+			//#endregion
+
 			Vue.mixin({
 				data() {
 					return {
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 171620ae30..00c08409a6 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -16,6 +16,8 @@ const defaultSettings = {
 	showPostFormOnTopOfTl: false,
 	suggestRecentHashtags: true,
 	showClockOnHeader: true,
+	useShadow: true,
+	roundedCorners: false,
 	circleIcons: true,
 	contrastedAcct: true,
 	showFullAcct: false,

From 7f2eb641316bb8b22a11cf6dbb2b2538f80d1de1 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sat, 22 Sep 2018 20:42:05 +0900
Subject: [PATCH 353/539] fix(package): update @types/node to version 10.10.3
 (#2753)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index fdb3552b01..f40a5dd6a3 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.10.2",
+		"@types/node": "10.10.3",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.2.0",

From 28cb9cae51ec94f4f6fe885443517c3ff06e7285 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 22 Sep 2018 20:44:05 +0900
Subject: [PATCH 354/539] 8.58.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index f40a5dd6a3..e0892f3b67 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.57.1",
-	"clientVersion": "1.0.9928",
+	"version": "8.58.0",
+	"clientVersion": "1.0.9945",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 8028c85c67737d7d6e19a2aacbd3a3f861bc1cb6 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 23 Sep 2018 07:59:48 +0900
Subject: [PATCH 355/539] =?UTF-8?q?=E3=83=80=E3=83=BC=E3=82=AF=E3=83=A2?=
 =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E3=82=AD=E3=83=BC=E3=83=9C=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=82=B7=E3=83=A7=E3=83=BC=E3=83=88=E3=82=AB=E3=83=83?=
 =?UTF-8?q?=E3=83=88=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/app.vue              | 10 +++++++++-
 src/docs/keyboard-shortcut.ja-JP.md |  3 ++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 9de01ef060..e639c9f9ac 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -10,7 +10,8 @@ export default Vue.extend({
 	computed: {
 		keymap(): any {
 			return {
-				'h|slash': this.help
+				'h|slash': this.help,
+				'd': this.dark
 			};
 		}
 	},
@@ -18,6 +19,13 @@ export default Vue.extend({
 	methods: {
 		help() {
 			window.open(`${url}/docs/${lang}/keyboard-shortcut`, '_blank');
+		},
+
+		dark() {
+			this.$store.commit('device/set', {
+				key: 'darkmode',
+				value: !this.$store.state.device.darkmode
+			});
 		}
 	}
 });
diff --git a/src/docs/keyboard-shortcut.ja-JP.md b/src/docs/keyboard-shortcut.ja-JP.md
index 59101dc290..264387242c 100644
--- a/src/docs/keyboard-shortcut.ja-JP.md
+++ b/src/docs/keyboard-shortcut.ja-JP.md
@@ -1,4 +1,4 @@
-# Misskeyキーボードショートカットまとめ
+# キーボードショートカット
 
 ## グローバル
 これらのショートカットは基本的にどこでも使えます。
@@ -11,6 +11,7 @@
 		<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
 		<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
 		<tr><td><kbd class="key">A</kbd>, <kbd class="key">M</kbd></td><td>アカウントメニューを表示/隠す</td><td><b>A</b>ccount, <b>M</b>y, <b>M</b>e, <b>M</b>enu</td></tr>
+		<tr><td><kbd class="key">D</kbd></td><td>ダークモード切り替え</td><td><b>D</b>ark</td></tr>
 		<tr><td><kbd class="key">Z</kbd></td><td>上部のバーを隠す</td><td><b>Z</b>en</td></tr>
 		<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
 	</tbody>

From e4e668b32753b31d7162b979cd4e6d1a3a280b9f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 23 Sep 2018 16:05:26 +0900
Subject: [PATCH 356/539] Improve performance

---
 src/services/note/read.ts | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/services/note/read.ts b/src/services/note/read.ts
index 46918bc38c..8622597bc0 100644
--- a/src/services/note/read.ts
+++ b/src/services/note/read.ts
@@ -20,11 +20,15 @@ export default (
 		: new mongo.ObjectID(note);
 
 	// Remove document
-	await NoteUnread.remove({
+	const res = await NoteUnread.remove({
 		userId: userId,
 		noteId: noteId
 	});
 
+	if (res.deletedCount == 0) {
+		return;
+	}
+
 	const count1 = await NoteUnread
 		.count({
 			userId: userId,

From 49e82adc6c70c19de0897fc7768fd5e22a8a89f3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 23 Sep 2018 16:05:46 +0900
Subject: [PATCH 357/539] =?UTF-8?q?mentions=E3=82=92=E8=AA=AD=E3=81=BF?=
 =?UTF-8?q?=E8=BE=BC=E3=82=80=E3=81=A8=E3=81=8D=E3=82=82=E6=97=A2=E8=AA=AD?=
 =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/endpoints/notes/mentions.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index 8675a9f562..d8d05b78ec 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -4,6 +4,7 @@ import { getFriendIds } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
+import read from '../../../../services/note/read';
 
 export const meta = {
 	desc: {
@@ -85,6 +86,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 			sort: sort
 		});
 
+	mentions.forEach(note => read(user._id, note._id));
+
 	// Serialize
 	res(await Promise.all(mentions.map(mention => pack(mention, user))));
 });

From 61e05cb50eba150b62c54f577e1f6041b7c2b4dc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 23 Sep 2018 16:13:33 +0900
Subject: [PATCH 358/539] 8.59.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index e0892f3b67..35f7368d9a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.58.0",
-	"clientVersion": "1.0.9945",
+	"version": "8.59.0",
+	"clientVersion": "1.0.9949",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From a2e2d5ba776bc27c31a3fd3cd45f563975f764bc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 23 Sep 2018 19:55:15 +0900
Subject: [PATCH 359/539] =?UTF-8?q?=E9=9D=9E=E3=83=AD=E3=82=B0=E3=82=A4?=
 =?UTF-8?q?=E3=83=B3=E6=99=82=E3=81=AE=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC?=
 =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AB=E3=82=A4=E3=83=B3=E3=82=B9?=
 =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=B9=E3=81=AE=E7=B4=B9=E4=BB=8B=E3=82=92?=
 =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../app/common/views/components/index.ts      |  2 +
 .../app/common/views/components/instance.vue  | 57 +++++++++++++++++++
 .../app/desktop/views/pages/user/user.vue     |  5 ++
 3 files changed, 64 insertions(+)
 create mode 100644 src/client/app/common/views/components/instance.vue

diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 6f8152cea2..0a3d0d0ae6 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import instance from './instance.vue';
 import cwButton from './cw-button.vue';
 import tagCloud from './tag-cloud.vue';
 import trends from './trends.vue';
@@ -43,6 +44,7 @@ import uiSelect from './ui/select.vue';
 import formButton from './ui/form/button.vue';
 import formRadio from './ui/form/radio.vue';
 
+Vue.component('mk-instance', instance);
 Vue.component('mk-cw-button', cwButton);
 Vue.component('mk-tag-cloud', tagCloud);
 Vue.component('mk-trends', trends);
diff --git a/src/client/app/common/views/components/instance.vue b/src/client/app/common/views/components/instance.vue
new file mode 100644
index 0000000000..14c6664eff
--- /dev/null
+++ b/src/client/app/common/views/components/instance.vue
@@ -0,0 +1,57 @@
+<template>
+<div class="nhasjydimbopojusarffqjyktglcuxjy" v-if="meta">
+	<div class="banner" :style="{ backgroundImage: meta.bannerUrl ? `url(${meta.bannerUrl})` : null }"></div>
+
+	<h1>{{ meta.name }}</h1>
+	<p v-html="meta.description || '%i18n:common.about%'"></p>
+	<router-link to="/">%i18n:@start%</router-link>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+
+export default Vue.extend({
+	data() {
+		return {
+			meta: null
+		}
+	},
+	created() {
+		(this as any).os.getMeta().then(meta => {
+			this.meta = meta;
+		});
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+root(isDark)
+	color isDark ? #fff : #5b646f
+	background isDark ? #21242f : #fff
+	text-align center
+
+	> .banner
+		height 100px
+		background-position center
+		background-size cover
+
+	> h1
+		margin 16px
+		font-size 16px
+
+	> p
+		margin 16px
+		font-size 14px
+
+	> a
+		display block
+		padding-bottom 16px
+
+.nhasjydimbopojusarffqjyktglcuxjy[data-darkmode]
+	root(true)
+
+.nhasjydimbopojusarffqjyktglcuxjy:not([data-darkmode])
+	root(false)
+
+</style>
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index b1ebe2392e..a7065af5e7 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -10,6 +10,7 @@
 				<x-timeline class="timeline" ref="tl" :user="user"/>
 			</div>
 			<div class="side">
+				<div class="instance" v-if="!$store.getters.isSignedIn"><mk-instance/></div>
 				<x-profile :user="user"/>
 				<x-twitter :user="user" v-if="user.host === null && user.twitter"/>
 				<mk-calendar @chosen="warp" :start="new Date(user.createdAt)"/>
@@ -131,6 +132,10 @@ root(isDark)
 				font-size 0.8em
 				color #aaa
 
+			> .instance
+				box-shadow var(--shadow)
+				border-radius var(--round)
+
 			> .nav
 				padding 16px
 				font-size 12px

From cba0dd5e178c08842100f45c840e193032f21551 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Mon, 24 Sep 2018 07:35:39 +0900
Subject: [PATCH 360/539] Fix AP request error message is to long (#2760)

---
 src/remote/activitypub/resolver.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index 9bbe474d35..e1c12e7e62 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -55,6 +55,8 @@ export default class Resolver {
 				Accept: 'application/activity+json, application/ld+json'
 			},
 			json: true
+		}).catch(e => {
+			throw new Error(`request error: ${e.message}`);
 		});
 
 		if (object === null || (

From d93f76c1af1d9d632e834db51cf46c0fc8be5bd4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 08:00:10 +0900
Subject: [PATCH 361/539] =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AB?=
 =?UTF-8?q?=E3=83=BC=E3=81=B8=E3=81=AE=E8=AD=A6=E5=91=8A=E3=81=AF=E3=83=AD?=
 =?UTF-8?q?=E3=82=B0=E3=82=A4=E3=83=B3=E6=99=82=E3=81=AE=E3=81=BF=E8=A1=A8?=
 =?UTF-8?q?=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/scripts/fuck-ad-block.ts |  4 ++--
 src/client/app/desktop/script.ts               | 10 ++++++----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/client/app/common/scripts/fuck-ad-block.ts b/src/client/app/common/scripts/fuck-ad-block.ts
index ed0904aeb3..0c802f1648 100644
--- a/src/client/app/common/scripts/fuck-ad-block.ts
+++ b/src/client/app/common/scripts/fuck-ad-block.ts
@@ -1,8 +1,8 @@
-require('fuckadblock');
-
 declare const fuckAdBlock: any;
 
 export default (os) => {
+	require('fuckadblock');
+
 	function adBlockDetected() {
 		os.apis.dialog({
 			title: '%fa:exclamation-triangle%%i18n:common.adblock.detected%',
diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts
index e32682286c..8b184a4aae 100644
--- a/src/client/app/desktop/script.ts
+++ b/src/client/app/desktop/script.ts
@@ -87,10 +87,12 @@ init(async (launch) => {
 		updateBanner: updateBanner(os)
 	}));
 
-	/**
-	 * Fuck AD Block
-	 */
-	fuckAdBlock(os);
+	if (os.store.getters.isSignedIn) {
+		/**
+		 * Fuck AD Block
+		 */
+		fuckAdBlock(os);
+	}
 
 	/**
 	 * Init Notification

From 722de350372d1ca0e13abd1d5c4e6cc71766f11a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 08:02:07 +0900
Subject: [PATCH 362/539] Add stats link

---
 src/client/app/common/views/components/nav.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue
index 27e66358e4..d52c8e27a4 100644
--- a/src/client/app/common/views/components/nav.vue
+++ b/src/client/app/common/views/components/nav.vue
@@ -2,6 +2,8 @@
 <span class="mk-nav">
 	<a :href="aboutUrl">%i18n:@about%</a>
 	<i>・</i>
+	<a href="/stats">%i18n:@stats%</a>
+	<i>・</i>
 	<a :href="repositoryUrl">%i18n:@repository%</a>
 	<i>・</i>
 	<a :href="feedbackUrl" target="_blank">%i18n:@feedback%</a>

From 56b8f8b07d162f068f770c01d0509b226c626af9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 08:04:45 +0900
Subject: [PATCH 363/539] 8.60.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 35f7368d9a..f7bef04973 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.59.0",
-	"clientVersion": "1.0.9949",
+	"version": "8.60.0",
+	"clientVersion": "1.0.9954",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 92484be87f909ee69d124a5318dedc0faf73b88c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 16:02:01 +0900
Subject: [PATCH 364/539] Resolve #2762

---
 src/services/note/create.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index b62b8c43ba..2f2ac18e9b 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -118,6 +118,11 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 		return rej();
 	}
 
+	// Renote対象が「ホームまたは全体」以外の公開範囲ならreject
+	if (data.renote && data.renote.visibility != 'public' && data.renote.visibility != 'home') {
+		return rej();
+	}
+
 	// リプライ対象が自分以外の非公開の投稿なら禁止
 	if (data.reply && data.reply.visibility == 'private' && !data.reply.userId.equals(user._id)) {
 		return rej();

From 7b4c307c467281a0cedfb35f18a2446bf33e9a85 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 16:07:23 +0900
Subject: [PATCH 365/539] :art:

---
 src/client/app/desktop/views/components/home.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index 7d6a1e28a0..c9b868422e 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -360,8 +360,8 @@ root(isDark)
 
 			> .form
 				margin-bottom 16px
-				border solid 1px rgba(#000, 0.075)
-				border-radius 4px
+				box-shadow var(--shadow)
+				border-radius var(--round)
 
 			@media (max-width 700px)
 				padding 0

From 59d67d314069c19dcc5c2c7d82f260a9f8c661cd Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 16:26:12 +0900
Subject: [PATCH 366/539] =?UTF-8?q?=E3=83=94=E3=83=B3=E7=95=99=E3=82=81?=
 =?UTF-8?q?=E3=82=92=E8=A7=A3=E9=99=A4=E3=81=99=E3=82=8B=E3=81=93=E3=81=A8?=
 =?UTF-8?q?=E3=81=8C=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
 =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  1 +
 .../app/common/views/components/note-menu.vue | 27 +++++++--
 src/server/api/endpoints/i/pin.ts             | 49 +++++++++-------
 src/server/api/endpoints/i/unpin.ts           | 57 +++++++++++++++++++
 .../api/endpoints/notes/favorites/create.ts   | 18 ++++--
 src/services/i/pin.ts                         | 22 ++-----
 6 files changed, 128 insertions(+), 46 deletions(-)
 create mode 100644 src/server/api/endpoints/i/unpin.ts

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 6ae38d45fd..db2a155221 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -328,6 +328,7 @@ common/views/components/note-menu.vue:
   copy-link: "リンクをコピー"
   favorite: "お気に入り"
   pin: "ピン留め"
+  unpin: "ピン留め解除"
   delete: "削除"
   delete-confirm: "この投稿を削除しますか?"
   remote: "投稿元で見る"
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index 08fae46dd6..a3e80e33de 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -28,11 +28,19 @@ export default Vue.extend({
 			}];
 
 			if (this.note.userId == this.$store.state.i.id) {
-				items.push({
-					icon: '%fa:thumbtack%',
-					text: '%i18n:@pin%',
-					action: this.pin
-				});
+				if (this.$store.state.i.pinnedNoteIds.includes(this.note.id)) {
+					items.push({
+						icon: '%fa:thumbtack%',
+						text: '%i18n:@unpin%',
+						action: this.unpin
+					});
+				} else {
+					items.push({
+						icon: '%fa:thumbtack%',
+						text: '%i18n:@pin%',
+						action: this.pin
+					});
+				}
 			}
 
 			if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
@@ -56,6 +64,7 @@ export default Vue.extend({
 			return items;
 		}
 	},
+
 	methods: {
 		detail() {
 			this.$router.push(`/notes/${ this.note.id }`);
@@ -73,6 +82,14 @@ export default Vue.extend({
 			});
 		},
 
+		unpin() {
+			(this as any).api('i/unpin', {
+				noteId: this.note.id
+			}).then(() => {
+				this.destroyDom();
+			});
+		},
+
 		del() {
 			if (!window.confirm('%i18n:@delete-confirm%')) return;
 			(this as any).api('notes/delete', {
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index d075976b74..f9ae032b11 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,21 +1,35 @@
-import * as mongo from 'mongodb';
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Note from '../../../../models/note';
 import { pack } from '../../../../models/user';
 import { deliverPinnedChange } from '../../../../services/i/pin';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定した投稿をピン留めします。'
+	},
+
+	requireCredential: true,
+
+	kind: 'account-write',
+
+	params: {
+		noteId: $.type(ID).note({
+			desc: {
+				'ja-JP': '対象の投稿のID'
+			}
+		})
+	}
+};
 
-/**
- * Pin note
- */
 export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
-	// Get 'noteId' parameter
-	const [noteId, noteIdErr] = $.type(ID).get(params.noteId);
-	if (noteIdErr) return rej('invalid noteId param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
 
 	// Fetch pinee
 	const note = await Note.findOne({
-		_id: noteId,
+		_id: ps.noteId,
 		userId: user._id
 	});
 
@@ -23,21 +37,17 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		return rej('note not found');
 	}
 
-	let addedId: mongo.ObjectID;
-	let removedId: mongo.ObjectID;
-
 	const pinnedNoteIds = user.pinnedNoteIds || [];
 
+	if (pinnedNoteIds.length > 5) {
+		return rej('cannot pin more notes');
+	}
+
 	if (pinnedNoteIds.some(id => id.equals(note._id))) {
 		return rej('already exists');
 	}
 
 	pinnedNoteIds.unshift(note._id);
-	addedId = note._id;
-
-	if (pinnedNoteIds.length > 5) {
-		removedId = pinnedNoteIds.pop();
-	}
 
 	await User.update(user._id, {
 		$set: {
@@ -45,14 +55,13 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 		}
 	});
 
-	// Serialize
 	const iObj = await pack(user, user, {
 		detail: true
 	});
 
-	// Send Add/Remove to followers
-	deliverPinnedChange(user._id, removedId, addedId);
-
 	// Send response
 	res(iObj);
+
+	// Send Add to followers
+	deliverPinnedChange(user._id, note._id, true);
 });
diff --git a/src/server/api/endpoints/i/unpin.ts b/src/server/api/endpoints/i/unpin.ts
new file mode 100644
index 0000000000..82625ae5fb
--- /dev/null
+++ b/src/server/api/endpoints/i/unpin.ts
@@ -0,0 +1,57 @@
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
+import User, { ILocalUser } from '../../../../models/user';
+import Note from '../../../../models/note';
+import { pack } from '../../../../models/user';
+import { deliverPinnedChange } from '../../../../services/i/pin';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		'ja-JP': '指定した投稿のピン留めを解除します。'
+	},
+
+	requireCredential: true,
+
+	kind: 'account-write',
+
+	params: {
+		noteId: $.type(ID).note({
+			desc: {
+				'ja-JP': '対象の投稿のID'
+			}
+		})
+	}
+};
+
+export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
+
+	// Fetch unpinee
+	const note = await Note.findOne({
+		_id: ps.noteId,
+		userId: user._id
+	});
+
+	if (note === null) {
+		return rej('note not found');
+	}
+
+	const pinnedNoteIds = (user.pinnedNoteIds || []).filter(id => !id.equals(note._id));
+
+	await User.update(user._id, {
+		$set: {
+			pinnedNoteIds: pinnedNoteIds
+		}
+	});
+
+	const iObj = await pack(user, user, {
+		detail: true
+	});
+
+	// Send response
+	res(iObj);
+
+	// Send Remove to followers
+	deliverPinnedChange(user._id, note._id, false);
+});
diff --git a/src/server/api/endpoints/notes/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts
index daf7780abc..9aefb701ae 100644
--- a/src/server/api/endpoints/notes/favorites/create.ts
+++ b/src/server/api/endpoints/notes/favorites/create.ts
@@ -2,6 +2,7 @@ import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Favorite from '../../../../../models/favorite';
 import Note from '../../../../../models/note';
 import { ILocalUser } from '../../../../../models/user';
+import getParams from '../../../get-params';
 
 export const meta = {
 	desc: {
@@ -11,17 +12,24 @@ export const meta = {
 
 	requireCredential: true,
 
-	kind: 'favorite-write'
+	kind: 'favorite-write',
+
+	params: {
+		noteId: $.type(ID).note({
+			desc: {
+				'ja-JP': '対象の投稿のID'
+			}
+		})
+	}
 };
 
 export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
-	// Get 'noteId' parameter
-	const [noteId, noteIdErr] = $.type(ID).get(params.noteId);
-	if (noteIdErr) return rej('invalid noteId param');
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
 
 	// Get favoritee
 	const note = await Note.findOne({
-		_id: noteId
+		_id: ps.noteId
 	});
 
 	if (note === null) {
diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
index 5bf8d166bb..8b7287e68d 100644
--- a/src/services/i/pin.ts
+++ b/src/services/i/pin.ts
@@ -7,7 +7,7 @@ import renderRemove from '../../remote/activitypub/renderer/remove';
 import packAp from '../../remote/activitypub/renderer';
 import { deliver } from '../../queue';
 
-export async function deliverPinnedChange(userId: mongo.ObjectID, oldId?: mongo.ObjectID, newId?: mongo.ObjectID) {
+export async function deliverPinnedChange(userId: mongo.ObjectID, noteId: mongo.ObjectID, isAddition: boolean) {
 	const user = await User.findOne({
 		_id: userId
 	});
@@ -20,21 +20,11 @@ export async function deliverPinnedChange(userId: mongo.ObjectID, oldId?: mongo.
 
 	const target = `${config.url}/users/${user._id}/collections/featured`;
 
-	if (oldId) {
-		const oldItem = `${config.url}/notes/${oldId}`;
-		const content = packAp(renderRemove(user, target, oldItem));
-		queue.forEach(inbox => {
-			deliver(user, content, inbox);
-		});
-	}
-
-	if (newId) {
-		const newItem = `${config.url}/notes/${newId}`;
-		const content = packAp(renderAdd(user, target, newItem));
-		queue.forEach(inbox => {
-			deliver(user, content, inbox);
-		});
-	}
+	const item = `${config.url}/notes/${noteId}`;
+	const content = packAp(isAddition ? renderAdd(user, target, item) : renderRemove(user, target, item));
+	queue.forEach(inbox => {
+		deliver(user, content, inbox);
+	});
 }
 
 /**

From 87091a2e030fb72b126bc6d393bff68ad2d40c1d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 16:32:51 +0900
Subject: [PATCH 367/539] 8.61.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index f7bef04973..55b7b4687c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.60.0",
-	"clientVersion": "1.0.9954",
+	"version": "8.61.0",
+	"clientVersion": "1.0.9958",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From e6cc937ac26cd3fe0042b3068d3898b30110136f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 24 Sep 2018 20:57:32 +0900
Subject: [PATCH 368/539] Check meta key

---
 src/client/app/common/hotkey.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts
index e63fcc9f97..dc1a34338a 100644
--- a/src/client/app/common/hotkey.ts
+++ b/src/client/app/common/hotkey.ts
@@ -59,7 +59,7 @@ export default {
 
 				el.dataset.reservedKeys = reservedKeys.map(key => `'${key}'`).join(' ');
 
-				el._keyHandler = e => {
+				el._keyHandler = (e: KeyboardEvent) => {
 					const key = e.code.toLowerCase();
 
 					const targetReservedKeys = document.activeElement ? ((document.activeElement as any).dataset || {}).reservedKeys || '' : '';
@@ -72,7 +72,8 @@ export default {
 							const matched = pattern.which.includes(key) &&
 								pattern.ctrl == e.ctrlKey &&
 								pattern.shift == e.shiftKey &&
-								pattern.alt == e.altKey;
+								pattern.alt == e.altKey &&
+								e.metaKey == false;
 
 							if (matched) {
 								e.preventDefault();

From 5da18ba535244ad4d4b4498c39e495d4428b5dff Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 25 Sep 2018 20:44:26 +0900
Subject: [PATCH 369/539] Fix #2766

---
 src/client/app/common/views/components/note-menu.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index a3e80e33de..c8ed1225cc 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -28,7 +28,7 @@ export default Vue.extend({
 			}];
 
 			if (this.note.userId == this.$store.state.i.id) {
-				if (this.$store.state.i.pinnedNoteIds.includes(this.note.id)) {
+				if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
 					items.push({
 						icon: '%fa:thumbtack%',
 						text: '%i18n:@unpin%',

From afdacf14b7d114e542dbed60c029948b2ea5910d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 25 Sep 2018 21:09:38 +0900
Subject: [PATCH 370/539] Add excludeNsfw option

---
 src/client/app/desktop/views/pages/welcome.vue   |  1 +
 src/client/app/mobile/views/pages/welcome.vue    |  1 +
 src/models/note.ts                               |  1 +
 src/server/api/endpoints/drive/files/update.ts   | 13 +++++++++++++
 src/server/api/endpoints/notes/local-timeline.ts | 13 +++++++++++++
 5 files changed, 29 insertions(+)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index baa27dd8df..7f5f4b9c37 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -187,6 +187,7 @@ export default Vue.extend({
 
 		(this as any).api('notes/local-timeline', {
 			fileType: image,
+			excludeNsfw: true,
 			limit: 6
 		}).then((notes: any[]) => {
 			const files = concat(notes.map((n: any): any[] => n.files));
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 65a7af93a9..82ccfeaff5 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -111,6 +111,7 @@ export default Vue.extend({
 
 		(this as any).api('notes/local-timeline', {
 			fileType: image,
+			excludeNsfw: true,
 			limit: 6
 		}).then((notes: any[]) => {
 			const files = concat(notes.map((n: any): any[] => n.files));
diff --git a/src/models/note.ts b/src/models/note.ts
index ba88e9f481..f67eeaaf6e 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -20,6 +20,7 @@ Note.createIndex('userId');
 Note.createIndex('mentions');
 Note.createIndex('visibleUserIds');
 Note.createIndex('tagsLower');
+Note.createIndex('_files._id');
 Note.createIndex('_files.contentType');
 Note.createIndex({
 	createdAt: -1
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index ba9abfec61..3c7932c341 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -4,6 +4,7 @@ import DriveFile, { validateFileName, pack } from '../../../../../models/drive-f
 import { publishDriveStream } from '../../../../../stream';
 import { ILocalUser } from '../../../../../models/user';
 import getParams from '../../../get-params';
+import Note from '../../../../../models/note';
 
 export const meta = {
 	desc: {
@@ -93,6 +94,18 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		}
 	});
 
+	// ドライブのファイルが非正規化されているドキュメントも更新
+	Note.find({
+		'_files._id': file._id
+	}).then(notes => {
+		notes.forEach(note => {
+			note._files[note._files.findIndex(f => f._id.equals(file._id))] = file;
+			Note.findOneAndUpdate({ _id: note._id }, {
+				_files: note._files
+			});
+		});
+	});
+
 	// Serialize
 	const fileObj = await pack(file);
 
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index ff10e6fbaa..505454a82f 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -30,6 +30,13 @@ export const meta = {
 			}
 		}),
 
+		excludeNsfw: $.bool.optional.note({
+			default: false,
+			desc: {
+				'ja-JP': 'true にすると、NSFW指定されたファイルを除外します(fileTypeが指定されている場合のみ有効)'
+			}
+		}),
+
 		limit: $.num.optional.range(1, 100).note({
 			default: 10
 		}),
@@ -97,6 +104,12 @@ export default async (params: any, user: ILocalUser) => {
 		query['_files.contentType'] = {
 			$in: ps.fileType
 		};
+
+		if (ps.excludeNsfw) {
+			query['_files.metadata.isSensitive'] = {
+				$ne: true
+			};
+		}
 	}
 
 	if (ps.sinceId) {

From 9ca6a6bf064634bab6611f4e70d20a62fd3b48ed Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 25 Sep 2018 21:23:26 +0900
Subject: [PATCH 371/539] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC?=
 =?UTF-8?q?=E3=81=B8=E3=81=AE=E6=8E=A5=E7=B6=9A=E3=81=8C=E4=B8=8D=E5=AE=89?=
 =?UTF-8?q?=E5=AE=9A=E3=81=AA=E6=99=82=E3=81=AB=E3=82=B5=E3=82=A4=E3=83=B3?=
 =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=81=97=E3=81=AA=E3=81=84=E3=82=88?=
 =?UTF-8?q?=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/mios.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index 0f72cd2f34..ed9e3a6aeb 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -265,7 +265,7 @@ export default class MiOS extends EventEmitter {
 			// When success
 			.then(res => {
 				// When failed to authenticate user
-				if (res.status !== 200) {
+				if (res.status !== 200 && res.status < 500) {
 					return this.signout();
 				}
 

From 31006507c0dde7b4316efdc62f01717632993dbb Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 25 Sep 2018 21:28:06 +0900
Subject: [PATCH 372/539] =?UTF-8?q?=E3=83=93=E3=83=AB=E3=83=89=E3=81=94?=
 =?UTF-8?q?=E3=81=A8=E3=81=AB=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3?=
 =?UTF-8?q?=E3=82=92=E5=A4=89=E3=81=88=E3=82=8B=E3=81=AE=E3=82=92=E5=BB=83?=
 =?UTF-8?q?=E6=AD=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 webpack.config.ts | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/webpack.config.ts b/webpack.config.ts
index 325923084e..3822080574 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -5,7 +5,6 @@
 import * as fs from 'fs';
 import * as webpack from 'webpack';
 import chalk from 'chalk';
-import rndstr from 'rndstr';
 const { VueLoaderPlugin } = require('vue-loader');
 const minifyHtml = require('html-minifier').minify;
 const WebpackOnBuildPlugin = require('on-build-webpack');
@@ -19,7 +18,7 @@ const constants = require('./src/const.json');
 
 const locales = require('./locales');
 const meta = require('./package.json');
-const version = `${meta.clientVersion}-${rndstr({ length: 8, chars: '0-9a-z' })}`;
+const version = meta.clientVersion;
 const codename = meta.codename;
 
 declare var global: {

From f6e4a1770e4a1359f730fdd194f0c8f95394b9d8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 25 Sep 2018 21:38:31 +0900
Subject: [PATCH 373/539] 8.62.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 55b7b4687c..1b786d1a38 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.61.0",
-	"clientVersion": "1.0.9958",
+	"version": "8.62.0",
+	"clientVersion": "1.0.9964",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 2b07b3a873e5693556b56dd310944bf744f7d103 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 18:59:37 +0900
Subject: [PATCH 374/539] wip

---
 src/client/app/app.vue                 |  7 ++-
 src/client/app/boot.js                 | 17 ++++---
 src/client/app/common/scripts/theme.ts | 63 ++++++++++++++++++++++++++
 src/client/app/desktop/style.styl      | 27 +++--------
 src/client/app/init.ts                 | 39 ----------------
 src/client/theme/dark.json             | 10 ++++
 src/client/theme/light.json            | 10 ++++
 7 files changed, 103 insertions(+), 70 deletions(-)
 create mode 100644 src/client/app/common/scripts/theme.ts
 create mode 100644 src/client/theme/dark.json
 create mode 100644 src/client/theme/light.json

diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index e639c9f9ac..d8cd4f0796 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -5,6 +5,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import { url, lang } from './config';
+import applyTheme from './common/scripts/theme';
+import darkTheme from '../theme/dark.json';
 
 export default Vue.extend({
 	computed: {
@@ -22,10 +24,7 @@ export default Vue.extend({
 		},
 
 		dark() {
-			this.$store.commit('device/set', {
-				key: 'darkmode',
-				value: !this.$store.state.device.darkmode
-			});
+			applyTheme(darkTheme);
 		}
 	}
 });
diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index 25aa26dd19..e122e0423a 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -20,6 +20,16 @@
 
 	const langs = LANGS;
 
+	//#region Apply theme
+	const theme = localStorage.getItem('theme');
+	if (theme) {
+		Object.entries(JSON.parse(theme)).forEach(([k, v]) => {
+			if (k == 'meta') return;
+			document.documentElement.style.setProperty(`--${k}`, v.toString());
+		});
+	}
+	//#endregion
+
 	//#region Load settings
 	let settings = null;
 	const vuex = localStorage.getItem('vuex');
@@ -84,13 +94,6 @@
 		app = isMobile ? 'mobile' : 'desktop';
 	}
 
-	// Dark/Light
-	if (settings) {
-		if (settings.device.darkmode) {
-			document.documentElement.setAttribute('data-darkmode', 'true');
-		}
-	}
-
 	// Script version
 	const ver = localStorage.getItem('v') || VERSION;
 
diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
new file mode 100644
index 0000000000..bc70223519
--- /dev/null
+++ b/src/client/app/common/scripts/theme.ts
@@ -0,0 +1,63 @@
+export default function(theme: { [key: string]: string }) {
+	const props = compile(theme);
+
+	Object.entries(props).forEach(([k, v]) => {
+		if (k == 'meta') return;
+		document.documentElement.style.setProperty(`--${k}`, v.toString());
+	});
+}
+
+function compile(theme: { [key: string]: string }): { [key: string]: string } {
+	function getRgba(code: string): number[] {
+		// ref
+		if (code[0] == '@') {
+			return getRgba(theme[code.substr(1)]);
+		}
+
+		let m;
+
+		//#region #RGB
+		m = code.match(/^#([0-9a-f]{3})$/i)[1];
+		if (m) {
+			return [
+				parseInt(m.charAt(0), 16) * 0x11,
+				parseInt(m.charAt(1), 16) * 0x11,
+				parseInt(m.charAt(2), 16) * 0x11,
+				255
+			];
+		}
+		//#endregion
+
+		//#region #RRGGBB
+		m = code.match(/^#([0-9a-f]{6})$/i)[1];
+		if (m) {
+			return [
+				parseInt(m.substr(0, 2), 16),
+				parseInt(m.substr(2, 2), 16),
+				parseInt(m.substr(4, 2), 16),
+				255
+			];
+		}
+		//#endregion
+
+		return [0, 0, 0, 255];
+	}
+
+	const props = {};
+
+	Object.entries(theme).forEach(([k, v]) => {
+		if (k == 'meta') return;
+		const [r, g, b, a] = getRgba(v);
+		props[k] = genValue(r, g, b, a);
+		props[`${k}-r`] = r;
+		props[`${k}-g`] = g;
+		props[`${k}-b`] = b;
+		props[`${k}-a`] = a;
+	});
+
+	return props;
+}
+
+function genValue(r: number, g: number, b: number, a: number): string {
+	return a != 255 ? `rgba(${r}, ${g}, ${b}, ${a})` : `#${r.toString(16)}${g.toString(16)}${b.toString(16)}`;
+}
diff --git a/src/client/app/desktop/style.styl b/src/client/app/desktop/style.styl
index 3cd36482e4..626671fd25 100644
--- a/src/client/app/desktop/style.styl
+++ b/src/client/app/desktop/style.styl
@@ -11,34 +11,21 @@
 
 html
 	height 100%
-	background #f7f7f7
+	background var(--bg)
 
 	&, *
 		&::-webkit-scrollbar
 			width 6px
 			height 6px
 
+		&::-webkit-scrollbar-track
+			background var(--scrollbarTrack)
+
 		&::-webkit-scrollbar-thumb
-			background rgba(0, 0, 0, 0.2)
+			background var(--scrollbarHandle)
 
 			&:hover
-				background rgba(0, 0, 0, 0.4)
+				background var(--scrollbarHandleHover)
 
 			&:active
-				background $theme-color
-
-	&[data-darkmode]
-		background #191B22
-
-		&, *
-			&::-webkit-scrollbar-track
-				background-color #282C37
-
-			&::-webkit-scrollbar-thumb
-				background-color #454954
-
-				&:hover
-					background-color #535660
-
-				&:active
-					background-color $theme-color
+				background var(--primary)
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 4e1d1b70c7..7468484b35 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -86,45 +86,6 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
 		const launch = (router: VueRouter, api?: (os: MiOS) => API) => {
 			os.apis = api ? api(os) : null;
 
-			//#region Dark/Light
-			Vue.mixin({
-				data() {
-					return {
-						_unwatchDarkmode_: null
-					};
-				},
-				mounted() {
-					const apply = v => {
-						if (this.$el.setAttribute == null) return;
-						if (v) {
-							this.$el.setAttribute('data-darkmode', 'true');
-						} else {
-							this.$el.removeAttribute('data-darkmode');
-						}
-					};
-
-					apply(os.store.state.device.darkmode);
-
-					this._unwatchDarkmode_ = os.store.watch(s => {
-						return s.device.darkmode;
-					}, apply);
-				},
-				beforeDestroy() {
-					this._unwatchDarkmode_();
-				}
-			});
-
-			os.store.watch(s => {
-				return s.device.darkmode;
-			}, v => {
-				if (v) {
-					document.documentElement.setAttribute('data-darkmode', 'true');
-				} else {
-					document.documentElement.removeAttribute('data-darkmode');
-				}
-			});
-			//#endregion
-
 			//#region shadow
 			const shadow = '0 3px 8px rgba(0, 0, 0, 0.2)';
 			if (os.store.state.settings.useShadow) document.documentElement.style.setProperty('--shadow', shadow);
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
new file mode 100644
index 0000000000..4ea0a1a649
--- /dev/null
+++ b/src/client/theme/dark.json
@@ -0,0 +1,10 @@
+{
+	"meta": {
+		"name": "Dark"
+	},
+	"primary": "#fb4e4e",
+	"bg": "#191B22",
+	"scrollbarTrack": "#282C37",
+	"scrollbarHandle": "#454954",
+	"scrollbarHandleHover": "#535660"
+}
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
new file mode 100644
index 0000000000..00a74a53c5
--- /dev/null
+++ b/src/client/theme/light.json
@@ -0,0 +1,10 @@
+{
+	"meta": {
+		"name": "Light"
+	},
+	"primary": "#fb4e4e",
+	"bg": "#f7f7f7",
+	"scrollbarTrack": "#fff",
+	"scrollbarHandle": "#00000033",
+	"scrollbarHandleHover": "#00000066"
+}

From d2d3f7810eaa319fa562377436ad6c70e4736c06 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 19:14:11 +0900
Subject: [PATCH 375/539] wip

---
 src/client/app/app.vue                 |  2 +-
 src/client/app/common/scripts/theme.ts | 18 ++++++++++--------
 src/client/app/init.ts                 |  8 +++++++-
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index d8cd4f0796..bb8377c237 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -6,7 +6,7 @@
 import Vue from 'vue';
 import { url, lang } from './config';
 import applyTheme from './common/scripts/theme';
-import darkTheme from '../theme/dark.json';
+const darkTheme = require('../theme/dark');
 
 export default Vue.extend({
 	computed: {
diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index bc70223519..7fbac7f574 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -5,6 +5,8 @@ export default function(theme: { [key: string]: string }) {
 		if (k == 'meta') return;
 		document.documentElement.style.setProperty(`--${k}`, v.toString());
 	});
+
+	localStorage.setItem('theme', JSON.stringify(props));
 }
 
 function compile(theme: { [key: string]: string }): { [key: string]: string } {
@@ -17,24 +19,24 @@ function compile(theme: { [key: string]: string }): { [key: string]: string } {
 		let m;
 
 		//#region #RGB
-		m = code.match(/^#([0-9a-f]{3})$/i)[1];
+		m = code.match(/^#([0-9a-f]{3})$/i);
 		if (m) {
 			return [
-				parseInt(m.charAt(0), 16) * 0x11,
-				parseInt(m.charAt(1), 16) * 0x11,
-				parseInt(m.charAt(2), 16) * 0x11,
+				parseInt(m[1].charAt(0), 16) * 0x11,
+				parseInt(m[1].charAt(1), 16) * 0x11,
+				parseInt(m[1].charAt(2), 16) * 0x11,
 				255
 			];
 		}
 		//#endregion
 
 		//#region #RRGGBB
-		m = code.match(/^#([0-9a-f]{6})$/i)[1];
+		m = code.match(/^#([0-9a-f]{6})$/i);
 		if (m) {
 			return [
-				parseInt(m.substr(0, 2), 16),
-				parseInt(m.substr(2, 2), 16),
-				parseInt(m.substr(4, 2), 16),
+				parseInt(m[1].substr(0, 2), 16),
+				parseInt(m[1].substr(2, 2), 16),
+				parseInt(m[1].substr(4, 2), 16),
 				255
 			];
 		}
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 7468484b35..8d430ad7ff 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -8,12 +8,18 @@ import VueRouter from 'vue-router';
 import * as TreeView from 'vue-json-tree-view';
 import VAnimateCss from 'v-animate-css';
 import VModal from 'vue-js-modal';
-import VueHotkey from './common/hotkey';
 
+import VueHotkey from './common/hotkey';
 import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
 import MiOS, { API } from './mios';
 import { version, codename, lang } from './config';
+import applyTheme from './common/scripts/theme';
+const defaultTheme = require('../theme/light.json');
+
+if (localStorage.getItem('theme') == null) {
+	applyTheme(defaultTheme);
+}
 
 Vue.use(Vuex);
 Vue.use(VueRouter);

From 904114740b2f87743c332e029a4c6817ebb9e17d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 20:19:35 +0900
Subject: [PATCH 376/539] wip

---
 package.json                                  |  2 +
 src/client/app/app.styl                       |  8 +-
 src/client/app/common/scripts/theme.ts        | 67 +++++++---------
 .../common/views/components/autocomplete.vue  |  6 +-
 .../views/components/connect-failed.vue       | 12 +--
 .../app/common/views/components/forkit.vue    |  6 +-
 .../components/games/reversi/reversi.game.vue | 10 +--
 .../games/reversi/reversi.index.vue           |  4 +-
 .../components/games/reversi/reversi.room.vue |  4 +-
 .../components/games/reversi/reversi.vue      |  2 +-
 .../app/common/views/components/menu.vue      | 10 +--
 .../views/components/messaging-room.form.vue  | 10 +--
 .../components/messaging-room.message.vue     |  4 +-
 .../views/components/messaging-room.vue       | 10 +--
 .../app/common/views/components/messaging.vue | 10 +--
 .../common/views/components/note-header.vue   |  2 +-
 .../common/views/components/poll-editor.vue   | 22 ++---
 .../app/common/views/components/poll.vue      |  4 +-
 .../views/components/reaction-picker.vue      |  6 +-
 .../app/common/views/components/signin.vue    |  2 +-
 .../app/common/views/components/signup.vue    |  2 +-
 .../app/common/views/components/switch.vue    | 16 ++--
 .../app/common/views/components/ui/button.vue | 16 ++--
 .../app/common/views/components/ui/card.vue   |  2 +-
 .../app/common/views/components/ui/form.vue   |  2 +-
 .../views/components/ui/form/button.vue       | 28 +++----
 .../common/views/components/ui/form/radio.vue |  8 +-
 .../app/common/views/components/ui/input.vue  |  6 +-
 .../app/common/views/components/ui/radio.vue  |  6 +-
 .../app/common/views/components/ui/select.vue |  6 +-
 .../app/common/views/components/ui/switch.vue |  8 +-
 .../common/views/components/ui/textarea.vue   |  6 +-
 .../app/common/views/components/uploader.vue  | 30 +++----
 .../views/components/visibility-chooser.vue   |  6 +-
 src/client/app/common/views/pages/follow.vue  | 22 ++---
 .../app/common/views/widgets/analog-clock.vue |  2 +-
 .../app/common/views/widgets/calendar.vue     |  4 +-
 src/client/app/common/views/widgets/memo.vue  | 10 +--
 src/client/app/desktop/ui.styl                | 36 ++++-----
 .../app/desktop/views/components/calendar.vue | 10 +--
 .../app/desktop/views/components/charts.vue   |  4 +-
 .../choose-file-from-drive-window.vue         | 32 ++++----
 .../choose-folder-from-drive-window.vue       | 20 ++---
 .../views/components/context-menu.menu.vue    | 12 +--
 .../desktop/views/components/crop-window.vue  | 24 +++---
 .../app/desktop/views/components/dialog.vue   | 10 +--
 .../desktop/views/components/drive.file.vue   | 12 +--
 .../desktop/views/components/drive.folder.vue | 14 ++--
 .../app/desktop/views/components/drive.vue    |  8 +-
 .../views/components/follow-button.vue        | 18 ++---
 .../app/desktop/views/components/home.vue     | 10 +--
 .../desktop/views/components/input-dialog.vue | 30 +++----
 .../desktop/views/components/note-detail.vue  |  2 +-
 .../desktop/views/components/notes.note.vue   |  8 +-
 .../app/desktop/views/components/notes.vue    |  4 +-
 .../desktop/views/components/post-form.vue    | 80 +++++++++----------
 .../views/components/progress-dialog.vue      | 22 ++---
 .../desktop/views/components/renote-form.vue  |  4 +-
 .../app/desktop/views/components/settings.vue |  4 +-
 .../views/components/timeline.core.vue        |  2 +-
 .../app/desktop/views/components/timeline.vue | 12 +--
 .../views/components/ui.header.account.vue    | 12 +--
 .../views/components/ui.header.nav.vue        |  6 +-
 .../components/ui.header.notifications.vue    |  4 +-
 .../views/components/ui.header.post.vue       | 10 +--
 .../views/components/ui.header.search.vue     |  4 +-
 .../desktop/views/components/user-preview.vue |  4 +-
 .../desktop/views/components/users-list.vue   |  6 +-
 .../app/desktop/views/components/window.vue   |  6 +-
 .../views/pages/admin/admin.announcements.vue |  2 +-
 .../views/pages/admin/admin.dashboard.vue     |  4 +-
 .../views/pages/admin/admin.hashtags.vue      |  2 +-
 .../views/pages/admin/admin.suspend-user.vue  |  2 +-
 .../pages/admin/admin.unsuspend-user.vue      |  2 +-
 .../views/pages/admin/admin.unverify-user.vue |  2 +-
 .../views/pages/admin/admin.verify-user.vue   |  2 +-
 .../app/desktop/views/pages/admin/admin.vue   |  4 +-
 .../desktop/views/pages/deck/deck.column.vue  |  8 +-
 .../desktop/views/pages/deck/deck.note.vue    |  8 +-
 .../desktop/views/pages/deck/deck.notes.vue   |  2 +-
 .../app/desktop/views/pages/deck/deck.vue     |  2 +-
 .../views/pages/deck/deck.widgets-column.vue  |  2 +-
 .../app/desktop/views/pages/selectdrive.vue   | 32 ++++----
 .../app/desktop/views/pages/stats/stats.vue   |  4 +-
 .../desktop/views/pages/user/user.header.vue  |  4 +-
 .../views/pages/user/user.timeline.vue        |  6 +-
 .../app/desktop/views/pages/welcome.vue       |  6 +-
 .../app/desktop/views/widgets/post-form.vue   | 10 +--
 .../app/mobile/views/components/dialog.vue    | 10 +--
 .../mobile/views/components/drive.file.vue    |  4 +-
 .../mobile/views/components/follow-button.vue | 22 ++---
 .../mobile/views/components/mute-button.vue   | 24 +++---
 .../mobile/views/components/note-detail.vue   |  4 +-
 .../app/mobile/views/components/note.vue      |  8 +-
 .../app/mobile/views/components/notes.vue     |  2 +-
 .../app/mobile/views/components/post-form.vue |  6 +-
 .../app/mobile/views/components/ui.header.vue |  6 +-
 .../app/mobile/views/components/ui.nav.vue    | 10 +--
 .../mobile/views/components/users-list.vue    |  6 +-
 .../app/mobile/views/pages/favorites.vue      |  2 +-
 src/client/app/mobile/views/pages/home.vue    | 12 +--
 .../app/mobile/views/pages/notifications.vue  |  2 +-
 .../views/pages/received-follow-requests.vue  |  2 +-
 .../app/mobile/views/pages/user-list.vue      |  2 +-
 .../app/mobile/views/pages/user-lists.vue     |  2 +-
 src/client/app/mobile/views/pages/user.vue    |  6 +-
 src/client/const.styl                         |  4 -
 src/client/style.styl                         | 14 ++--
 src/client/theme/dark.json                    |  1 +
 src/client/theme/light.json                   |  1 +
 110 files changed, 529 insertions(+), 536 deletions(-)
 delete mode 100644 src/client/const.styl

diff --git a/package.json b/package.json
index 1b786d1a38..a3e3b56be4 100644
--- a/package.json
+++ b/package.json
@@ -75,6 +75,7 @@
 		"@types/single-line-log": "1.1.0",
 		"@types/speakeasy": "2.0.2",
 		"@types/systeminformation": "3.23.0",
+		"@types/tinycolor2": "1.4.1",
 		"@types/tmp": "0.0.33",
 		"@types/uuid": "3.4.4",
 		"@types/webpack": "4.4.12",
@@ -194,6 +195,7 @@
 		"systeminformation": "3.45.6",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",
+		"tinycolor2": "1.4.1",
 		"tmp": "0.0.33",
 		"ts-loader": "4.4.1",
 		"ts-node": "7.0.1",
diff --git a/src/client/app/app.styl b/src/client/app/app.styl
index 3911f83a61..2f0095944c 100644
--- a/src/client/app/app.styl
+++ b/src/client/app/app.styl
@@ -27,7 +27,7 @@ body
 	z-index 65536
 
 	.bar
-		background $theme-color
+		background var(--primary)
 
 		position fixed
 		z-index 65537
@@ -44,7 +44,7 @@ body
 		right 0px
 		width 100px
 		height 100%
-		box-shadow 0 0 10px $theme-color, 0 0 5px $theme-color
+		box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary)
 		opacity 1
 
 		transform rotate(3deg) translate(0px, -4px)
@@ -64,8 +64,8 @@ body
 		box-sizing border-box
 
 		border solid 2px transparent
-		border-top-color $theme-color
-		border-left-color $theme-color
+		border-top-color var(--primary)
+		border-left-color var(--primary)
 		border-radius 50%
 
 		animation progress-spinner 400ms linear infinite
diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index 7fbac7f574..2cad547c01 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -1,3 +1,5 @@
+import * as tinycolor from 'tinycolor2';
+
 export default function(theme: { [key: string]: string }) {
 	const props = compile(theme);
 
@@ -10,56 +12,47 @@ export default function(theme: { [key: string]: string }) {
 }
 
 function compile(theme: { [key: string]: string }): { [key: string]: string } {
-	function getRgba(code: string): number[] {
+	function getColor(code: string): tinycolor.Instance {
 		// ref
 		if (code[0] == '@') {
-			return getRgba(theme[code.substr(1)]);
+			return getColor(theme[code.substr(1)]);
 		}
 
-		let m;
-
-		//#region #RGB
-		m = code.match(/^#([0-9a-f]{3})$/i);
-		if (m) {
-			return [
-				parseInt(m[1].charAt(0), 16) * 0x11,
-				parseInt(m[1].charAt(1), 16) * 0x11,
-				parseInt(m[1].charAt(2), 16) * 0x11,
-				255
-			];
-		}
-		//#endregion
-
-		//#region #RRGGBB
-		m = code.match(/^#([0-9a-f]{6})$/i);
-		if (m) {
-			return [
-				parseInt(m[1].substr(0, 2), 16),
-				parseInt(m[1].substr(2, 2), 16),
-				parseInt(m[1].substr(4, 2), 16),
-				255
-			];
-		}
-		//#endregion
-
-		return [0, 0, 0, 255];
+		return tinycolor(code);
 	}
 
 	const props = {};
 
 	Object.entries(theme).forEach(([k, v]) => {
 		if (k == 'meta') return;
-		const [r, g, b, a] = getRgba(v);
-		props[k] = genValue(r, g, b, a);
-		props[`${k}-r`] = r;
-		props[`${k}-g`] = g;
-		props[`${k}-b`] = b;
-		props[`${k}-a`] = a;
+		const c = getColor(v);
+		props[k] = genValue(c);
+		props[`${k}-r`] = c.toRgb().r;
+		props[`${k}-g`] = c.toRgb().g;
+		props[`${k}-b`] = c.toRgb().b;
+		props[`${k}-a`] = c.toRgb().a;
 	});
 
+	const primary = getColor(props['primary']);
+
+	for (let i = 1; i < 10; i++) {
+		const color = primary.clone().setAlpha(i / 10);
+		props['primaryAlpha0' + i] = genValue(color);
+	}
+
+	for (let i = 1; i < 100; i++) {
+		const color = primary.clone().lighten(i);
+		props['primaryLighten' + i] = genValue(color);
+	}
+
+	for (let i = 1; i < 100; i++) {
+		const color = primary.clone().darken(i);
+		props['primaryDarken' + i] = genValue(color);
+	}
+
 	return props;
 }
 
-function genValue(r: number, g: number, b: number, a: number): string {
-	return a != 255 ? `rgba(${r}, ${g}, ${b}, ${a})` : `#${r.toString(16)}${g.toString(16)}${b.toString(16)}`;
+function genValue(c: tinycolor.Instance): string {
+	return c.toRgbString();
 }
diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index ea05afd6dc..99a87520a4 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -259,7 +259,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	position fixed
@@ -302,13 +302,13 @@ root(isDark)
 				background isDark ? rgba(#fff, 0.1) : rgba(#000, 0.1)
 
 			&[data-selected='true']
-				background $theme-color
+				background var(--primary)
 
 				&, *
 					color #fff !important
 
 			&:active
-				background darken($theme-color, 10%)
+				background var(--primaryDarken10)
 
 				&, *
 					color #fff !important
diff --git a/src/client/app/common/views/components/connect-failed.vue b/src/client/app/common/views/components/connect-failed.vue
index 0f686926b0..36cae05665 100644
--- a/src/client/app/common/views/components/connect-failed.vue
+++ b/src/client/app/common/views/components/connect-failed.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-connect-failed
 	width 100%
@@ -70,17 +70,17 @@ export default Vue.extend({
 		display block
 		margin 1em auto 0 auto
 		padding 8px 10px
-		color $theme-color-foreground
-		background $theme-color
+		color var(--primaryForeground)
+		background var(--primary)
 
 		&:focus
-			outline solid 3px rgba($theme-color, 0.3)
+			outline solid 3px var(--primaryAlpha03)
 
 		&:hover
-			background lighten($theme-color, 10%)
+			background var(--primaryLighten10)
 
 		&:active
-			background darken($theme-color, 10%)
+			background var(--primaryDarken10)
 
 	> .thanks
 		display block
diff --git a/src/client/app/common/views/components/forkit.vue b/src/client/app/common/views/components/forkit.vue
index de627181ef..b303b48b79 100644
--- a/src/client/app/common/views/components/forkit.vue
+++ b/src/client/app/common/views/components/forkit.vue
@@ -9,7 +9,7 @@
 </template>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .a
 	display block
@@ -18,8 +18,8 @@
 		display block
 		//fill #151513
 		//color #fff
-		fill $theme-color
-		color $theme-color-foreground
+		fill var(--primary)
+		color var(--primaryForeground)
 
 		.octo-arm
 			transform-origin 130px 106px
diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index fea19d917e..bc230496a6 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -304,7 +304,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	text-align center
@@ -399,14 +399,14 @@ root(isDark)
 							cursor pointer
 
 							&:hover
-								border-color darken($theme-color, 10%)
-								background $theme-color
+								border-color var(--primaryDarken10)
+								background var(--primary)
 
 							&:active
-								background darken($theme-color, 10%)
+								background var(--primaryDarken10)
 
 					&.prev
-						box-shadow 0 0 0 4px rgba($theme-color, 0.7)
+						box-shadow 0 0 0 4px var(--primaryAlpha07)
 
 					&.isEnded
 						border-color isDark ? #6a767f : #ddd
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index d23902aae7..f6c7f0e3c2 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -138,7 +138,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	> h1
@@ -200,7 +200,7 @@ root(isDark)
 			user-select none
 
 		&:focus
-			border-color $theme-color
+			border-color var(--primary)
 
 		&:hover
 			background isDark ? #313543 : #f5f5f5
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index fef833d63e..d4b91ae7a7 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -252,7 +252,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	text-align center
@@ -288,7 +288,7 @@ root(isDark)
 
 						&:focus
 						&:active
-							border-color $theme-color
+							border-color var(--primary)
 
 				> div
 					> .random
diff --git a/src/client/app/common/views/components/games/reversi/reversi.vue b/src/client/app/common/views/components/games/reversi/reversi.vue
index 223ec4597a..75d7d574c1 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.vue
@@ -156,7 +156,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	color isDark ? #fff : #677f84
diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index ad5ec619ba..3b9f07d1ee 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -117,7 +117,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$bg-color = isDark ? #2c303c : #fff
@@ -182,13 +182,13 @@ root(isDark)
 			color isDark ? #d6dce2 : #111
 
 			&:hover
-				color $theme-color-foreground
-				background $theme-color
+				color var(--primaryForeground)
+				background var(--primary)
 				text-decoration none
 
 			&:active
-				color $theme-color-foreground
-				background darken($theme-color, 10%)
+				color var(--primaryForeground)
+				background var(--primaryDarken10)
 
 		> div
 			margin 8px 0
diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue
index f183749fad..90668aee6e 100644
--- a/src/client/app/common/views/components/messaging-room.form.vue
+++ b/src/client/app/common/views/components/messaging-room.form.vue
@@ -195,7 +195,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	> textarea
@@ -234,10 +234,10 @@ root(isDark)
 		transition color 0.1s ease
 
 		&:hover
-			color $theme-color
+			color var(--primary)
 
 		&:active
-			color darken($theme-color, 10%)
+			color var(--primaryDarken10)
 			transition color 0s ease
 
 	.files
@@ -293,10 +293,10 @@ root(isDark)
 		transition color 0.1s ease
 
 		&:hover
-			color $theme-color
+			color var(--primary)
 
 		&:active
-			color darken($theme-color, 10%)
+			color var(--primaryDarken10)
 			transition color 0s ease
 
 	input[type=file]
diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue
index 648d0eee18..e0528d5432 100644
--- a/src/client/app/common/views/components/messaging-room.message.vue
+++ b/src/client/app/common/views/components/messaging-room.message.vue
@@ -59,10 +59,10 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
-	$me-balloon-color = $theme-color
+	$me-balloon-color = var(--primary)
 
 	padding 10px 12px 10px 12px
 	background-color transparent
diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index 1de41855df..5bdf8b9034 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -262,7 +262,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
@@ -386,15 +386,15 @@ root(isDark)
 				cursor pointer
 				line-height 32px
 				font-size 12px
-				color $theme-color-foreground
-				background $theme-color
+				color var(--primaryForeground)
+				background var(--primary)
 				border-radius 16px
 
 				&:hover
-					background lighten($theme-color, 10%)
+					background var(--primaryLighten10)
 
 				&:active
-					background darken($theme-color, 10%)
+					background var(--primaryDarken10)
 
 				> [data-fa]
 					position absolute
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index 6abfc92dca..7181ddd01c 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -167,7 +167,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 
@@ -252,8 +252,8 @@ root(isDark)
 					transition border 0.2s ease
 
 				&:focus
-					color darken($theme-color, 20%)
-					border solid 1px $theme-color
+					color var(--primaryDarken20)
+					border solid 1px var(--primary)
 					transition color 0, border 0
 
 		> .result
@@ -287,7 +287,7 @@ root(isDark)
 					&:hover
 					&:focus
 						color #fff
-						background $theme-color
+						background var(--primary)
 
 						.name
 							color #fff
@@ -297,7 +297,7 @@ root(isDark)
 
 					&:active
 						color #fff
-						background darken($theme-color, 10%)
+						background var(--primaryDarken10)
 
 						.name
 							color #fff
diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue
index d25bd430f2..f4a2f00876 100644
--- a/src/client/app/common/views/components/note-header.vue
+++ b/src/client/app/common/views/components/note-header.vue
@@ -42,7 +42,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue
index 30d9799fec..219f0a7fd5 100644
--- a/src/client/app/common/views/components/poll-editor.vue
+++ b/src/client/app/common/views/components/poll-editor.vue
@@ -68,7 +68,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	padding 8px
@@ -105,42 +105,42 @@ root(isDark)
 				font-size 14px
 				color isDark ? #fff : #000
 				background isDark ? #191b22 : #fff
-				border solid 1px rgba($theme-color, 0.1)
+				border solid 1px var(--primaryAlpha01)
 				border-radius 4px
 
 				&:hover
-					border-color rgba($theme-color, 0.2)
+					border-color var(--primaryAlpha02)
 
 				&:focus
-					border-color rgba($theme-color, 0.5)
+					border-color var(--primaryAlpha05)
 
 			> button
 				padding 4px 8px
-				color rgba($theme-color, 0.4)
+				color var(--primaryAlpha04)
 
 				&:hover
-					color rgba($theme-color, 0.6)
+					color var(--primaryAlpha06)
 
 				&:active
-					color darken($theme-color, 30%)
+					color var(--primaryDarken30)
 
 	> .add
 		margin 8px 0 0 0
 		vertical-align top
-		color $theme-color
+		color var(--primary)
 
 	> .destroy
 		position absolute
 		top 0
 		right 0
 		padding 4px 8px
-		color rgba($theme-color, 0.4)
+		color var(--primaryAlpha04)
 
 		&:hover
-			color rgba($theme-color, 0.6)
+			color var(--primaryAlpha06)
 
 		&:active
-			color darken($theme-color, 30%)
+			color var(--primaryDarken30)
 
 .mk-poll-editor[data-darkmode]
 	root(true)
diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue
index 4fe51d219b..0e60932796 100644
--- a/src/client/app/common/views/components/poll.vue
+++ b/src/client/app/common/views/components/poll.vue
@@ -67,7 +67,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 
@@ -99,7 +99,7 @@ root(isDark)
 				top 0
 				left 0
 				height 100%
-				background $theme-color
+				background var(--primary)
 				transition width 1s ease
 
 			> span
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index f732e40b9d..a86850ac7c 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -210,7 +210,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 $border-color = rgba(27, 31, 35, 0.15)
 
@@ -301,7 +301,7 @@ root(isDark)
 						right 0
 						bottom 0
 						left 0
-						border 2px solid rgba($theme-color, 0.3)
+						border 2px solid var(--primaryAlpha03)
 						border-radius 4px
 
 			> button
@@ -315,7 +315,7 @@ root(isDark)
 					background isDark ? #252731 : #eee
 
 				&:active
-					background $theme-color
+					background var(--primary)
 					box-shadow inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15)
 
 .mk-reaction-picker[data-darkmode]
diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index b1c6782e93..e02af8154c 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -68,7 +68,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-signin
 	color #555
diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue
index f603b9545c..e55d7ee3e3 100644
--- a/src/client/app/common/views/components/signup.vue
+++ b/src/client/app/common/views/components/signup.vue
@@ -151,7 +151,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-signup
 	min-width 302px
diff --git a/src/client/app/common/views/components/switch.vue b/src/client/app/common/views/components/switch.vue
index 32caab638a..aa60331cbc 100644
--- a/src/client/app/common/views/components/switch.vue
+++ b/src/client/app/common/views/components/switch.vue
@@ -85,7 +85,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
@@ -102,21 +102,21 @@ root(isDark)
 
 	&.checked
 		> .button
-			background-color $theme-color
-			border-color $theme-color
+			background-color var(--primary)
+			border-color var(--primary)
 
 		> .label
 			> span
-				color $theme-color
+				color var(--primary)
 
 		&:hover
 			> .label
 				> span
-					color darken($theme-color, 10%)
+					color var(--primaryDarken10)
 
 			> .button
-				background darken($theme-color, 10%)
-				border-color darken($theme-color, 10%)
+				background var(--primaryDarken10)
+				border-color var(--primaryDarken10)
 
 	&:hover
 		> .label
@@ -144,7 +144,7 @@ root(isDark)
 				right -5px
 				bottom -5px
 				left -5px
-				border 2px solid rgba($theme-color, 0.3)
+				border 2px solid var(--primaryAlpha03)
 				border-radius 14px
 
 	> .button
diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index e778750354..ae59214038 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -32,7 +32,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark, fill)
 	> button
@@ -49,23 +49,23 @@ root(isDark, fill)
 		box-shadow none
 
 		if fill
-			color $theme-color-foreground
-			background $theme-color
+			color var(--primaryForeground)
+			background var(--primary)
 
 			&:hover
-				background lighten($theme-color, 5%)
+				background var(--primaryLighten5)
 
 			&:active
-				background darken($theme-color, 5%)
+				background var(--primaryDarken5)
 		else
-			color $theme-color
+			color var(--primary)
 			background none
 
 			&:hover
-				color darken($theme-color, 5%)
+				color var(--primaryDarken5)
 
 			&:active
-				background rgba($theme-color, 0.3)
+				background var(--primaryAlpha03)
 
 .ui-button[data-darkmode]
 	&.fill
diff --git a/src/client/app/common/views/components/ui/card.vue b/src/client/app/common/views/components/ui/card.vue
index aa16b557e1..a9e0493810 100644
--- a/src/client/app/common/views/components/ui/card.vue
+++ b/src/client/app/common/views/components/ui/card.vue
@@ -20,7 +20,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	margin 16px
diff --git a/src/client/app/common/views/components/ui/form.vue b/src/client/app/common/views/components/ui/form.vue
index fc8fdad9c4..5c5bbd7256 100644
--- a/src/client/app/common/views/components/ui/form.vue
+++ b/src/client/app/common/views/components/ui/form.vue
@@ -19,7 +19,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .ui-form
 	> fieldset
diff --git a/src/client/app/common/views/components/ui/form/button.vue b/src/client/app/common/views/components/ui/form/button.vue
index 9c37b3118b..bccf36e52f 100644
--- a/src/client/app/common/views/components/ui/form/button.vue
+++ b/src/client/app/common/views/components/ui/form/button.vue
@@ -25,7 +25,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display inline-block
@@ -50,30 +50,30 @@ root(isDark)
 
 		&:hover
 		&:focus
-			color $theme-color
-			background rgba($theme-color, isDark ? 0.2 : 0.12)
-			border-color rgba($theme-color, isDark ? 0.5 : 0.3)
+			color var(--primary)
+			//background rgba(var(--primary-r), var(--primary-g), var(--primary-b), isDark ? 0.2 : 0.12)
+			//border-color rgba(var(--primary-r), var(--primary-g), var(--primary-b), isDark ? 0.5 : 0.3)
 
 		&:active
-			color darken($theme-color, 20%)
-			background rgba($theme-color, 0.12)
-			border-color $theme-color
+			color var(--primaryDarken20)
+			//background rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.12)
+			border-color var(--primary)
 			transition all 0s
 
 	&.primary
 		> button
-			border 1px solid $theme-color
-			background $theme-color
-			color $theme-color-foreground
+			border 1px solid var(--primary)
+			background var(--primary)
+			color var(--primaryForeground)
 
 			&:hover
 			&:focus
-				background lighten($theme-color, 20%)
-				border-color lighten($theme-color, 20%)
+				background var(--primaryLighten20)
+				border-color var(--primaryLighten20)
 
 			&:active
-				background darken($theme-color, 20%)
-				border-color darken($theme-color, 20%)
+				background var(--primaryDarken20)
+				border-color var(--primaryDarken20)
 				transition all 0s
 
 	&.round
diff --git a/src/client/app/common/views/components/ui/form/radio.vue b/src/client/app/common/views/components/ui/form/radio.vue
index 831981bb3e..13cabbdc04 100644
--- a/src/client/app/common/views/components/ui/form/radio.vue
+++ b/src/client/app/common/views/components/ui/form/radio.vue
@@ -49,7 +49,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display inline-flex
@@ -70,15 +70,15 @@ root(isDark)
 
 	&.checked
 		> .button
-			border-color $theme-color
+			border-color var(--primary)
 
 			&:after
-				background-color $theme-color
+				background-color var(--primary)
 				transform scale(1)
 				opacity 1
 
 		> .label
-			color $theme-color
+			color var(--primary)
 
 	> input
 		position absolute
diff --git a/src/client/app/common/views/components/ui/input.vue b/src/client/app/common/views/components/ui/input.vue
index ce28bfb12a..98c9bf7f5a 100644
--- a/src/client/app/common/views/components/ui/input.vue
+++ b/src/client/app/common/views/components/ui/input.vue
@@ -155,7 +155,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark, fill)
 	margin 32px 0
@@ -193,7 +193,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				height 2px
-				background $theme-color
+				background var(--primary)
 				opacity 0
 				transform scaleX(0.12)
 				transition border 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)
@@ -325,7 +325,7 @@ root(isDark, fill)
 					transform scaleX(1)
 
 			> .label
-				color $theme-color
+				color var(--primary)
 
 	&.focused
 	&.filled
diff --git a/src/client/app/common/views/components/ui/radio.vue b/src/client/app/common/views/components/ui/radio.vue
index dcdda1cf0e..ded6b5650c 100644
--- a/src/client/app/common/views/components/ui/radio.vue
+++ b/src/client/app/common/views/components/ui/radio.vue
@@ -51,7 +51,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display inline-block
@@ -68,10 +68,10 @@ root(isDark)
 
 	&.checked
 		> .button
-			border-color $theme-color
+			border-color var(--primary)
 
 			&:after
-				background-color $theme-color
+				background-color var(--primary)
 				transform scale(1)
 				opacity 1
 
diff --git a/src/client/app/common/views/components/ui/select.vue b/src/client/app/common/views/components/ui/select.vue
index 4273a4a0de..c32865c690 100644
--- a/src/client/app/common/views/components/ui/select.vue
+++ b/src/client/app/common/views/components/ui/select.vue
@@ -70,7 +70,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark, fill)
 	margin 32px 0
@@ -113,7 +113,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				height 2px
-				background $theme-color
+				background var(--primary)
 				opacity 0
 				transform scaleX(0.12)
 				transition border 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)
@@ -190,7 +190,7 @@ root(isDark, fill)
 					transform scaleX(1)
 
 			> .label
-				color $theme-color
+				color var(--primary)
 
 	&.focused
 	&.filled
diff --git a/src/client/app/common/views/components/ui/switch.vue b/src/client/app/common/views/components/ui/switch.vue
index e88b867801..e358713d8f 100644
--- a/src/client/app/common/views/components/ui/switch.vue
+++ b/src/client/app/common/views/components/ui/switch.vue
@@ -56,7 +56,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
@@ -79,11 +79,11 @@ root(isDark)
 
 	&.checked
 		> .button
-			background-color rgba($theme-color, 0.4)
-			border-color rgba($theme-color, 0.4)
+			background-color var(--primaryAlpha04)
+			border-color var(--primaryAlpha04)
 
 			> *
-				background-color $theme-color
+				background-color var(--primary)
 				transform translateX(14px)
 
 	> input
diff --git a/src/client/app/common/views/components/ui/textarea.vue b/src/client/app/common/views/components/ui/textarea.vue
index 60fe1cdd82..53b7dcaf8c 100644
--- a/src/client/app/common/views/components/ui/textarea.vue
+++ b/src/client/app/common/views/components/ui/textarea.vue
@@ -63,7 +63,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark, fill)
 	margin 42px 0 32px 0
@@ -97,7 +97,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				background none
-				border solid 2px $theme-color
+				border solid 2px var(--primary)
 				border-radius 3px
 				opacity 0
 				transition opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1)
@@ -149,7 +149,7 @@ root(isDark, fill)
 					opacity 1
 
 			> .label
-				color $theme-color
+				color var(--primary)
 
 	&.focused
 	&.filled
diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue
index f4797d89f7..19b0d15708 100644
--- a/src/client/app/common/views/components/uploader.vue
+++ b/src/client/app/common/views/components/uploader.vue
@@ -81,7 +81,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-uploader
 	overflow auto
@@ -100,7 +100,7 @@ export default Vue.extend({
 			margin 8px 0 0 0
 			padding 0
 			height 36px
-			box-shadow 0 -1px 0 rgba($theme-color, 0.1)
+			box-shadow 0 -1px 0 var(--primaryAlpha01)
 			border-top solid 8px transparent
 
 			&:first-child
@@ -127,7 +127,7 @@ export default Vue.extend({
 				padding 0
 				max-width 256px
 				font-size 0.8em
-				color rgba($theme-color, 0.7)
+				color var(--primaryAlpha07)
 				white-space nowrap
 				text-overflow ellipsis
 				overflow hidden
@@ -145,17 +145,17 @@ export default Vue.extend({
 				font-size 0.8em
 
 				> .initing
-					color rgba($theme-color, 0.5)
+					color var(--primaryAlpha05)
 
 				> .kb
-					color rgba($theme-color, 0.5)
+					color var(--primaryAlpha05)
 
 				> .percentage
 					display inline-block
 					width 48px
 					text-align right
 
-					color rgba($theme-color, 0.7)
+					color var(--primaryAlpha07)
 
 					&:after
 						content '%'
@@ -174,10 +174,10 @@ export default Vue.extend({
 				overflow hidden
 
 				&::-webkit-progress-value
-					background $theme-color
+					background var(--primary)
 
 				&::-webkit-progress-bar
-					background rgba($theme-color, 0.1)
+					background var(--primaryAlpha01)
 
 			> .progress
 				display block
@@ -191,13 +191,13 @@ export default Vue.extend({
 				border-radius 4px
 				background linear-gradient(
 					45deg,
-					lighten($theme-color, 30%) 25%,
-					$theme-color               25%,
-					$theme-color               50%,
-					lighten($theme-color, 30%) 50%,
-					lighten($theme-color, 30%) 75%,
-					$theme-color               75%,
-					$theme-color
+					var(--primaryLighten30) 25%,
+					var(--primary)               25%,
+					var(--primary)               50%,
+					var(--primaryLighten30) 50%,
+					var(--primaryLighten30) 75%,
+					var(--primary)               75%,
+					var(--primary)
 				)
 				background-size 32px 32px
 				animation bg 1.5s linear infinite
diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index 1830b1832e..d0a892fd56 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -127,7 +127,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 $border-color = rgba(27, 31, 35, 0.15)
 
@@ -199,8 +199,8 @@ root(isDark)
 				background isDark ? #21242b : #ddd
 
 			&.active
-				color $theme-color-foreground
-				background $theme-color
+				color var(--primaryForeground)
+				background var(--primary)
 
 			> *
 				user-select none
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 80a870a257..d81e4c0820 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -107,7 +107,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	padding 32px
@@ -173,29 +173,29 @@ root(isDark)
 		min-width 150px
 		font-size 14px
 		font-weight bold
-		color $theme-color
+		color var(--primary)
 		background transparent
 		outline none
-		border solid 1px $theme-color
+		border solid 1px var(--primary)
 		border-radius 36px
 
 		&:hover
-			background rgba($theme-color, 0.1)
+			background var(--primaryAlpha01)
 
 		&:active
-			background rgba($theme-color, 0.2)
+			background var(--primaryAlpha02)
 
 		&.active
-			color $theme-color-foreground
-			background $theme-color
+			color var(--primaryForeground)
+			background var(--primary)
 
 			&:hover
-				background lighten($theme-color, 10%)
-				border-color lighten($theme-color, 10%)
+				background var(--primaryLighten10)
+				border-color var(--primaryLighten10)
 
 			&:active
-				background darken($theme-color, 10%)
-				border-color darken($theme-color, 10%)
+				background var(--primaryDarken10)
+				border-color var(--primaryDarken10)
 
 		&.wait
 			cursor wait !important
diff --git a/src/client/app/common/views/widgets/analog-clock.vue b/src/client/app/common/views/widgets/analog-clock.vue
index 04223f0d21..1725c2f1af 100644
--- a/src/client/app/common/views/widgets/analog-clock.vue
+++ b/src/client/app/common/views/widgets/analog-clock.vue
@@ -26,7 +26,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	.mkw-analog-clock--body
diff --git a/src/client/app/common/views/widgets/calendar.vue b/src/client/app/common/views/widgets/calendar.vue
index eb15030370..a24524d1c5 100644
--- a/src/client/app/common/views/widgets/calendar.vue
+++ b/src/client/app/common/views/widgets/calendar.vue
@@ -116,7 +116,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	&[data-special='on-new-years-day']
@@ -182,7 +182,7 @@ root(isDark)
 
 					> .val
 						height 4px
-						background $theme-color
+						background var(--primary)
 						transition width .3s cubic-bezier(0.23, 1, 0.32, 1)
 
 				&:nth-child(1)
diff --git a/src/client/app/common/views/widgets/memo.vue b/src/client/app/common/views/widgets/memo.vue
index 30f0d3b009..079522d39b 100644
--- a/src/client/app/common/views/widgets/memo.vue
+++ b/src/client/app/common/views/widgets/memo.vue
@@ -57,7 +57,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	.mkw-memo--body
@@ -83,8 +83,8 @@ root(isDark)
 			margin 0
 			padding 0 10px
 			height 28px
-			color $theme-color-foreground
-			background $theme-color !important
+			color var(--primaryForeground)
+			background var(--primary) !important
 			outline none
 			border none
 			border-radius 4px
@@ -92,10 +92,10 @@ root(isDark)
 			cursor pointer
 
 			&:hover
-				background lighten($theme-color, 10%) !important
+				background var(--primaryLighten10) !important
 
 			&:active
-				background darken($theme-color, 10%) !important
+				background var(--primaryDarken10) !important
 				transition background 0s ease
 
 			&:disabled
diff --git a/src/client/app/desktop/ui.styl b/src/client/app/desktop/ui.styl
index b66c8f4025..3ab5d79c5d 100644
--- a/src/client/app/desktop/ui.styl
+++ b/src/client/app/desktop/ui.styl
@@ -1,5 +1,3 @@
-@import "../../const"
-
 button
 	font-family sans-serif
 
@@ -34,7 +32,7 @@ button.ui
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:disabled
@@ -50,20 +48,20 @@ button.ui
 		border-color #dcdcdc
 
 	&.primary
-		color $theme-color-foreground
-		background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-		border solid 1px lighten($theme-color, 15%)
+		color var(--primaryForeground)
+		//background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+		border solid 1px var(--primaryLighten15)
 
 		&:not(:disabled)
 			font-weight bold
 
 		&:hover:not(:disabled)
-			background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-			border-color $theme-color
+			//background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+			border-color var(--primary)
 
 		&:active:not(:disabled)
-			background $theme-color
-			border-color $theme-color
+			background var(--primary)
+			border-color var(--primary)
 
 input:not([type]).ui
 input[type='text'].ui
@@ -86,7 +84,7 @@ textarea.ui
 		border-color #b0b0b0
 
 	&:focus
-		border-color $theme-color
+		border-color var(--primary)
 
 textarea.ui
 	min-width 100%
@@ -140,17 +138,17 @@ html[data-darkmode]
 			border-color #151a1d
 
 		&.primary
-			color $theme-color-foreground
-			background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-			border solid 1px lighten($theme-color, 15%)
+			color var(--primaryForeground)
+			//background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+			border solid 1px var(--primaryLighten15)
 
 			&:hover:not(:disabled)
-				background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-				border-color $theme-color
+				//background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+				border-color var(--primary)
 
 			&:active:not(:disabled)
-				background $theme-color
-				border-color $theme-color
+				background var(--primary)
+				border-color var(--primary)
 
 	input:not([type]).ui
 	input[type='text'].ui
@@ -174,7 +172,7 @@ html[data-darkmode]
 			border-color #b0b0b0
 
 		&:focus
-			border-color $theme-color
+			border-color var(--primary)
 
 	.ui.from.group
 		> p:first-child
diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index e71983f821..2414ced0c9 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -128,7 +128,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	color isDark ? #c5ced6 : #777
@@ -241,14 +241,14 @@ root(isDark)
 
 				&[data-today]
 					> div
-						color $theme-color-foreground
-						background $theme-color
+						color var(--primaryForeground)
+						background var(--primary)
 
 					&:hover > div
-						background lighten($theme-color, 10%)
+						background var(--primaryLighten10)
 
 					&:active > div
-						background darken($theme-color, 10%)
+						background var(--primaryDarken10)
 
 .mk-calendar[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/components/charts.vue b/src/client/app/desktop/views/components/charts.vue
index e401095363..6d6f3a3596 100644
--- a/src/client/app/desktop/views/components/charts.vue
+++ b/src/client/app/desktop/views/components/charts.vue
@@ -649,7 +649,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .gkgckalzgidaygcxnugepioremxvxvpt
 	padding 32px
@@ -675,7 +675,7 @@ export default Vue.extend({
 
 			*
 				&:not(.active)
-					color $theme-color
+					color var(--primary)
 					cursor pointer
 
 	> div
diff --git a/src/client/app/desktop/views/components/choose-file-from-drive-window.vue b/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
index 933d31f299..806f7f5c3f 100644
--- a/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
+++ b/src/client/app/desktop/views/components/choose-file-from-drive-window.vue
@@ -59,7 +59,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .title
 	> [data-fa]
@@ -74,7 +74,7 @@ export default Vue.extend({
 
 .footer
 	height 72px
-	background lighten($theme-color, 95%)
+	background var(--primaryLighten95)
 
 .upload
 	display inline-block
@@ -87,7 +87,7 @@ export default Vue.extend({
 	width 40px
 	height 40px
 	font-size 1em
-	color rgba($theme-color, 0.5)
+	color var(--primaryAlpha05)
 	background transparent
 	outline none
 	border solid 1px transparent
@@ -95,13 +95,13 @@ export default Vue.extend({
 
 	&:hover
 		background transparent
-		border-color rgba($theme-color, 0.3)
+		border-color var(--primaryAlpha03)
 
 	&:active
-		color rgba($theme-color, 0.6)
+		color var(--primaryAlpha06)
 		background transparent
-		border-color rgba($theme-color, 0.5)
-		box-shadow 0 2px 4px rgba(darken($theme-color, 50%), 0.15) inset
+		border-color var(--primaryAlpha05)
+		//box-shadow 0 2px 4px rgba(var(--primaryDarken50), 0.15) inset
 
 	&:focus
 		&:after
@@ -112,7 +112,7 @@ export default Vue.extend({
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 .ok
@@ -138,7 +138,7 @@ export default Vue.extend({
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:disabled
@@ -147,20 +147,20 @@ export default Vue.extend({
 
 .ok
 	right 16px
-	color $theme-color-foreground
-	background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-	border solid 1px lighten($theme-color, 15%)
+	color var(--primaryForeground)
+	background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+	border solid 1px var(--primaryLighten15)
 
 	&:not(:disabled)
 		font-weight bold
 
 	&:hover:not(:disabled)
-		background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-		border-color $theme-color
+		background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+		border-color var(--primary)
 
 	&:active:not(:disabled)
-		background $theme-color
-		border-color $theme-color
+		background var(--primary)
+		border-color var(--primary)
 
 .cancel
 	right 148px
diff --git a/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue b/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
index 03d6fd1636..b970218e58 100644
--- a/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
+++ b/src/client/app/desktop/views/components/choose-folder-from-drive-window.vue
@@ -37,7 +37,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .title
 	> [data-fa]
@@ -48,7 +48,7 @@ export default Vue.extend({
 
 .footer
 	height 72px
-	background lighten($theme-color, 95%)
+	background var(--primaryLighten95)
 
 .ok
 .cancel
@@ -73,7 +73,7 @@ export default Vue.extend({
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:disabled
@@ -82,20 +82,20 @@ export default Vue.extend({
 
 .ok
 	right 16px
-	color $theme-color-foreground
-	background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-	border solid 1px lighten($theme-color, 15%)
+	color var(--primaryForeground)
+	background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+	border solid 1px var(--primaryLighten15)
 
 	&:not(:disabled)
 		font-weight bold
 
 	&:hover:not(:disabled)
-		background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-		border-color $theme-color
+		background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+		border-color var(--primary)
 
 	&:active:not(:disabled)
-		background $theme-color
-		border-color $theme-color
+		background var(--primary)
+		border-color var(--primary)
 
 .cancel
 	right 148px
diff --git a/src/client/app/desktop/views/components/context-menu.menu.vue b/src/client/app/desktop/views/components/context-menu.menu.vue
index e7deec675e..b65a8e1dea 100644
--- a/src/client/app/desktop/views/components/context-menu.menu.vue
+++ b/src/client/app/desktop/views/components/context-menu.menu.vue
@@ -31,7 +31,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$width = 240px
@@ -69,7 +69,7 @@ root(isDark)
 
 			&:active
 				> p, a
-					background $theme-color
+					background var(--primary)
 
 		> p, a
 			display block
@@ -90,14 +90,14 @@ root(isDark)
 		&:hover
 			> p, a
 				text-decoration none
-				background $theme-color
-				color $theme-color-foreground
+				background var(--primary)
+				color var(--primaryForeground)
 
 		&:active
 			> p, a
 				text-decoration none
-				background darken($theme-color, 10%)
-				color $theme-color-foreground
+				background var(--primaryDarken10)
+				color var(--primaryForeground)
 
 	li > ul
 		visibility hidden
diff --git a/src/client/app/desktop/views/components/crop-window.vue b/src/client/app/desktop/views/components/crop-window.vue
index 4fa258549f..629c3b013a 100644
--- a/src/client/app/desktop/views/components/crop-window.vue
+++ b/src/client/app/desktop/views/components/crop-window.vue
@@ -61,7 +61,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .header
 	> [data-fa]
@@ -73,7 +73,7 @@ export default Vue.extend({
 
 .actions
 	height 72px
-	background lighten($theme-color, 95%)
+	background var(--primaryLighten95)
 
 .ok
 .cancel
@@ -98,7 +98,7 @@ export default Vue.extend({
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:disabled
@@ -111,20 +111,20 @@ export default Vue.extend({
 
 .ok
 	right 16px
-	color $theme-color-foreground
-	background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-	border solid 1px lighten($theme-color, 15%)
+	color var(--primaryForeground)
+	background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+	border solid 1px var(--primaryLighten15)
 
 	&:not(:disabled)
 		font-weight bold
 
 	&:hover:not(:disabled)
-		background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-		border-color $theme-color
+		background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+		border-color var(--primary)
 
 	&:active:not(:disabled)
-		background $theme-color
-		border-color $theme-color
+		background var(--primary)
+		border-color var(--primary)
 
 .cancel
 .skip
@@ -155,11 +155,11 @@ export default Vue.extend({
 }
 
 .cropper-view-box {
-	outline-color: $theme-color;
+	outline-color: var(--primary);
 }
 
 .cropper-line, .cropper-point {
-	background-color: $theme-color;
+	background-color: var(--primary);
 }
 
 .cropper-bg {
diff --git a/src/client/app/desktop/views/components/dialog.vue b/src/client/app/desktop/views/components/dialog.vue
index bbb1e0030c..baa6f911fe 100644
--- a/src/client/app/desktop/views/components/dialog.vue
+++ b/src/client/app/desktop/views/components/dialog.vue
@@ -91,7 +91,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-dialog
 	> .bg
@@ -144,20 +144,20 @@ export default Vue.extend({
 					margin 0 0.375em
 
 				&:hover
-					color $theme-color
+					color var(--primary)
 
 				&:active
-					color darken($theme-color, 10%)
+					color var(--primaryDarken10)
 					transition color 0s ease
 
 </style>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .header
 	margin 1em 0
-	color $theme-color
+	color var(--primary)
 	// color #43A4EC
 	font-weight bold
 
diff --git a/src/client/app/desktop/views/components/drive.file.vue b/src/client/app/desktop/views/components/drive.file.vue
index 3ac8923c51..225130baf7 100644
--- a/src/client/app/desktop/views/components/drive.file.vue
+++ b/src/client/app/desktop/views/components/drive.file.vue
@@ -200,7 +200,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	padding 8px 0 0 0
@@ -237,13 +237,13 @@ root(isDark)
 					background #ce2212
 
 	&[data-is-selected]
-		background $theme-color
+		background var(--primary)
 
 		&:hover
-			background lighten($theme-color, 10%)
+			background var(--primaryLighten10)
 
 		&:active
-			background darken($theme-color, 10%)
+			background var(--primaryDarken10)
 
 		> .label
 			&:before
@@ -251,7 +251,7 @@ root(isDark)
 				display none
 
 		> .name
-			color $theme-color-foreground
+			color var(--primaryForeground)
 
 	&[data-is-contextmenu-showing]
 		&:after
@@ -262,7 +262,7 @@ root(isDark)
 			right -4px
 			bottom -4px
 			left -4px
-			border 2px dashed rgba($theme-color, 0.3)
+			border 2px dashed var(--primaryAlpha03)
 			border-radius 4px
 
 	> .label
diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue
index e6b71f9426..cb49215cbb 100644
--- a/src/client/app/desktop/views/components/drive.folder.vue
+++ b/src/client/app/desktop/views/components/drive.folder.vue
@@ -214,12 +214,12 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	padding 8px
 	height 64px
-	background isDark ? rgba($theme-color, 0.2) : lighten($theme-color, 95%)
+	background isDark ? var(--primaryAlpha02) : var(--primaryLighten95)
 	border-radius 4px
 
 	&, *
@@ -229,10 +229,10 @@ root(isDark)
 		pointer-events none
 
 	&:hover
-		background isDark ? rgba(lighten($theme-color, 10%), 0.2) : lighten($theme-color, 90%)
+		//background isDark ? rgba(var(--primaryLighten10), 0.2) : var(--primaryLighten90)
 
 	&:active
-		background isDark ? rgba(darken($theme-color, 10%), 0.2) : lighten($theme-color, 85%)
+		//background isDark ? rgba(var(--primaryDarken10), 0.2) : var(--primaryLighten85)
 
 	&[data-is-contextmenu-showing]
 	&[data-draghover]
@@ -244,16 +244,16 @@ root(isDark)
 			right -4px
 			bottom -4px
 			left -4px
-			border 2px dashed rgba($theme-color, 0.3)
+			border 2px dashed var(--primaryAlpha03)
 			border-radius 4px
 
 	&[data-draghover]
-		background isDark ? rgba(darken($theme-color, 10%), 0.2) : lighten($theme-color, 90%)
+		//background isDark ? rgba(var(--primaryDarken10), 0.2) : var(--primaryLighten90)
 
 	> .name
 		margin 0
 		font-size 0.9em
-		color isDark ? #fff : darken($theme-color, 30%)
+		color isDark ? #fff : var(--primaryDarken30)
 
 		> [data-fa]
 			margin-right 4px
diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index cb289027d4..ccfdb3159f 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -585,7 +585,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 
@@ -697,8 +697,8 @@ root(isDark)
 			z-index 128
 			top 0
 			left 0
-			border solid 1px $theme-color
-			background rgba($theme-color, 0.5)
+			border solid 1px var(--primary)
+			background var(--primaryAlpha05)
 			pointer-events none
 
 		> .contents
@@ -769,7 +769,7 @@ root(isDark)
 		top 38px
 		width 100%
 		height calc(100% - 38px)
-		border dashed 2px rgba($theme-color, 0.5)
+		border dashed 2px var(--primaryAlpha05)
 		pointer-events none
 
 	> .mk-uploader
diff --git a/src/client/app/desktop/views/components/follow-button.vue b/src/client/app/desktop/views/components/follow-button.vue
index 1db4b0cfa4..014b536f59 100644
--- a/src/client/app/desktop/views/components/follow-button.vue
+++ b/src/client/app/desktop/views/components/follow-button.vue
@@ -101,7 +101,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display block
@@ -126,7 +126,7 @@ root(isDark)
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:not(.active)
@@ -143,20 +143,20 @@ root(isDark)
 			border-color isDark ? #151a1d : #dcdcdc
 
 	&.active
-		color $theme-color-foreground
-		background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-		border solid 1px lighten($theme-color, 15%)
+		color var(--primaryForeground)
+		background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+		border solid 1px var(--primaryLighten15)
 
 		&:not(:disabled)
 			font-weight bold
 
 		&:hover:not(:disabled)
-			background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-			border-color $theme-color
+			background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+			border-color var(--primary)
 
 		&:active:not(:disabled)
-			background $theme-color
-			border-color $theme-color
+			background var(--primary)
+			border-color var(--primary)
 
 	&.wait
 		cursor wait !important
diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index c9b868422e..3d77da52d9 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -247,7 +247,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display block
@@ -292,15 +292,15 @@ root(isDark)
 			padding 0 16px
 			line-height 48px
 			text-decoration none
-			color $theme-color-foreground
-			background $theme-color
+			color var(--primaryForeground)
+			background var(--primary)
 			transition background 0.1s ease
 
 			&:hover
-				background lighten($theme-color, 10%)
+				background var(--primaryLighten10)
 
 			&:active
-				background darken($theme-color, 10%)
+				background var(--primaryDarken10)
 				transition background 0s ease
 
 			> [data-fa]
diff --git a/src/client/app/desktop/views/components/input-dialog.vue b/src/client/app/desktop/views/components/input-dialog.vue
index cf7c09ea56..976e897fe8 100644
--- a/src/client/app/desktop/views/components/input-dialog.vue
+++ b/src/client/app/desktop/views/components/input-dialog.vue
@@ -76,7 +76,7 @@ export default Vue.extend({
 
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .header
 	> [data-fa]
@@ -96,25 +96,25 @@ export default Vue.extend({
 		color #333
 		background #fff
 		outline none
-		border solid 1px rgba($theme-color, 0.1)
+		border solid 1px var(--primaryAlpha01)
 		border-radius 4px
 		transition border-color .3s ease
 
 		&:hover
-			border-color rgba($theme-color, 0.2)
+			border-color var(--primaryAlpha02)
 			transition border-color .1s ease
 
 		&:focus
-			color $theme-color
-			border-color rgba($theme-color, 0.5)
+			color var(--primary)
+			border-color var(--primaryAlpha05)
 			transition border-color 0s ease
 
 		&::-webkit-input-placeholder
-			color rgba($theme-color, 0.3)
+			color var(--primaryAlpha03)
 
 .actions
 	height 72px
-	background lighten($theme-color, 95%)
+	background var(--primaryLighten95)
 
 .ok
 .cancel
@@ -139,7 +139,7 @@ export default Vue.extend({
 			right -5px
 			bottom -5px
 			left -5px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 8px
 
 	&:disabled
@@ -148,20 +148,20 @@ export default Vue.extend({
 
 .ok
 	right 16px
-	color $theme-color-foreground
-	background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-	border solid 1px lighten($theme-color, 15%)
+	color var(--primaryForeground)
+	background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+	border solid 1px var(--primaryLighten15)
 
 	&:not(:disabled)
 		font-weight bold
 
 	&:hover:not(:disabled)
-		background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-		border-color $theme-color
+		background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+		border-color var(--primary)
 
 	&:active:not(:disabled)
-		background $theme-color
-		border-color $theme-color
+		background var(--primary)
+		border-color var(--primary)
 
 .cancel
 	right 148px
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 80faae0d42..f004ca88ee 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -225,7 +225,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	overflow hidden
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index ac2c1ce97f..a91212221b 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -317,7 +317,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	margin 0
@@ -348,7 +348,7 @@ root(isDark)
 			right 2px
 			bottom 2px
 			left 2px
-			border 2px solid rgba($theme-color, 0.3)
+			border 2px solid var(--primaryAlpha03)
 			border-radius 4px
 
 	> .renote
@@ -557,7 +557,7 @@ root(isDark)
 		padding 0 4px
 		margin-left 4px
 		font-size 80%
-		color $theme-color-foreground
-		background $theme-color
+		color var(--primaryForeground)
+		background var(--primary)
 		border-radius 4px
 </style>
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index e6267ed204..2e3ffd171b 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -216,7 +216,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	.transition
@@ -250,7 +250,7 @@ root(isDark)
 		position sticky
 		z-index 100
 		height 3px
-		background $theme-color
+		background var(--primary)
 
 	> footer
 		> button
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 8db85aeaca..fdd6e75318 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -434,12 +434,12 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display block
 	padding 16px
-	background isDark ? #282C37 : lighten($theme-color, 95%)
+	background isDark ? #282C37 : var(--primaryLighten95)
 
 	&:after
 		content ""
@@ -456,23 +456,23 @@ root(isDark)
 			color isDark ? #fff : #333
 			background isDark ? #191d23 : #fff
 			outline none
-			border solid 1px rgba($theme-color, 0.1)
+			border solid 1px var(--primaryAlpha01)
 			border-radius 4px
 			transition border-color .2s ease
 
 			&:hover
-				border-color rgba($theme-color, 0.2)
+				border-color var(--primaryAlpha02)
 				transition border-color .1s ease
 
 			&:focus
-				border-color rgba($theme-color, 0.5)
+				border-color var(--primaryAlpha05)
 				transition border-color 0s ease
 
 			&:disabled
 				opacity 0.5
 
 			&::-webkit-input-placeholder
-				color rgba($theme-color, 0.3)
+				color var(--primaryAlpha03)
 
 		> input
 			margin-bottom 8px
@@ -486,17 +486,17 @@ root(isDark)
 			&:hover
 				& + *
 				& + * + *
-					border-color rgba($theme-color, 0.2)
+					border-color var(--primaryAlpha02)
 					transition border-color .1s ease
 
 			&:focus
 				& + *
 				& + * + *
-					border-color rgba($theme-color, 0.5)
+					border-color var(--primaryAlpha05)
 					transition border-color 0s ease
 
 			&.with
-				border-bottom solid 1px rgba($theme-color, 0.1) !important
+				border-bottom solid 1px var(--primaryAlpha01) !important
 				border-radius 4px 4px 0 0
 
 		> .visibleUsers
@@ -514,7 +514,7 @@ root(isDark)
 			font-size 14px
 
 			> b
-				color isDark ? #9baec8 : darken($theme-color, 20%)
+				color isDark ? #9baec8 : var(--primaryDarken20)
 
 			> *
 				margin-right 8px
@@ -523,14 +523,14 @@ root(isDark)
 		> .files
 			margin 0
 			padding 0
-			background isDark ? #181b23 : lighten($theme-color, 98%)
-			border solid 1px rgba($theme-color, 0.1)
+			background isDark ? #181b23 : var(--primaryLighten98)
+			border solid 1px var(--primaryAlpha01)
 			border-top none
 			border-radius 0 0 4px 4px
 			transition border-color .3s ease
 
 			&.with
-				border-bottom solid 1px rgba($theme-color, 0.1) !important
+				border-bottom solid 1px var(--primaryAlpha01) !important
 				border-radius 0
 
 			> .remain
@@ -540,7 +540,7 @@ root(isDark)
 				right 8px
 				margin 0
 				padding 0
-				color rgba($theme-color, 0.4)
+				color var(--primaryAlpha04)
 
 			> div
 				padding 4px
@@ -574,8 +574,8 @@ root(isDark)
 						cursor pointer
 
 		> .mk-poll-editor
-			background isDark ? #181b23 : lighten($theme-color, 98%)
-			border solid 1px rgba($theme-color, 0.1)
+			background isDark ? #181b23 : var(--primaryLighten98)
+			border solid 1px var(--primaryAlpha01)
 			border-top none
 			border-radius 0 0 4px 4px
 			transition border-color .3s ease
@@ -583,7 +583,7 @@ root(isDark)
 	> .mk-uploader
 		margin 8px 0 0 0
 		padding 8px
-		border solid 1px rgba($theme-color, 0.2)
+		border solid 1px var(--primaryAlpha02)
 		border-radius 4px
 
 	input[type='file']
@@ -600,22 +600,22 @@ root(isDark)
 		width 110px
 		height 40px
 		font-size 1em
-		color $theme-color-foreground
-		background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
+		color var(--primaryForeground)
+		background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
 		outline none
-		border solid 1px lighten($theme-color, 15%)
+		border solid 1px var(--primaryLighten15)
 		border-radius 4px
 
 		&:not(:disabled)
 			font-weight bold
 
 		&:hover:not(:disabled)
-			background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-			border-color $theme-color
+			background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+			border-color var(--primary)
 
 		&:active:not(:disabled)
-			background $theme-color
-			border-color $theme-color
+			background var(--primary)
+			border-color var(--primary)
 
 		&:focus
 			&:after
@@ -626,7 +626,7 @@ root(isDark)
 				right -5px
 				bottom -5px
 				left -5px
-				border 2px solid rgba($theme-color, 0.3)
+				border 2px solid var(--primaryAlpha03)
 				border-radius 8px
 
 		&:disabled
@@ -636,13 +636,13 @@ root(isDark)
 		&.wait
 			background linear-gradient(
 				45deg,
-				darken($theme-color, 10%) 25%,
-				$theme-color              25%,
-				$theme-color              50%,
-				darken($theme-color, 10%) 50%,
-				darken($theme-color, 10%) 75%,
-				$theme-color              75%,
-				$theme-color
+				var(--primaryDarken10) 25%,
+				var(--primary)              25%,
+				var(--primary)              50%,
+				var(--primaryDarken10) 50%,
+				var(--primaryDarken10) 75%,
+				var(--primary)              75%,
+				var(--primary)
 			)
 			background-size 32px 32px
 			animation stripe-bg 1.5s linear infinite
@@ -661,7 +661,7 @@ root(isDark)
 		right 138px
 		margin 0
 		line-height 40px
-		color rgba($theme-color, 0.5)
+		color var(--primaryAlpha05)
 
 		&.over
 			color #ec3828
@@ -679,7 +679,7 @@ root(isDark)
 		width 40px
 		height 40px
 		font-size 1em
-		color isDark ? $theme-color : rgba($theme-color, 0.5)
+		color isDark ? var(--primary) : var(--primaryAlpha05)
 		background transparent
 		outline none
 		border solid 1px transparent
@@ -687,12 +687,12 @@ root(isDark)
 
 		&:hover
 			background transparent
-			border-color isDark ? rgba($theme-color, 0.5) : rgba($theme-color, 0.3)
+			border-color isDark ? var(--primaryAlpha05) : var(--primaryAlpha03)
 
 		&:active
-			color rgba($theme-color, 0.6)
-			background isDark ? transparent : linear-gradient(to bottom, lighten($theme-color, 80%) 0%, lighten($theme-color, 90%) 100%)
-			border-color rgba($theme-color, 0.5)
+			color var(--primaryAlpha06)
+			background isDark ? transparent : linear-gradient(to bottom, var(--primaryLighten80) 0%, var(--primaryLighten90) 100%)
+			border-color var(--primaryAlpha05)
 			box-shadow 0 2px 4px rgba(#000, 0.15) inset
 
 		&:focus
@@ -704,7 +704,7 @@ root(isDark)
 				right -5px
 				bottom -5px
 				left -5px
-				border 2px solid rgba($theme-color, 0.3)
+				border 2px solid var(--primaryAlpha03)
 				border-radius 8px
 
 	> .dropzone
@@ -713,7 +713,7 @@ root(isDark)
 		top 0
 		width 100%
 		height 100%
-		border dashed 2px rgba($theme-color, 0.5)
+		border dashed 2px var(--primaryAlpha05)
 		pointer-events none
 
 .mk-post-form[data-darkmode]
diff --git a/src/client/app/desktop/views/components/progress-dialog.vue b/src/client/app/desktop/views/components/progress-dialog.vue
index cc25ba8e30..feda6050bc 100644
--- a/src/client/app/desktop/views/components/progress-dialog.vue
+++ b/src/client/app/desktop/views/components/progress-dialog.vue
@@ -37,7 +37,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .body
 	padding 18px 24px 24px 24px
@@ -53,7 +53,7 @@ export default Vue.extend({
 	margin 0 0 4px 0
 	text-align center
 	line-height 16px
-	color rgba($theme-color, 0.7)
+	color var(--primaryAlpha07)
 
 	&:after
 		content '%'
@@ -69,21 +69,21 @@ export default Vue.extend({
 	overflow hidden
 
 	&::-webkit-progress-value
-		background $theme-color
+		background var(--primary)
 
 	&::-webkit-progress-bar
-		background rgba($theme-color, 0.1)
+		background var(--primaryAlpha01)
 
 .waiting
 	background linear-gradient(
 		45deg,
-		lighten($theme-color, 30%) 25%,
-		$theme-color               25%,
-		$theme-color               50%,
-		lighten($theme-color, 30%) 50%,
-		lighten($theme-color, 30%) 75%,
-		$theme-color               75%,
-		$theme-color
+		var(--primaryLighten30) 25%,
+		var(--primary)               25%,
+		var(--primary)               50%,
+		var(--primaryLighten30) 50%,
+		var(--primaryLighten30) 75%,
+		var(--primary)               75%,
+		var(--primary)
 	)
 	background-size 32px 32px
 	animation progress-dialog-tag-progress-waiting 1.5s linear infinite
diff --git a/src/client/app/desktop/views/components/renote-form.vue b/src/client/app/desktop/views/components/renote-form.vue
index c5192ecaac..ad23740f13 100644
--- a/src/client/app/desktop/views/components/renote-form.vue
+++ b/src/client/app/desktop/views/components/renote-form.vue
@@ -57,7 +57,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 
@@ -66,7 +66,7 @@ root(isDark)
 
 	> footer
 		height 72px
-		background isDark ? #313543 : lighten($theme-color, 95%)
+		background isDark ? #313543 : var(--primaryLighten95)
 
 		> .quote
 			position absolute
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index cf10ea0f56..4b8ee3c9cd 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -492,7 +492,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
@@ -524,7 +524,7 @@ root(isDark)
 
 			&.active
 				margin-left 8px
-				color $theme-color !important
+				color var(--primary) !important
 
 	> .pages
 		width 100%
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index ff73bde95c..aef873dd11 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -215,7 +215,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-timeline-core
 	> .mk-friends-maker
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index c008c175de..32ed89ef0b 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -175,7 +175,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	background isDark ? #282C37 : #fff
@@ -207,7 +207,7 @@ root(isDark)
 					top -4px
 					right 4px
 					font-size 10px
-					color $theme-color
+					color var(--primary)
 
 				&:hover
 					color isDark ? #b2c1d5 : #aaa
@@ -216,7 +216,7 @@ root(isDark)
 					color isDark ? #b2c1d5 : #999
 
 				&[data-active]
-					color $theme-color
+					color var(--primary)
 					cursor default
 
 					&:before
@@ -227,7 +227,7 @@ root(isDark)
 						left 0
 						width 100%
 						height 2px
-						background $theme-color
+						background var(--primary)
 
 		> span
 			display inline-block
@@ -237,7 +237,7 @@ root(isDark)
 			user-select none
 
 			&[data-active]
-				color $theme-color
+				color var(--primary)
 				cursor default
 				font-weight bold
 
@@ -249,7 +249,7 @@ root(isDark)
 					left -8px
 					width calc(100% + 16px)
 					height 2px
-					background $theme-color
+					background var(--primary)
 
 			&:not([data-active])
 				color isDark ? #9aa2a7 : #6f7477
diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index 1e8a45beaf..301efeb3e2 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -127,7 +127,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	> .header
@@ -249,8 +249,8 @@ root(isDark)
 							padding 2px 8px
 							font-size 90%
 							font-style normal
-							background $theme-color
-							color $theme-color-foreground
+							background var(--primary)
+							color var(--primaryForeground)
 							border-radius 8px
 
 					> [data-fa]:first-child
@@ -269,11 +269,11 @@ root(isDark)
 
 					&:hover, &:active
 						text-decoration none
-						background $theme-color
-						color $theme-color-foreground
+						background var(--primary)
+						color var(--primaryForeground)
 
 					&:active
-						background darken($theme-color, 10%)
+						background var(--primaryDarken10)
 
 					&.signout
 						$color = #e64137
diff --git a/src/client/app/desktop/views/components/ui.header.nav.vue b/src/client/app/desktop/views/components/ui.header.nav.vue
index 6292b764c6..f41d4b8ecf 100644
--- a/src/client/app/desktop/views/components/ui.header.nav.vue
+++ b/src/client/app/desktop/views/components/ui.header.nav.vue
@@ -95,7 +95,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display inline-block
@@ -120,7 +120,7 @@ root(isDark)
 
 			&.active
 				> a
-					border-bottom solid 3px $theme-color
+					border-bottom solid 3px var(--primary)
 
 			> a
 				display inline-block
@@ -147,7 +147,7 @@ root(isDark)
 				> [data-fa]:last-child
 					margin-left 5px
 					font-size 10px
-					color $theme-color
+					color var(--primary)
 
 					@media (max-width 1100px)
 						margin-left -5px
diff --git a/src/client/app/desktop/views/components/ui.header.notifications.vue b/src/client/app/desktop/views/components/ui.header.notifications.vue
index 74dcd4111f..f9b68fa0e9 100644
--- a/src/client/app/desktop/views/components/ui.header.notifications.vue
+++ b/src/client/app/desktop/views/components/ui.header.notifications.vue
@@ -61,7 +61,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 
@@ -93,7 +93,7 @@ root(isDark)
 			margin-left -5px
 			vertical-align super
 			font-size 10px
-			color $theme-color
+			color var(--primary)
 
 	> .pop
 		$bgcolor = isDark ? #282c37 : #fff
diff --git a/src/client/app/desktop/views/components/ui.header.post.vue b/src/client/app/desktop/views/components/ui.header.post.vue
index 3665488542..9527792a34 100644
--- a/src/client/app/desktop/views/components/ui.header.post.vue
+++ b/src/client/app/desktop/views/components/ui.header.post.vue
@@ -17,7 +17,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .note
 	display inline-block
@@ -33,8 +33,8 @@ export default Vue.extend({
 		font-size 1.2em
 		font-weight normal
 		text-decoration none
-		color $theme-color-foreground
-		background $theme-color !important
+		color var(--primaryForeground)
+		background var(--primary) !important
 		outline none
 		border none
 		border-radius 4px
@@ -45,10 +45,10 @@ export default Vue.extend({
 			pointer-events none
 
 		&:hover
-			background lighten($theme-color, 10%) !important
+			background var(--primaryLighten10) !important
 
 		&:active
-			background darken($theme-color, 10%) !important
+			background var(--primaryDarken10) !important
 			transition background 0s ease
 
 </style>
diff --git a/src/client/app/desktop/views/components/ui.header.search.vue b/src/client/app/desktop/views/components/ui.header.search.vue
index 9a36e52fcc..d5794dc882 100644
--- a/src/client/app/desktop/views/components/ui.header.search.vue
+++ b/src/client/app/desktop/views/components/ui.header.search.vue
@@ -28,7 +28,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 root(isDark)
 	> [data-fa]
 		display block
@@ -67,7 +67,7 @@ root(isDark)
 			background isDark ? rgba(#fff, 0.04) : rgba(#000, 0.08)
 
 		&:focus
-			box-shadow 0 0 0 2px rgba($theme-color, 0.5) !important
+			box-shadow 0 0 0 2px var(--primaryAlpha05) !important
 
 .search[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index f6d6d68a7f..f988bb21e9 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -83,7 +83,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	position absolute
@@ -151,7 +151,7 @@ root(isDark)
 
 			> span
 				font-size 1em
-				color $theme-color
+				color var(--primary)
 
 	> .mk-follow-button
 		position absolute
diff --git a/src/client/app/desktop/views/components/users-list.vue b/src/client/app/desktop/views/components/users-list.vue
index 05e2f4e5b3..1316f277b7 100644
--- a/src/client/app/desktop/views/components/users-list.vue
+++ b/src/client/app/desktop/views/components/users-list.vue
@@ -69,7 +69,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-users-list
 	height 100%
@@ -104,8 +104,8 @@ export default Vue.extend({
 
 				&[data-active]
 					font-weight bold
-					color $theme-color
-					border-color $theme-color
+					color var(--primary)
+					border-color var(--primary)
 					cursor default
 
 				> span
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index 5eece3795f..2b01c24ca8 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -463,7 +463,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display block
@@ -494,9 +494,9 @@ root(isDark)
 			&:not([data-is-modal])
 				> .body
 					if isDark
-						box-shadow 0 0 0px 1px rgba($theme-color, 0.5), 0 2px 12px 0 rgba(#000, 0.5)
+						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 12px 0 rgba(#000, 0.5)
 					else
-						box-shadow 0 0 0px 1px rgba($theme-color, 0.5), 0 2px 6px 0 rgba(#000, 0.2)
+						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 6px 0 rgba(#000, 0.2)
 
 		> .handle
 			$size = 8px
diff --git a/src/client/app/desktop/views/pages/admin/admin.announcements.vue b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
index 532400deb2..272016b3f9 100644
--- a/src/client/app/desktop/views/pages/admin/admin.announcements.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
@@ -31,7 +31,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .qldxjjsrseehkusjuoooapmsprvfrxyl
 	textarea
diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index 5d0f6d451e..f5734012bd 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -95,7 +95,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .obdskegsannmntldydackcpzezagxqfy
 	> .stats
@@ -112,7 +112,7 @@ export default Vue.extend({
 
 			> *:first-child
 				display block
-				color $theme-color
+				color var(--primary)
 
 			> *:last-child
 				font-size 70%
diff --git a/src/client/app/desktop/views/pages/admin/admin.hashtags.vue b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
index c6bf20361f..f491b85959 100644
--- a/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
@@ -31,7 +31,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .jdnqwkzlnxcfftthoybjxrebyolvoucw
 	textarea
diff --git a/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue b/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
index 8d8e37e181..32295e3795 100644
--- a/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 header
 	margin 10px 0
diff --git a/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue b/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
index ec423969be..d6905fe9c0 100644
--- a/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 header
 	margin 10px 0
diff --git a/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue b/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
index e8204e69f4..d0cf635a98 100644
--- a/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 header
 	margin 10px 0
diff --git a/src/client/app/desktop/views/pages/admin/admin.verify-user.vue b/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
index 91fb04af80..9c0b0209b7 100644
--- a/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 header
 	margin 10px 0
diff --git a/src/client/app/desktop/views/pages/admin/admin.vue b/src/client/app/desktop/views/pages/admin/admin.vue
index 510252b447..b874915f05 100644
--- a/src/client/app/desktop/views/pages/admin/admin.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.vue
@@ -70,7 +70,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus">
-@import '~const.styl'
+
 
 .mk-admin
 	display flex
@@ -106,7 +106,7 @@ export default Vue.extend({
 
 				&.active
 					margin-left 8px
-					color $theme-color !important
+					color var(--primary) !important
 
 	> main
 		width 100%
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 04aa5e82d1..10454b1cc6 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -269,7 +269,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$header-height = 42px
@@ -283,10 +283,10 @@ root(isDark)
 	overflow hidden
 
 	&.draghover
-		box-shadow 0 0 0 2px rgba($theme-color, 0.8)
+		box-shadow 0 0 0 2px var(--primaryAlpha08)
 
 	&.dragging
-		box-shadow 0 0 0 2px rgba($theme-color, 0.4)
+		box-shadow 0 0 0 2px var(--primaryAlpha04)
 
 	&.dropready
 		*
@@ -329,7 +329,7 @@ root(isDark)
 			pointer-events none
 
 		&.indicate
-			box-shadow 0 3px 0 0 $theme-color
+			box-shadow 0 3px 0 0 var(--primary)
 
 		> span
 			[data-fa]
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 99274b0f41..82e816cc8c 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -214,7 +214,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 mediaRoot(isDark)
 	font-size 13px
@@ -368,8 +368,8 @@ root(isDark)
 							padding 0 4px
 							margin-left 4px
 							font-size 80%
-							color $theme-color-foreground
-							background $theme-color
+							color var(--primaryForeground)
+							background var(--primary)
 							border-radius 4px
 
 					.mk-url-preview
@@ -430,7 +430,7 @@ root(isDark)
 						color #999
 
 					&.reacted
-						color $theme-color
+						color var(--primary)
 
 .zyjjkidcqjnlegkqebitfviomuqmseqk[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index 2e7e30f12a..58f13dd57b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -195,7 +195,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	.transition
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 810770a022..48c80c82c4 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -221,7 +221,7 @@ export default Vue.extend({
 </style>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
diff --git a/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue b/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
index 15397232e0..fe190bf892 100644
--- a/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
@@ -135,7 +135,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	.gqpwvtwtprsbmnssnbicggtwqhmylhnq
diff --git a/src/client/app/desktop/views/pages/selectdrive.vue b/src/client/app/desktop/views/pages/selectdrive.vue
index c846f2418f..b82ed0a208 100644
--- a/src/client/app/desktop/views/pages/selectdrive.vue
+++ b/src/client/app/desktop/views/pages/selectdrive.vue
@@ -54,7 +54,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mkp-selectdrive
 	display block
@@ -72,7 +72,7 @@ export default Vue.extend({
 		left 0
 		width 100%
 		height 72px
-		background lighten($theme-color, 95%)
+		background var(--primaryLighten95)
 
 		.upload
 			display inline-block
@@ -85,7 +85,7 @@ export default Vue.extend({
 			width 40px
 			height 40px
 			font-size 1em
-			color rgba($theme-color, 0.5)
+			color var(--primaryAlpha05)
 			background transparent
 			outline none
 			border solid 1px transparent
@@ -93,13 +93,13 @@ export default Vue.extend({
 
 			&:hover
 				background transparent
-				border-color rgba($theme-color, 0.3)
+				border-color var(--primaryAlpha03)
 
 			&:active
-				color rgba($theme-color, 0.6)
+				color var(--primaryAlpha06)
 				background transparent
-				border-color rgba($theme-color, 0.5)
-				box-shadow 0 2px 4px rgba(darken($theme-color, 50%), 0.15) inset
+				border-color var(--primaryAlpha05)
+				//box-shadow 0 2px 4px rgba(var(--primaryDarken50), 0.15) inset
 
 			&:focus
 				&:after
@@ -110,7 +110,7 @@ export default Vue.extend({
 					right -5px
 					bottom -5px
 					left -5px
-					border 2px solid rgba($theme-color, 0.3)
+					border 2px solid var(--primaryAlpha03)
 					border-radius 8px
 
 		.ok
@@ -136,7 +136,7 @@ export default Vue.extend({
 					right -5px
 					bottom -5px
 					left -5px
-					border 2px solid rgba($theme-color, 0.3)
+					border 2px solid var(--primaryAlpha03)
 					border-radius 8px
 
 			&:disabled
@@ -145,20 +145,20 @@ export default Vue.extend({
 
 		.ok
 			right 16px
-			color $theme-color-foreground
-			background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
-			border solid 1px lighten($theme-color, 15%)
+			color var(--primaryForeground)
+			background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+			border solid 1px var(--primaryLighten15)
 
 			&:not(:disabled)
 				font-weight bold
 
 			&:hover:not(:disabled)
-				background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
-				border-color $theme-color
+				background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
+				border-color var(--primary)
 
 			&:active:not(:disabled)
-				background $theme-color
-				border-color $theme-color
+				background var(--primary)
+				border-color var(--primary)
 
 		.cancel
 			right 148px
diff --git a/src/client/app/desktop/views/pages/stats/stats.vue b/src/client/app/desktop/views/pages/stats/stats.vue
index 7a4e4ab5ce..219885fb9e 100644
--- a/src/client/app/desktop/views/pages/stats/stats.vue
+++ b/src/client/app/desktop/views/pages/stats/stats.vue
@@ -34,7 +34,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus">
-@import '~const.styl'
+
 
 .tcrwdhwpuxrwmcttxjcsehgpagpstqey
 	width 100%
@@ -54,7 +54,7 @@ export default Vue.extend({
 
 			> *:first-child
 				display block
-				color $theme-color
+				color var(--primary)
 
 			> *:last-child
 				font-size 70%
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index f727910e77..30dc74212d 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -100,7 +100,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	background isDark ? #282C37 : #fff
@@ -208,7 +208,7 @@ root(isDark)
 					margin-right 4px
 					font-size 1rem
 					font-weight bold
-					color $theme-color
+					color var(--primary)
 
 .header[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/pages/user/user.timeline.vue b/src/client/app/desktop/views/pages/user/user.timeline.vue
index be6adaac93..3cde6cc10c 100644
--- a/src/client/app/desktop/views/pages/user/user.timeline.vue
+++ b/src/client/app/desktop/views/pages/user/user.timeline.vue
@@ -112,7 +112,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	background isDark ? #282C37 : #fff
@@ -133,7 +133,7 @@ root(isDark)
 			user-select none
 
 			&[data-active]
-				color $theme-color
+				color var(--primary)
 				cursor default
 				font-weight bold
 
@@ -145,7 +145,7 @@ root(isDark)
 					left -8px
 					width calc(100% + 16px)
 					height 2px
-					background $theme-color
+					background var(--primary)
 
 			&:not([data-active])
 				color isDark ? #9aa2a7 : #6f7477
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 7f5f4b9c37..05c32a7bd1 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -303,7 +303,7 @@ export default Vue.extend({
 </style>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display flex
@@ -385,7 +385,7 @@ root(isDark)
 			> .main
 				grid-row 1
 				grid-column 1 / 3
-				border-top solid 5px $theme-color
+				border-top solid 5px var(--primary)
 
 				> div
 					padding 32px
@@ -426,7 +426,7 @@ root(isDark)
 							cursor pointer
 
 							&:hover
-								color $theme-color
+								color var(--primary)
 
 					> .char
 						display block
diff --git a/src/client/app/desktop/views/widgets/post-form.vue b/src/client/app/desktop/views/widgets/post-form.vue
index 19a2790d95..a763f4d17c 100644
--- a/src/client/app/desktop/views/widgets/post-form.vue
+++ b/src/client/app/desktop/views/widgets/post-form.vue
@@ -68,7 +68,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mkw-post-form
 	background #fff
@@ -107,8 +107,8 @@ export default define({
 		margin 0
 		padding 0 10px
 		height 28px
-		color $theme-color-foreground
-		background $theme-color !important
+		color var(--primaryForeground)
+		background var(--primary) !important
 		outline none
 		border none
 		border-radius 4px
@@ -116,10 +116,10 @@ export default define({
 		cursor pointer
 
 		&:hover
-			background lighten($theme-color, 10%) !important
+			background var(--primaryLighten10) !important
 
 		&:active
-			background darken($theme-color, 10%) !important
+			background var(--primaryDarken10) !important
 			transition background 0s ease
 
 </style>
diff --git a/src/client/app/mobile/views/components/dialog.vue b/src/client/app/mobile/views/components/dialog.vue
index 6a0d74c752..fff44a28c3 100644
--- a/src/client/app/mobile/views/components/dialog.vue
+++ b/src/client/app/mobile/views/components/dialog.vue
@@ -91,7 +91,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-dialog
 	> .bg
@@ -145,20 +145,20 @@ export default Vue.extend({
 					margin 0 0.375em
 
 				&:hover
-					color $theme-color
+					color var(--primary)
 
 				&:active
-					color darken($theme-color, 10%)
+					color var(--primaryDarken10)
 					transition color 0s ease
 
 </style>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .header
 	margin 0 0 1em 0
-	color $theme-color
+	color var(--primary)
 	// color #43A4EC
 	font-weight bold
 
diff --git a/src/client/app/mobile/views/components/drive.file.vue b/src/client/app/mobile/views/components/drive.file.vue
index 4375cfdd7b..ba58cf59a0 100644
--- a/src/client/app/mobile/views/components/drive.file.vue
+++ b/src/client/app/mobile/views/components/drive.file.vue
@@ -63,7 +63,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	display block
@@ -150,7 +150,7 @@ root(isDark)
 					color #bf4633
 
 	&[data-is-selected]
-		background $theme-color
+		background var(--primary)
 
 		&, *
 			color #fff !important
diff --git a/src/client/app/mobile/views/components/follow-button.vue b/src/client/app/mobile/views/components/follow-button.vue
index ff7260edb5..cff830d998 100644
--- a/src/client/app/mobile/views/components/follow-button.vue
+++ b/src/client/app/mobile/views/components/follow-button.vue
@@ -93,7 +93,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-follow-button
 	display block
@@ -105,29 +105,29 @@ export default Vue.extend({
 	line-height 36px
 	font-size 14px
 	font-weight bold
-	color $theme-color
+	color var(--primary)
 	background transparent
 	outline none
-	border solid 1px $theme-color
+	border solid 1px var(--primary)
 	border-radius 36px
 
 	&:hover
-		background rgba($theme-color, 0.1)
+		background var(--primaryAlpha01)
 
 	&:active
-		background rgba($theme-color, 0.2)
+		background var(--primaryAlpha02)
 
 	&.active
-		color $theme-color-foreground
-		background $theme-color
+		color var(--primaryForeground)
+		background var(--primary)
 
 		&:hover
-			background lighten($theme-color, 10%)
-			border-color lighten($theme-color, 10%)
+			background var(--primaryLighten10)
+			border-color var(--primaryLighten10)
 
 		&:active
-			background darken($theme-color, 10%)
-			border-color darken($theme-color, 10%)
+			background var(--primaryDarken10)
+			border-color var(--primaryDarken10)
 
 	&.wait
 		cursor wait !important
diff --git a/src/client/app/mobile/views/components/mute-button.vue b/src/client/app/mobile/views/components/mute-button.vue
index 3cb568615d..316fbda8f1 100644
--- a/src/client/app/mobile/views/components/mute-button.vue
+++ b/src/client/app/mobile/views/components/mute-button.vue
@@ -41,11 +41,11 @@ export default Vue.extend({
 
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-mute-button
   display block
-  user-select none 
+  user-select none
   cursor pointer
   padding 0 16px
   margin 0
@@ -53,27 +53,27 @@ export default Vue.extend({
   line-height 36px
   font-size 14px
   font-weight bold
-  color $theme-color
+  color var(--primary)
   background transparent
   outline none
-  border solid 1px $theme-color
+  border solid 1px var(--primary)
   border-radius 36px
 
   &:hover
-    background rgba($theme-color, 0.1)
+    background var(--primaryAlpha01)
 
   &:active
-    background rgba($theme-color, 0.2)
+    background var(--primaryAlpha02)
 
   &.active
-    color $theme-color-foreground
-    background $theme-color
+    color var(--primaryForeground)
+    background var(--primary)
 
     &:hover
-      background lighten($theme-color, 10%)
-      border-color lighten($theme-color, 10%)
+      background var(--primaryLighten10)
+      border-color var(--primaryLighten10)
     &:active
-      background darken($theme-color, 10%)
-      border-color darken($theme-color, 10%)
+      background var(--primaryDarken10)
+      border-color var(--primaryDarken10)
 
 </style>
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 68be9f8ac4..6daf375ed2 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -223,7 +223,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	overflow hidden
@@ -422,7 +422,7 @@ root(isDark)
 					color #999
 
 				&.reacted
-					color $theme-color
+					color var(--primary)
 
 	> .replies
 		> *
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 0ce72cab11..2bfd8f8acc 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -228,7 +228,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	font-size 12px
@@ -395,8 +395,8 @@ root(isDark)
 							padding 0 4px
 							margin-left 4px
 							font-size 80%
-							color $theme-color-foreground
-							background $theme-color
+							color var(--primaryForeground)
+							background var(--primary)
 							border-radius 4px
 
 					.mk-url-preview
@@ -457,7 +457,7 @@ root(isDark)
 						color #999
 
 					&.reacted
-						color $theme-color
+						color var(--primary)
 
 .note[data-darkmode]
 	root(true)
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 401df3ae5b..83674a33dc 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -217,7 +217,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	overflow hidden
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 1294273a2a..742163696e 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -324,7 +324,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	max-width 500px
@@ -376,8 +376,8 @@ root(isDark)
 					padding 0 16px
 					line-height 34px
 					vertical-align bottom
-					color $theme-color-foreground
-					background $theme-color
+					color var(--primaryForeground)
+					background var(--primary)
 					border-radius 4px
 
 					&:disabled
diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index 15c8299c2e..b859c22887 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -118,7 +118,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$height = 48px
@@ -134,7 +134,7 @@ root(isDark)
 
 	> .indicator
 		height 3px
-		background $theme-color
+		background var(--primary)
 
 	> .warn
 		display block
@@ -216,7 +216,7 @@ root(isDark)
 				left 8px
 				pointer-events none
 				font-size 10px
-				color $theme-color
+				color var(--primary)
 
 			> button:last-child
 				display block
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index c3ae05fef6..29dcf18021 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -121,7 +121,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$color = isDark ? #c9d2e0 : #777
@@ -198,11 +198,11 @@ root(isDark)
 				text-decoration none
 
 				&[data-active]
-					color $theme-color-foreground
-					background $theme-color
+					color var(--primaryForeground)
+					background var(--primary)
 
 					> [data-fa]:last-child
-						color $theme-color-foreground
+						color var(--primaryForeground)
 
 				> [data-fa]:first-child
 					margin-right 0.5em
@@ -212,7 +212,7 @@ root(isDark)
 				> [data-fa].circle
 					margin-left 6px
 					font-size 10px
-					color $theme-color
+					color var(--primary)
 
 				> [data-fa]:last-child
 					position absolute
diff --git a/src/client/app/mobile/views/components/users-list.vue b/src/client/app/mobile/views/components/users-list.vue
index a57b821293..f06f5245b8 100644
--- a/src/client/app/mobile/views/components/users-list.vue
+++ b/src/client/app/mobile/views/components/users-list.vue
@@ -65,7 +65,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 .mk-users-list
 
@@ -87,8 +87,8 @@ export default Vue.extend({
 
 			&[data-active]
 				font-weight bold
-				color $theme-color
-				border-color $theme-color
+				color var(--primary)
+				border-color var(--primary)
 
 			> span
 				display inline-block
diff --git a/src/client/app/mobile/views/pages/favorites.vue b/src/client/app/mobile/views/pages/favorites.vue
index 53512e804c..a25f70147b 100644
--- a/src/client/app/mobile/views/pages/favorites.vue
+++ b/src/client/app/mobile/views/pages/favorites.vue
@@ -71,7 +71,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 main
 	width 100%
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index ca62d4e2f8..c2ab5d5623 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -154,7 +154,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	> .nav
@@ -215,8 +215,8 @@ root(isDark)
 					color isDark ? #cdd0d8 : #666
 
 					&[data-active]
-						color $theme-color-foreground
-						background $theme-color
+						color var(--primaryForeground)
+						background var(--primary)
 
 					&:not([data-active]):hover
 						background isDark ? #353e4a : #eee
@@ -224,7 +224,7 @@ root(isDark)
 					> .badge
 						margin-left 6px
 						font-size 10px
-						color $theme-color
+						color var(--primary)
 
 	> .tl
 		max-width 680px
@@ -246,7 +246,7 @@ main:not([data-darkmode])
 </style>
 
 <style lang="stylus" module>
-@import '~const.styl'
+
 
 .title
 	i
@@ -255,7 +255,7 @@ main:not([data-darkmode])
 .badge
 	margin-left 6px
 	font-size 10px
-	color $theme-color
+	color var(--primary)
 	vertical-align middle
 
 </style>
diff --git a/src/client/app/mobile/views/pages/notifications.vue b/src/client/app/mobile/views/pages/notifications.vue
index bddcd457bb..ce33332faf 100644
--- a/src/client/app/mobile/views/pages/notifications.vue
+++ b/src/client/app/mobile/views/pages/notifications.vue
@@ -34,7 +34,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 main
 	width 100%
diff --git a/src/client/app/mobile/views/pages/received-follow-requests.vue b/src/client/app/mobile/views/pages/received-follow-requests.vue
index 77938c3d60..c2b2606fd8 100644
--- a/src/client/app/mobile/views/pages/received-follow-requests.vue
+++ b/src/client/app/mobile/views/pages/received-follow-requests.vue
@@ -52,7 +52,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 main
 	width 100%
diff --git a/src/client/app/mobile/views/pages/user-list.vue b/src/client/app/mobile/views/pages/user-list.vue
index 1c6a829cd5..f8c8aafa61 100644
--- a/src/client/app/mobile/views/pages/user-list.vue
+++ b/src/client/app/mobile/views/pages/user-list.vue
@@ -53,7 +53,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 main
 	width 100%
diff --git a/src/client/app/mobile/views/pages/user-lists.vue b/src/client/app/mobile/views/pages/user-lists.vue
index 5ee0636dea..fc80f5d1c6 100644
--- a/src/client/app/mobile/views/pages/user-lists.vue
+++ b/src/client/app/mobile/views/pages/user-lists.vue
@@ -51,7 +51,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 main
 	width 100%
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index c1082f31a9..1ff81fc0c6 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -115,7 +115,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-@import '~const.styl'
+
 
 root(isDark)
 	$bg = isDark ? #22252f : #f7f7f7
@@ -275,8 +275,8 @@ root(isDark)
 
 				&[data-active]
 					font-weight bold
-					color $theme-color
-					border-color $theme-color
+					color var(--primary)
+					border-color var(--primary)
 
 	> .body
 		max-width 680px
diff --git a/src/client/const.styl b/src/client/const.styl
deleted file mode 100644
index b6560701d9..0000000000
--- a/src/client/const.styl
+++ /dev/null
@@ -1,4 +0,0 @@
-json('../const.json')
-
-$theme-color = themeColor
-$theme-color-foreground = themeColorForeground
diff --git a/src/client/style.styl b/src/client/style.styl
index 6d1e53e5a6..111e167204 100644
--- a/src/client/style.styl
+++ b/src/client/style.styl
@@ -1,10 +1,8 @@
 @charset 'utf-8'
 
-@import "./const"
-
 /*
 	::selection
-		background $theme-color
+		background var(--primary)
 		color #fff
 */
 
@@ -24,10 +22,8 @@ html, body
 
 a
 	text-decoration none
-	color $theme-color
+	color var(--primary)
 	cursor pointer
-	tap-highlight-color rgba($theme-color, 0.7) !important
-	-webkit-tap-highlight-color rgba($theme-color, 0.7) !important
 
 	&:hover
 		text-decoration underline
@@ -35,3 +31,9 @@ a
 	*
 		cursor pointer
 
+@css {
+	a {
+		tap-highlight-color: rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.7) !important;
+		-webkit-tap-highlight-color: rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.7) !important;
+	}
+}
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 4ea0a1a649..ffe0ffa3ce 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -3,6 +3,7 @@
 		"name": "Dark"
 	},
 	"primary": "#fb4e4e",
+	"primaryForeground": "#fff",
 	"bg": "#191B22",
 	"scrollbarTrack": "#282C37",
 	"scrollbarHandle": "#454954",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 00a74a53c5..f4d061e5ce 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -3,6 +3,7 @@
 		"name": "Light"
 	},
 	"primary": "#fb4e4e",
+	"primaryForeground": "#fff",
 	"bg": "#f7f7f7",
 	"scrollbarTrack": "#fff",
 	"scrollbarHandle": "#00000033",

From f5f2215b47ce4590788dce2af1c8e4e586548e77 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 20:28:13 +0900
Subject: [PATCH 377/539] wip

---
 src/client/app/common/views/components/autocomplete.vue       | 2 +-
 .../common/views/components/games/reversi/reversi.index.vue   | 4 ++--
 .../common/views/components/games/reversi/reversi.room.vue    | 4 ++--
 src/client/app/common/views/components/messaging-room.vue     | 2 +-
 src/client/app/common/views/components/messaging.vue          | 2 +-
 src/client/app/common/views/components/ui/card.vue            | 2 +-
 src/client/app/common/views/components/welcome-timeline.vue   | 2 +-
 src/client/app/common/views/pages/follow.vue                  | 2 +-
 src/client/app/common/views/widgets/donation.vue              | 2 +-
 src/client/app/common/views/widgets/memo.vue                  | 2 +-
 src/client/app/common/views/widgets/nav.vue                   | 2 +-
 src/client/app/desktop/views/components/calendar.vue          | 2 +-
 src/client/app/desktop/views/components/context-menu.vue      | 2 +-
 src/client/app/desktop/views/components/drive.vue             | 2 +-
 src/client/app/desktop/views/components/note-detail.vue       | 2 +-
 src/client/app/desktop/views/components/notes.note.vue        | 2 +-
 src/client/app/desktop/views/components/notes.vue             | 2 +-
 src/client/app/desktop/views/components/timeline.vue          | 4 ++--
 src/client/app/desktop/views/components/ui-notification.vue   | 2 +-
 src/client/app/desktop/views/components/ui.header.account.vue | 2 +-
 .../app/desktop/views/components/ui.header.notifications.vue  | 2 +-
 src/client/app/desktop/views/components/user-preview.vue      | 4 ++--
 src/client/app/desktop/views/components/widget-container.vue  | 4 ++--
 src/client/app/desktop/views/components/window.vue            | 4 ++--
 src/client/app/desktop/views/pages/deck/deck.column.vue       | 4 ++--
 src/client/app/desktop/views/pages/deck/deck.notes.vue        | 2 +-
 .../app/desktop/views/pages/user/user.followers-you-know.vue  | 2 +-
 src/client/app/desktop/views/pages/user/user.friends.vue      | 2 +-
 src/client/app/desktop/views/pages/user/user.header.vue       | 2 +-
 src/client/app/desktop/views/pages/user/user.photos.vue       | 2 +-
 src/client/app/desktop/views/pages/user/user.profile.vue      | 2 +-
 src/client/app/desktop/views/pages/user/user.timeline.vue     | 4 ++--
 src/client/app/desktop/views/pages/welcome.vue                | 4 ++--
 src/client/app/desktop/views/widgets/profile.vue              | 2 +-
 src/client/app/mobile/views/components/drive-file-chooser.vue | 2 +-
 src/client/app/mobile/views/components/drive.vue              | 4 ++--
 src/client/app/mobile/views/components/note-card.vue          | 2 +-
 src/client/app/mobile/views/components/note-detail.vue        | 2 +-
 src/client/app/mobile/views/components/notes.vue              | 2 +-
 src/client/app/mobile/views/components/post-form.vue          | 2 +-
 src/client/app/mobile/views/components/widget-container.vue   | 2 +-
 src/client/app/mobile/views/pages/user/home.vue               | 2 +-
 src/client/theme/dark.json                                    | 4 +++-
 src/client/theme/light.json                                   | 4 +++-
 44 files changed, 58 insertions(+), 54 deletions(-)

diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index 99a87520a4..bba6f4f7b2 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -267,7 +267,7 @@ root(isDark)
 	max-width 100%
 	margin-top calc(1em + 8px)
 	overflow hidden
-	background isDark ? #313543 : #fff
+	background var(--faceHeader)
 	border solid 1px rgba(#000, 0.1)
 	border-radius 4px
 	transition top 0.1s ease, left 0.1s ease
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index f6c7f0e3c2..44a1262636 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -190,7 +190,7 @@ root(isDark)
 		margin 8px 0
 		padding 8px
 		color isDark ? #fff : #677f84
-		background isDark ? #282c37 : #fff
+		background var(--face)
 		box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
 		border-radius 6px
 		cursor pointer
@@ -222,7 +222,7 @@ root(isDark)
 		margin 8px 0
 		padding 8px
 		color isDark ? #fff : #677f84
-		background isDark ? #282c37 : #fff
+		background var(--face)
 		box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
 		border-radius 6px
 		cursor pointer
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index d4b91ae7a7..072f3eda12 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -273,7 +273,7 @@ root(isDark)
 					> select
 						width 100%
 						padding 12px 14px
-						background isDark ? #282C37 : #fff
+						background var(--face)
 						border 1px solid isDark ? #6a707d : #dcdfe6
 						border-radius 4px
 						color isDark ? #fff : #606266
@@ -331,7 +331,7 @@ root(isDark)
 		.card
 			max-width 400px
 			border-radius 4px
-			background isDark ? #282C37 : #fff
+			background var(--face)
 			color isDark ? #fff : #303133
 			box-shadow 0 2px 12px 0 rgba(#000, isDark ? 0.7 : 0.1)
 
diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index 5bdf8b9034..52abfa4e1d 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -369,7 +369,7 @@ root(isDark)
 		max-width 600px
 		margin 0 auto
 		padding 0
-		background rgba(isDark ? #282c37 : #fff, 0.95)
+		//background rgba(var(--face), 0.95)
 		background-clip content-box
 
 		> .new-message
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index 7181ddd01c..a984c980b1 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -329,7 +329,7 @@ root(isDark)
 		> a
 			display block
 			text-decoration none
-			background isDark ? #282c37 : #fff
+			background var(--face)
 			border-bottom solid 1px isDark ? #1c2023 : #eee
 
 			*
diff --git a/src/client/app/common/views/components/ui/card.vue b/src/client/app/common/views/components/ui/card.vue
index a9e0493810..be24027f6c 100644
--- a/src/client/app/common/views/components/ui/card.vue
+++ b/src/client/app/common/views/components/ui/card.vue
@@ -25,7 +25,7 @@ export default Vue.extend({
 root(isDark)
 	margin 16px
 	color isDark ? #fff : #000
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
 
 	> header
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index 965ec78559..938ab602f0 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -91,7 +91,7 @@ export default Vue.extend({
 	transform translateY(-30px)
 
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 
 	> div
 		> *
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index d81e4c0820..5e2d448d8b 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -116,7 +116,7 @@ root(isDark)
 	text-align center
 	color isDark ? #9baec8 : #868c8c
 
-	$bg = isDark ? #282C37 : #fff
+	$bg = var(--face)
 
 	@media (max-width 400px)
 		padding 16px
diff --git a/src/client/app/common/views/widgets/donation.vue b/src/client/app/common/views/widgets/donation.vue
index 544ca1bd9d..a91aa8e749 100644
--- a/src/client/app/common/views/widgets/donation.vue
+++ b/src/client/app/common/views/widgets/donation.vue
@@ -31,7 +31,7 @@ export default define({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282c37 : #fff
+	background var(--face)
 	border solid 1px isDark ? #c3831c : #ead8bb
 	border-radius 6px
 
diff --git a/src/client/app/common/views/widgets/memo.vue b/src/client/app/common/views/widgets/memo.vue
index 079522d39b..42df683883 100644
--- a/src/client/app/common/views/widgets/memo.vue
+++ b/src/client/app/common/views/widgets/memo.vue
@@ -70,7 +70,7 @@ root(isDark)
 			min-width 100%
 			padding 16px
 			color isDark ? #fff : #222
-			background isDark ? #282c37 : #fff
+			background var(--face)
 			border none
 			border-bottom solid 1px isDark ? #1c2023 : #eee
 			border-radius 0
diff --git a/src/client/app/common/views/widgets/nav.vue b/src/client/app/common/views/widgets/nav.vue
index 0cbf7c158e..04dfe97c72 100644
--- a/src/client/app/common/views/widgets/nav.vue
+++ b/src/client/app/common/views/widgets/nav.vue
@@ -21,7 +21,7 @@ root(isDark)
 		padding 16px
 		font-size 12px
 		color isDark ? #9aa4b3 : #aaa
-		background isDark ? #282c37 : #fff
+		background var(--face)
 
 		a
 			color isDark ? #9aa4b3 : #999
diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index 2414ced0c9..cd73ab350b 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -132,7 +132,7 @@ export default Vue.extend({
 
 root(isDark)
 	color isDark ? #c5ced6 : #777
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
diff --git a/src/client/app/desktop/views/components/context-menu.vue b/src/client/app/desktop/views/components/context-menu.vue
index 49aeac143f..170dcf55a1 100644
--- a/src/client/app/desktop/views/components/context-menu.vue
+++ b/src/client/app/desktop/views/components/context-menu.vue
@@ -82,7 +82,7 @@ root(isDark)
 	z-index 4096
 	width $width
 	font-size 0.8em
-	background isDark ? #282c37 : #fff
+	background var(--face)
 	border-radius 0 4px 4px 4px
 	box-shadow 2px 2px 8px rgba(#000, 0.2)
 	opacity 0
diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index ccfdb3159f..a1748963aa 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -596,7 +596,7 @@ root(isDark)
 		overflow auto
 		font-size 0.9em
 		color isDark ? #d2d9dc : #555
-		background isDark ? #282c37 : #fff
+		background var(--face)
 		box-shadow 0 1px 0 rgba(#000, 0.05)
 
 		&, *
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index f004ca88ee..35eb6ac45d 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -230,7 +230,7 @@ export default Vue.extend({
 root(isDark)
 	overflow hidden
 	text-align left
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index a91212221b..13a8641170 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -322,7 +322,7 @@ export default Vue.extend({
 root(isDark)
 	margin 0
 	padding 0
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	border-bottom solid 1px isDark ? #1c2023 : #eaeaea
 
 	&[data-round]
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 2e3ffd171b..0bd45b1c21 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -260,7 +260,7 @@ root(isDark)
 			width 100%
 			text-align center
 			color #ccc
-			background isDark ? #282C37 : #fff
+			background var(--face)
 			border-top solid 1px isDark ? #1c2023 : #eaeaea
 			border-bottom-left-radius 6px
 			border-bottom-right-radius 6px
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 32ed89ef0b..7800eae52d 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -178,7 +178,7 @@ export default Vue.extend({
 
 
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
@@ -186,7 +186,7 @@ root(isDark)
 	> header
 		padding 0 8px
 		z-index 10
-		background isDark ? #313543 : #fff
+		background var(--faceHeader)
 		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
 
 		> .buttons
diff --git a/src/client/app/desktop/views/components/ui-notification.vue b/src/client/app/desktop/views/components/ui-notification.vue
index 7519124870..883a880e5d 100644
--- a/src/client/app/desktop/views/components/ui-notification.vue
+++ b/src/client/app/desktop/views/components/ui-notification.vue
@@ -47,7 +47,7 @@ root(isDark)
 	padding 128px 0 0 0
 	width 500px
 	color rgba(isDark ? #fff : #000, 0.6)
-	background rgba(isDark ? #282C37 : #fff, 0.9)
+	//background rgba(var(--face), 0.9)
 	border-radius 0 0 8px 8px
 	box-shadow 0 2px 4px rgba(#000, isDark ? 0.4 : 0.2)
 	transform translateY(-64px)
diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index 301efeb3e2..c728fa42be 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -177,7 +177,7 @@ root(isDark)
 			transition filter 100ms ease
 
 	> .menu
-		$bgcolor = isDark ? #282c37 : #fff
+		$bgcolor = var(--face)
 		display block
 		position absolute
 		top 56px
diff --git a/src/client/app/desktop/views/components/ui.header.notifications.vue b/src/client/app/desktop/views/components/ui.header.notifications.vue
index f9b68fa0e9..2a38655f3a 100644
--- a/src/client/app/desktop/views/components/ui.header.notifications.vue
+++ b/src/client/app/desktop/views/components/ui.header.notifications.vue
@@ -96,7 +96,7 @@ root(isDark)
 			color var(--primary)
 
 	> .pop
-		$bgcolor = isDark ? #282c37 : #fff
+		$bgcolor = var(--face)
 		display block
 		position absolute
 		top 56px
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index f988bb21e9..01b6cdbdc5 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -90,7 +90,7 @@ root(isDark)
 	z-index 2048
 	margin-top -8px
 	width 250px
-	background isDark ? #282c37 : #fff
+	background var(--face)
 	background-clip content-box
 	border solid 1px rgba(#000, 0.1)
 	border-radius 4px
@@ -111,7 +111,7 @@ root(isDark)
 		z-index 2
 		width 58px
 		height 58px
-		border solid 3px isDark ? #282c37 : #fff
+		border solid 3px var(--face)
 		border-radius 8px
 
 	> .title
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index fbf7691cd3..d17b9c91d8 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -35,7 +35,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
@@ -45,7 +45,7 @@ root(isDark)
 		box-shadow none !important
 
 	> header
-		background isDark ? #313543 : #fff
+		background var(--faceHeader)
 
 		> .title
 			z-index 1
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index 2b01c24ca8..15aa158073 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -562,7 +562,7 @@ root(isDark)
 		> .body
 			height 100%
 			overflow hidden
-			background isDark ? #282C37 : #fff
+			background var(--face)
 			border-radius 6px
 
 			if isDark
@@ -578,7 +578,7 @@ root(isDark)
 				overflow hidden
 				white-space nowrap
 				cursor move
-				background isDark ? #313543 : #fff
+				background var(--faceHeader)
 				border-radius 6px 6px 0 0
 				box-shadow 0 1px 0 rgba(#000, 0.1)
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 10454b1cc6..1cf8900ee5 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -277,7 +277,7 @@ root(isDark)
 	width 330px
 	min-width 330px
 	height 100%
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	border-radius 6px
 	//box-shadow 0 2px 16px rgba(#000, 0.1)
 	overflow hidden
@@ -318,7 +318,7 @@ root(isDark)
 		padding 0 16px
 		font-size 14px
 		color isDark ? #e3e5e8 : #888
-		background isDark ? #313543 : #fff
+		background var(--faceHeader)
 		box-shadow 0 1px rgba(#000, 0.15)
 		cursor pointer
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index 58f13dd57b..1217e0d4da 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -232,7 +232,7 @@ root(isDark)
 			width 100%
 			text-align center
 			color #ccc
-			background isDark ? #282C37 : #fff
+			background var(--face)
 			border-top solid 1px isDark ? #1c2023 : #eaeaea
 			border-bottom-left-radius 6px
 			border-bottom-right-radius 6px
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index 0965d801c9..212e21a7a9 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -37,7 +37,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index de37dc95c9..0a329b3d8e 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -41,7 +41,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index 30dc74212d..ec46e955b5 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -103,7 +103,7 @@ export default Vue.extend({
 
 
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index 591edfd829..99e064446d 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -40,7 +40,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 	overflow hidden
diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue
index 1ea242270a..e5ea8d1cc9 100644
--- a/src/client/app/desktop/views/pages/user/user.profile.vue
+++ b/src/client/app/desktop/views/pages/user/user.profile.vue
@@ -86,7 +86,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
 
diff --git a/src/client/app/desktop/views/pages/user/user.timeline.vue b/src/client/app/desktop/views/pages/user/user.timeline.vue
index 3cde6cc10c..fe3ca9154b 100644
--- a/src/client/app/desktop/views/pages/user/user.timeline.vue
+++ b/src/client/app/desktop/views/pages/user/user.timeline.vue
@@ -115,14 +115,14 @@ export default Vue.extend({
 
 
 root(isDark)
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	border-radius var(--round)
 	overflow hidden
 
 	> header
 		padding 0 8px
 		z-index 10
-		background isDark ? #313543 : #fff
+		background var(--faceHeader)
 		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
 
 		> span
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 05c32a7bd1..405fcb76d0 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -355,7 +355,7 @@ root(isDark)
 
 		.block
 			color isDark ? #fff : #444
-			background isDark ? #282C37 : #fff
+			background var(--face)
 			box-shadow var(--shadow)
 			//border-radius 8px
 			overflow auto
@@ -364,7 +364,7 @@ root(isDark)
 				z-index 1
 				padding 0 16px
 				line-height 48px
-				background isDark ? #313543 : #fff
+				background var(--faceHeader)
 
 				if !isDark
 					box-shadow 0 1px 0px rgba(0, 0, 0, 0.1)
diff --git a/src/client/app/desktop/views/widgets/profile.vue b/src/client/app/desktop/views/widgets/profile.vue
index 04ef18c8e3..aea0c90e34 100644
--- a/src/client/app/desktop/views/widgets/profile.vue
+++ b/src/client/app/desktop/views/widgets/profile.vue
@@ -100,7 +100,7 @@ root(isDark)
 		left 16px
 		width 58px
 		height 58px
-		border solid 3px isDark ? #282c37 : #fff
+		border solid 3px var(--face)
 		border-radius 8px
 		cursor pointer
 
diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue
index 92ac211af2..6d3fc2343a 100644
--- a/src/client/app/mobile/views/components/drive-file-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-file-chooser.vue
@@ -59,7 +59,7 @@ root(isDark)
 	> .body
 		width 100%
 		height 100%
-		background isDark ? #282c37 : #fff
+		background var(--face)
 
 		> header
 			border-bottom solid 1px isDark ? #1b1f29 : #eee
diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue
index 36a6ea2f40..76d6c2737d 100644
--- a/src/client/app/mobile/views/components/drive.vue
+++ b/src/client/app/mobile/views/components/drive.vue
@@ -474,7 +474,7 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 root(isDark)
-	background isDark ? #282c37 : #fff
+	background var(--face)
 
 	> nav
 		display block
@@ -490,7 +490,7 @@ root(isDark)
 		color rgba(isDark ? #fff : #000, 0.67)
 		-webkit-backdrop-filter blur(12px)
 		backdrop-filter blur(12px)
-		background-color rgba(isDark ? #313543 : #fff, 0.75)
+		//background-color rgba(var(--faceHeader), 0.75)
 		border-bottom solid 1px rgba(#000, 0.13)
 
 		> p
diff --git a/src/client/app/mobile/views/components/note-card.vue b/src/client/app/mobile/views/components/note-card.vue
index e8427798cd..e30e6c1c8f 100644
--- a/src/client/app/mobile/views/components/note-card.vue
+++ b/src/client/app/mobile/views/components/note-card.vue
@@ -32,7 +32,7 @@ root(isDark)
 	width 150px
 	//height 120px
 	font-size 12px
-	background isDark ? #282c37 : #fff
+	background var(--face)
 	border-radius 4px
 
 	> a
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 6daf375ed2..f0a91e82d4 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -229,7 +229,7 @@ root(isDark)
 	overflow hidden
 	width 100%
 	text-align left
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	border-radius 8px
 	box-shadow 0 0 2px rgba(#000, 0.1)
 
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 83674a33dc..539141954b 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -221,7 +221,7 @@ export default Vue.extend({
 
 root(isDark)
 	overflow hidden
-	background isDark ? #282C37 : #fff
+	background var(--face)
 	border-radius 8px
 	box-shadow 0 0 2px rgba(#000, 0.1)
 
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 742163696e..6ada5e60ee 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -342,7 +342,7 @@ root(isDark)
 		margin 32px auto
 
 	> .form
-		background isDark ? #282C37 : #fff
+		background var(--face)
 		border-radius 8px
 		box-shadow 0 0 2px rgba(#000, 0.1)
 
diff --git a/src/client/app/mobile/views/components/widget-container.vue b/src/client/app/mobile/views/components/widget-container.vue
index a713a10621..bf7adf5fcb 100644
--- a/src/client/app/mobile/views/components/widget-container.vue
+++ b/src/client/app/mobile/views/components/widget-container.vue
@@ -45,7 +45,7 @@ root(isDark)
 			font-size 15px
 			font-weight normal
 			color isDark ? #b8c5cc : #465258
-			background isDark ? #282c37 : #fff
+			background var(--face)
 			border-radius 8px 8px 0 0
 
 			> [data-fa]
diff --git a/src/client/app/mobile/views/pages/user/home.vue b/src/client/app/mobile/views/pages/user/home.vue
index 4118afef19..d19ccfd522 100644
--- a/src/client/app/mobile/views/pages/user/home.vue
+++ b/src/client/app/mobile/views/pages/user/home.vue
@@ -81,7 +81,7 @@ root(isDark)
 			font-size 15px
 			font-weight normal
 			color isDark ? #b8c5cc : #465258
-			background isDark ? #282c37 : #fff
+			background var(--face)
 			border-radius 8px 8px 0 0
 
 			@media (min-width 500px)
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index ffe0ffa3ce..fca316c5bc 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -7,5 +7,7 @@
 	"bg": "#191B22",
 	"scrollbarTrack": "#282C37",
 	"scrollbarHandle": "#454954",
-	"scrollbarHandleHover": "#535660"
+	"scrollbarHandleHover": "#535660",
+	"face": "#282c37",
+	"faceHeader": "#313543"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index f4d061e5ce..b091d87389 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -7,5 +7,7 @@
 	"bg": "#f7f7f7",
 	"scrollbarTrack": "#fff",
 	"scrollbarHandle": "#00000033",
-	"scrollbarHandleHover": "#00000066"
+	"scrollbarHandleHover": "#00000066",
+	"face": "#fff",
+	"faceHeader": "#fff"
 }

From 297019c22c06de45d66a68cc855227c5def56f1c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 20:38:16 +0900
Subject: [PATCH 378/539] example commit

---
 src/client/app/mobile/views/pages/settings.vue | 4 ++--
 src/client/theme/dark.json                     | 4 +++-
 src/client/theme/light.json                    | 4 +++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 9e90416370..9849c82490 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -331,8 +331,8 @@ root(isDark)
 		margin 16px
 		padding 16px
 		text-align center
-		color isDark ? #49ab63 : #2c662d
-		background isDark ? #273c34 : #fcfff5
+		color var(--mobileSignedInAsFg)
+		background var(--mobileSignedInAsBg)
 		box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
 
 	> .signout
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index fca316c5bc..f94f3d7f9c 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -9,5 +9,7 @@
 	"scrollbarHandle": "#454954",
 	"scrollbarHandleHover": "#535660",
 	"face": "#282c37",
-	"faceHeader": "#313543"
+	"faceHeader": "#313543",
+	"mobileSignedInAsBg": "#273c34",
+	"mobileSignedInAsFg": "#49ab63"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index b091d87389..4a3db8a308 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -9,5 +9,7 @@
 	"scrollbarHandle": "#00000033",
 	"scrollbarHandleHover": "#00000066",
 	"face": "#fff",
-	"faceHeader": "#fff"
+	"faceHeader": "#fff",
+	"mobileSignedInAsBg": "#fcfff5",
+	"mobileSignedInAsFg": "#2c662d"
 }

From 77b441f14c9823cf8caac7eb5f0146435fea06b3 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Wed, 26 Sep 2018 20:39:59 +0900
Subject: [PATCH 379/539] =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=A9=E3=82=A4?=
 =?UTF-8?q?=E3=81=A7=E5=85=83=E3=81=AE=E5=85=AC=E9=96=8B=E7=AF=84=E5=9B=B2?=
 =?UTF-8?q?=E3=82=92=E5=BC=95=E3=81=8D=E7=B6=99=E3=81=90=20(#2775)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* ホーム/フォロワー限定へのリプライは公開範囲を引き継ぐように

* ダイレクトへのリプライはダイレクトでリプライ先ユーザーを初期設定するように

* 非公開へのリプライでも元の公開範囲を引き継ぐ
---
 .../app/desktop/views/components/post-form.vue       | 12 ++++++++++++
 src/client/app/mobile/views/components/post-form.vue | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 8db85aeaca..7bf76e4829 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -178,6 +178,18 @@ export default Vue.extend({
 			});
 		}
 
+		// 公開以外へのリプライ時は元の公開範囲を引き継ぐ
+		if (this.reply && ['home', 'followers', 'specified', 'private'].includes(this.reply.visibility)) {
+			this.visibility = this.reply.visibility;
+		}
+
+		// ダイレクトへのリプライはリプライ先ユーザーを初期設定
+		if (this.reply && this.reply.visibility === 'specified') {
+			(this as any).api('users/show', {	userId: this.reply.userId }).then(user => {
+				this.visibleUsers.push(user);
+			});
+		}
+
 		this.$nextTick(() => {
 			// 書きかけの投稿を復元
 			if (!this.instant) {
diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 1294273a2a..72ec142572 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -173,6 +173,18 @@ export default Vue.extend({
 			});
 		}
 
+		// 公開以外へのリプライ時は元の公開範囲を引き継ぐ
+		if (this.reply && ['home', 'followers', 'specified', 'private'].includes(this.reply.visibility)) {
+			this.visibility = this.reply.visibility;
+		}
+
+		// ダイレクトへのリプライはリプライ先ユーザーを初期設定
+		if (this.reply && this.reply.visibility === 'specified') {
+			(this as any).api('users/show', {	userId: this.reply.userId }).then(user => {
+				this.visibleUsers.push(user);
+			});
+		}
+
 		this.focus();
 
 		this.$nextTick(() => {

From b6e33e93dea72844e0efb2a66d0f8faada12ac6c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 26 Sep 2018 20:47:11 +0900
Subject: [PATCH 380/539] wip

---
 src/client/app/mobile/views/pages/settings.vue | 4 ++--
 src/client/theme/dark.json                     | 4 +++-
 src/client/theme/light.json                    | 4 +++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 9849c82490..0a44a592e1 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -339,8 +339,8 @@ root(isDark)
 		margin 16px
 		padding 16px
 		text-align center
-		color isDark ? #ff5f56 : #cc2727
-		background isDark ? #652222 : #fff6f5
+		color var(--mobileSignedInAsFg)
+		background var(--mobileSignedInAsBg)
 		box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
 
 	> footer
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index f94f3d7f9c..5d0272a375 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -11,5 +11,7 @@
 	"face": "#282c37",
 	"faceHeader": "#313543",
 	"mobileSignedInAsBg": "#273c34",
-	"mobileSignedInAsFg": "#49ab63"
+	"mobileSignedInAsFg": "#49ab63",
+	"mobileSignoutBg": "#652222",
+	"mobileSignoutFg": "#ff5f56"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4a3db8a308..4cba3be499 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -11,5 +11,7 @@
 	"face": "#fff",
 	"faceHeader": "#fff",
 	"mobileSignedInAsBg": "#fcfff5",
-	"mobileSignedInAsFg": "#2c662d"
+	"mobileSignedInAsFg": "#2c662d",
+	"mobileSignoutBg": "#fff6f5",
+	"mobileSignoutFg": "#cc2727"
 }

From 3cbdfcb43d4b4435d9ecd50657607979317d2749 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 00:54:37 +0900
Subject: [PATCH 381/539] wip

---
 src/client/app/common/views/components/note-header.vue        | 2 +-
 src/client/app/desktop/views/components/notes.note.vue        | 2 +-
 src/client/app/desktop/views/components/notes.vue             | 4 ++--
 src/client/app/desktop/views/pages/deck/deck.note.vue         | 2 +-
 src/client/app/desktop/views/pages/deck/deck.notes.vue        | 4 ++--
 .../app/desktop/views/pages/deck/deck.notifications.vue       | 4 ++--
 src/client/app/mobile/views/components/note.vue               | 2 +-
 src/client/app/mobile/views/components/notes.vue              | 4 ++--
 src/client/app/mobile/views/components/notifications.vue      | 4 ++--
 src/client/theme/dark.json                                    | 1 +
 src/client/theme/light.json                                   | 1 +
 11 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue
index f4a2f00876..48dfae5f84 100644
--- a/src/client/app/common/views/components/note-header.vue
+++ b/src/client/app/common/views/components/note-header.vue
@@ -110,7 +110,7 @@ root(isDark)
 		> .app
 			margin-right 8px
 			padding-right 8px
-			border-right solid 1px isDark ? #1c2023 : #eaeaea
+			border-right solid 1px var(--faceDivider)
 
 		> .visibility
 			margin-left 8px
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 13a8641170..4f2b0241e8 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -323,7 +323,7 @@ root(isDark)
 	margin 0
 	padding 0
 	background var(--face)
-	border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+	border-bottom solid 1px var(--faceDivider)
 
 	&[data-round]
 		&:first-child
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 0bd45b1c21..d0148eef58 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -237,7 +237,7 @@ root(isDark)
 			text-align center
 			color isDark ? #666b79 : #aaa
 			background isDark ? #242731 : #fdfdfd
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 			span
 				margin 0 16px
@@ -261,7 +261,7 @@ root(isDark)
 			text-align center
 			color #ccc
 			background var(--face)
-			border-top solid 1px isDark ? #1c2023 : #eaeaea
+			border-top solid 1px var(--faceDivider)
 			border-bottom-left-radius 6px
 			border-bottom-right-radius 6px
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 82e816cc8c..04ddcd488d 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -228,7 +228,7 @@ mediaRoot(isDark)
 
 root(isDark)
 	font-size 13px
-	border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+	border-bottom solid 1px var(--faceDivider)
 
 	&:last-of-type
 		border-bottom none
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index 1217e0d4da..214ec3cdf7 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -216,7 +216,7 @@ root(isDark)
 			text-align center
 			color isDark ? #666b79 : #aaa
 			background isDark ? #242731 : #fdfdfd
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 			span
 				margin 0 16px
@@ -233,7 +233,7 @@ root(isDark)
 			text-align center
 			color #ccc
 			background var(--face)
-			border-top solid 1px isDark ? #1c2023 : #eaeaea
+			border-top solid 1px var(--faceDivider)
 			border-bottom-left-radius 6px
 			border-bottom-right-radius 6px
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index f73f221b7b..8a28061260 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -169,7 +169,7 @@ root(isDark)
 	> .notifications
 
 		> .notification:not(:last-child)
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 		> .date
 			display block
@@ -179,7 +179,7 @@ root(isDark)
 			font-size 0.8em
 			color isDark ? #666b79 : #aaa
 			background isDark ? #242731 : #fdfdfd
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 			span
 				margin 0 16px
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 2bfd8f8acc..a8b733fae7 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -232,7 +232,7 @@ export default Vue.extend({
 
 root(isDark)
 	font-size 12px
-	border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+	border-bottom solid 1px var(--faceDivider)
 
 	&:last-of-type
 		border-bottom none
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 539141954b..8841b0e6bf 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -245,7 +245,7 @@ root(isDark)
 			font-size 0.9em
 			color isDark ? #666b79 : #aaa
 			background isDark ? #242731 : #fdfdfd
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 			span
 				margin 0 16px
@@ -276,7 +276,7 @@ root(isDark)
 
 	> footer
 		text-align center
-		border-top solid 1px isDark ? #1c2023 : #eaeaea
+		border-top solid 1px var(--faceDivider)
 
 		&:empty
 			display none
diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue
index 11ac23f4b1..8243a9bfb3 100644
--- a/src/client/app/mobile/views/components/notifications.vue
+++ b/src/client/app/mobile/views/components/notifications.vue
@@ -126,7 +126,7 @@ root(isDark)
 	> .notifications
 
 		> .mk-notification:not(:last-child)
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 		> .date
 			display block
@@ -136,7 +136,7 @@ root(isDark)
 			font-size 0.8em
 			color isDark ? #666b79 : #aaa
 			background isDark ? #242731 : #fdfdfd
-			border-bottom solid 1px isDark ? #1c2023 : #eaeaea
+			border-bottom solid 1px var(--faceDivider)
 
 			span
 				margin 0 16px
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 5d0272a375..cf9306558b 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -10,6 +10,7 @@
 	"scrollbarHandleHover": "#535660",
 	"face": "#282c37",
 	"faceHeader": "#313543",
+	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4cba3be499..64ebd8e293 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -10,6 +10,7 @@
 	"scrollbarHandleHover": "#00000066",
 	"face": "#fff",
 	"faceHeader": "#fff",
+	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From 0a64f638c64ff41075ec95d0305a196c7366a55a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 01:32:04 +0900
Subject: [PATCH 382/539] wip

---
 src/client/app/app.vue                        |  8 ++++++-
 src/client/app/common/scripts/theme.ts        | 21 +++++++++++++++++--
 .../app/common/views/components/menu.vue      | 18 +++++-----------
 .../views/components/reaction-picker.vue      | 20 ++++++------------
 .../views/components/visibility-chooser.vue   |  2 +-
 .../app/desktop/views/components/home.vue     |  2 +-
 .../desktop/views/components/ui.header.vue    |  2 +-
 src/client/theme/dark.json                    | 10 +++++++--
 src/client/theme/halloween.json               | 17 +++++++++++++++
 src/client/theme/light.json                   |  6 ++++++
 10 files changed, 71 insertions(+), 35 deletions(-)
 create mode 100644 src/client/theme/halloween.json

diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index bb8377c237..9b6af27ece 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -7,13 +7,15 @@ import Vue from 'vue';
 import { url, lang } from './config';
 import applyTheme from './common/scripts/theme';
 const darkTheme = require('../theme/dark');
+const halloweenTheme = require('../theme/halloween');
 
 export default Vue.extend({
 	computed: {
 		keymap(): any {
 			return {
 				'h|slash': this.help,
-				'd': this.dark
+				'd': this.dark,
+				'x': this.test
 			};
 		}
 	},
@@ -25,6 +27,10 @@ export default Vue.extend({
 
 		dark() {
 			applyTheme(darkTheme);
+		},
+
+		test() {
+			applyTheme(halloweenTheme);
 		}
 	}
 });
diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index 2cad547c01..a08028ff9a 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -1,6 +1,23 @@
 import * as tinycolor from 'tinycolor2';
+const lightTheme = require('../../../theme/light');
+const darkTheme = require('../../../theme/dark');
+
+type Theme = {
+	meta: {
+		id: string;
+		name: string;
+		inherit: string;
+	};
+} & {
+	[key: string]: string;
+};
+
+export default function(theme: Theme) {
+	if (theme.meta.inherit) {
+		const inherit = [lightTheme, darkTheme].find(x => x.meta.id == theme.meta.inherit);
+		theme = Object.assign({}, inherit, theme);
+	}
 
-export default function(theme: { [key: string]: string }) {
 	const props = compile(theme);
 
 	Object.entries(props).forEach(([k, v]) => {
@@ -11,7 +28,7 @@ export default function(theme: { [key: string]: string }) {
 	localStorage.setItem('theme', JSON.stringify(props));
 }
 
-function compile(theme: { [key: string]: string }): { [key: string]: string } {
+function compile(theme: Theme): { [key: string]: string } {
 	function getColor(code: string): tinycolor.Instance {
 		// ref
 		if (code[0] == '@') {
diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index 3b9f07d1ee..be2c03f54c 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -117,10 +117,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-	$bg-color = isDark ? #2c303c : #fff
+.onchrpzrvnoruiaenfcqvccjfuupzzwv
+	$bg-color = var(--popupBg)
 	$border-color = rgba(27, 31, 35, 0.15)
 
 	position initial
@@ -132,7 +130,7 @@ root(isDark)
 		z-index 10000
 		width 100%
 		height 100%
-		background rgba(#000, isDark ? 0.5 : 0.1)
+		background var(--modalBackdrop)
 		opacity 0
 
 	> .popover
@@ -179,7 +177,7 @@ root(isDark)
 			display block
 			padding 8px 16px
 			width 100%
-			color isDark ? #d6dce2 : #111
+			color var(--popupFg)
 
 			&:hover
 				color var(--primaryForeground)
@@ -193,12 +191,6 @@ root(isDark)
 		> div
 			margin 8px 0
 			height 1px
-			background isDark ? #1c2023 : #eee
-
-.onchrpzrvnoruiaenfcqvccjfuupzzwv[data-darkmode]
-	root(true)
-
-.onchrpzrvnoruiaenfcqvccjfuupzzwv:not([data-darkmode])
-	root(false)
+			background var(--faceDivider)
 
 </style>
diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue
index a86850ac7c..13e8cf1f07 100644
--- a/src/client/app/common/views/components/reaction-picker.vue
+++ b/src/client/app/common/views/components/reaction-picker.vue
@@ -210,11 +210,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 $border-color = rgba(27, 31, 35, 0.15)
 
-root(isDark)
+.mk-reaction-picker
 	position initial
 
 	> .backdrop
@@ -224,11 +222,11 @@ root(isDark)
 		z-index 10000
 		width 100%
 		height 100%
-		background isDark ? rgba(#000, 0.4) : rgba(#000, 0.1)
+		background var(--modalBackdrop)
 		opacity 0
 
 	> .popover
-		$bgcolor = isDark ? #2c303c : #fff
+		$bgcolor = var(--popupBg)
 		position absolute
 		z-index 10001
 		background $bgcolor
@@ -281,8 +279,8 @@ root(isDark)
 			margin 0
 			padding 8px 10px
 			font-size 14px
-			color isDark ? #d6dce2 : #586069
-			border-bottom solid 1px isDark ? #1c2023 : #e1e4e8
+			color var(--popupFg)
+			border-bottom solid 1px var(--faceDivider)
 
 		> div
 			padding 4px
@@ -312,16 +310,10 @@ root(isDark)
 				border-radius 2px
 
 				&:hover
-					background isDark ? #252731 : #eee
+					background var(--reactionPickerButtonHoverBg)
 
 				&:active
 					background var(--primary)
 					box-shadow inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15)
 
-.mk-reaction-picker[data-darkmode]
-	root(true)
-
-.mk-reaction-picker:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index d0a892fd56..5faf09fa11 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -145,7 +145,7 @@ root(isDark)
 		opacity 0
 
 	> .popover
-		$bgcolor = isDark ? #2c303c : #fff
+		$bgcolor = var(--popupBg)
 		position absolute
 		z-index 10001
 		width 240px
diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index 3d77da52d9..a07af02ea6 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -280,7 +280,7 @@ root(isDark)
 		width 100%
 		height 48px
 		color isDark ? #fff : #000
-		background isDark ? #313543 : #f7f7f7
+		background var(--desktopHeaderBg)
 		box-shadow 0 1px 1px rgba(#000, 0.075)
 
 		> a
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index bec0ee37ad..264da8bef8 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -151,7 +151,7 @@ root(isDark)
 			z-index 1000
 			width 100%
 			height 48px
-			background isDark ? #313543 : #f7f7f7
+			background var(--desktopHeaderBg)
 
 		> .main
 			z-index 1001
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index cf9306558b..18b674fef4 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -1,16 +1,22 @@
 {
 	"meta": {
+		"id": "9978f7f9-5616-44fd-a704-cc5985efdd63",
 		"name": "Dark"
 	},
 	"primary": "#fb4e4e",
 	"primaryForeground": "#fff",
-	"bg": "#191B22",
-	"scrollbarTrack": "#282C37",
+	"bg": "#191b22",
+	"scrollbarTrack": "#282c37",
 	"scrollbarHandle": "#454954",
 	"scrollbarHandleHover": "#535660",
 	"face": "#282c37",
 	"faceHeader": "#313543",
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
+	"popupBg": "#2c303c",
+	"popupFg": "#d6dce2",
+	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
+	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
+	"desktopHeaderBg": "#313543",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
new file mode 100644
index 0000000000..d38bd849ed
--- /dev/null
+++ b/src/client/theme/halloween.json
@@ -0,0 +1,17 @@
+{
+	"meta": {
+		"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
+		"name": "Halloween",
+		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63"
+	},
+	"primary": "#fb8d4e",
+	"primaryForeground": "#fff",
+	"bg": "#1b1a35",
+	"face": "#282c37",
+	"faceHeader": "#313543",
+	"faceDivider": "rgba(0, 0, 0, 0.3)",
+	"popupBg": "#2c303c",
+	"popupFg": "#d6dce2",
+	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
+	"desktopHeaderBg": "#0c0b19"
+}
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 64ebd8e293..b012629faf 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -1,5 +1,6 @@
 {
 	"meta": {
+		"id": "406cfea3-a4e7-486c-9057-30ede1353c3f",
 		"name": "Light"
 	},
 	"primary": "#fb4e4e",
@@ -11,6 +12,11 @@
 	"face": "#fff",
 	"faceHeader": "#fff",
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
+	"popupBg": "#fff",
+	"popupFg": "#586069",
+	"reactionPickerButtonHoverBg": "#eee",
+	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
+	"desktopHeaderBg": "#f7f7f7",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From dabda21eb7e67d098c789f22db22014143798e1e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 01:44:05 +0900
Subject: [PATCH 383/539] wip

---
 .../common/views/components/autocomplete.vue  | 22 ++++++-------------
 src/client/theme/dark.json                    |  6 ++++-
 src/client/theme/light.json                   |  6 ++++-
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index bba6f4f7b2..bc0120c9ab 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -259,9 +259,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-autocomplete
 	position fixed
 	z-index 65535
 	max-width 100%
@@ -299,7 +297,7 @@ root(isDark)
 				text-overflow ellipsis
 
 			&:hover
-				background isDark ? rgba(#fff, 0.1) : rgba(#000, 0.1)
+				background var(--autocompleteItemHoverBg)
 
 			&[data-selected='true']
 				background var(--primary)
@@ -325,15 +323,15 @@ root(isDark)
 
 		.name
 			margin 0 8px 0 0
-			color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
+			color var(--autocompleteItemText)
 
 		.username
-			color isDark ? rgba(#fff, 0.3) : rgba(#000, 0.3)
+			color var(--autocompleteItemTextSub)
 
 	> .hashtags > li
 
 		.name
-			color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
+			color var(--autocompleteItemText)
 
 	> .emojis > li
 
@@ -343,15 +341,9 @@ root(isDark)
 			width 24px
 
 		.name
-			color isDark ? rgba(#fff, 0.8) : rgba(#000, 0.8)
+			color var(--autocompleteItemText)
 
 		.alias
 			margin 0 0 0 8px
-			color isDark ? rgba(#fff, 0.3) : rgba(#000, 0.3)
-
-.mk-autocomplete[data-darkmode]
-	root(true)
-
-.mk-autocomplete:not([data-darkmode])
-	root(false)
+			color var(--autocompleteItemTextSub)
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 18b674fef4..5a8e1ce8f6 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -14,8 +14,12 @@
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
-	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
+
+	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
+	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
+	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
+	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 	"desktopHeaderBg": "#313543",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index b012629faf..4ae10b5cad 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -14,8 +14,12 @@
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
-	"reactionPickerButtonHoverBg": "#eee",
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
+
+	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
+	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
+	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
+	"reactionPickerButtonHoverBg": "#eee",
 	"desktopHeaderBg": "#f7f7f7",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",

From 3304cc106ec75c2bfceeb47336afc250fc392c86 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 01:54:10 +0900
Subject: [PATCH 384/539] wip

---
 src/client/app/common/views/components/avatar.vue | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue
index a2b0fc6bd3..ca09af87de 100644
--- a/src/client/app/common/views/components/avatar.vue
+++ b/src/client/app/common/views/components/avatar.vue
@@ -58,6 +58,9 @@ export default Vue.extend({
 			};
 		}
 	},
+	mounted() {
+		this.$el.style.color = `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`;
+	},
 	methods: {
 		onClick(e) {
 			this.$emit('click', e);
@@ -67,8 +70,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-root(isDark)
+.mk-avatar
 	display inline-block
 	vertical-align bottom
 
@@ -79,7 +81,7 @@ root(isDark)
 	&.cat::before,
 	&.cat::after
 		background #df548f
-		border solid 4px isDark ? #e0eefd : #202224
+		border solid 4px currentColor
 		box-sizing border-box
 		content ''
 		display inline-block
@@ -105,9 +107,4 @@ root(isDark)
 		transition border-radius 1s ease
 		z-index 1
 
-.mk-avatar[data-darkmode]
-	root(true)
-
-.mk-avatar:not([data-darkmode])
-	root(false)
 </style>

From 4dde54e344773d6e6a39713453292d3f128df3f9 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 01:58:37 +0900
Subject: [PATCH 385/539] Clean up

---
 .../app/desktop/views/pages/deck/deck.note.vue      | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 04ddcd488d..a02636a42d 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -314,19 +314,6 @@ root(isDark)
 					> .text
 						margin-right 8px
 
-					> .toggle
-						display inline-block
-						padding 4px 8px
-						font-size 0.7em
-						color isDark ? #393f4f : #fff
-						background isDark ? #687390 : #b1b9c1
-						border-radius 2px
-						cursor pointer
-						user-select none
-
-						&:hover
-							background isDark ? #707b97 : #bbc4ce
-
 				> .content
 
 					> .text

From 97d68d7b31d4db1b0cdd07a0196c63d4493a621f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 02:02:07 +0900
Subject: [PATCH 386/539] example commit

---
 .../app/common/views/components/cw-button.vue      | 14 ++++----------
 src/client/theme/dark.json                         |  3 +++
 src/client/theme/light.json                        |  3 +++
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/client/app/common/views/components/cw-button.vue b/src/client/app/common/views/components/cw-button.vue
index 06087edc93..79917f82ab 100644
--- a/src/client/app/common/views/components/cw-button.vue
+++ b/src/client/app/common/views/components/cw-button.vue
@@ -22,23 +22,17 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.nrvgflfuaxwgkxoynpnumyookecqrrvh
 	display inline-block
 	padding 4px 8px
 	font-size 0.7em
-	color isDark ? #393f4f : #fff
-	background isDark ? #687390 : #b1b9c1
+	color var(--cwButtonFg)
+	background var(--cwButtonBg)
 	border-radius 2px
 	cursor pointer
 	user-select none
 
 	&:hover
-		background isDark ? #707b97 : #bbc4ce
-
-.nrvgflfuaxwgkxoynpnumyookecqrrvh[data-darkmode]
-	root(true)
-
-.nrvgflfuaxwgkxoynpnumyookecqrrvh:not([data-darkmode])
-	root(false)
+		background var(--cwButtonHoverBg)
 
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 5a8e1ce8f6..14caf19224 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -19,6 +19,9 @@
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
 	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
+	"cwButtonBg": "#687390",
+	"cwButtonFg": "#393f4f",
+	"cwButtonHoverBg": "#707b97",
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 	"desktopHeaderBg": "#313543",
 	"mobileSignedInAsBg": "#273c34",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4ae10b5cad..7a039ef294 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -19,6 +19,9 @@
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
 	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
+	"cwButtonBg": "#b1b9c1",
+	"cwButtonFg": "#fff",
+	"cwButtonHoverBg": "#bbc4ce",
 	"reactionPickerButtonHoverBg": "#eee",
 	"desktopHeaderBg": "#f7f7f7",
 	"mobileSignedInAsBg": "#fcfff5",

From 15a8b4c6e56c3a5e055cc007275b28bb8841e319 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 02:18:54 +0900
Subject: [PATCH 387/539] wip

---
 .../common/views/components/note-header.vue   | 24 +++++++------------
 src/client/theme/dark.json                    |  7 ++++++
 src/client/theme/light.json                   |  7 ++++++
 3 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue
index 48dfae5f84..8192d88412 100644
--- a/src/client/app/common/views/components/note-header.vue
+++ b/src/client/app/common/views/components/note-header.vue
@@ -42,9 +42,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.bvonvjxbwzaiskogyhbwgyxvcgserpmu
 	display flex
 	align-items baseline
 	white-space nowrap
@@ -61,7 +59,7 @@ root(isDark)
 		margin 0 .5em 0 0
 		padding 0
 		overflow hidden
-		color isDark ? #fff : #627079
+		color var(--noteHeaderName)
 		font-size 1em
 		font-weight bold
 		text-decoration none
@@ -82,19 +80,19 @@ root(isDark)
 		margin 0 .5em 0 0
 		padding 1px 6px
 		font-size 80%
-		color isDark ? #758188 : #aaa
-		border solid 1px isDark ? #57616f : #ddd
+		color var(--noteHeaderBadgeFg)
+		background var(--noteHeaderBadgeBg)
 		border-radius 3px
 
 		&.is-admin
-			border-color isDark ? #d42c41 : #f56a7b
-			color isDark ? #d42c41 : #f56a7b
+			background var(--noteHeaderAdminBg)
+			color var(--noteHeaderAdminFg)
 
 	> .username
 		margin 0 .5em 0 0
 		overflow hidden
 		text-overflow ellipsis
-		color isDark ? #606984 : #ccc
+		color var(--noteHeaderAcct)
 		flex-shrink 2147483647
 
 	> .info
@@ -102,7 +100,7 @@ root(isDark)
 		font-size 0.9em
 
 		> *
-			color isDark ? #606984 : #c0c0c0
+			color var(--noteHeaderInfo)
 
 		> .mobile
 			margin-right 8px
@@ -115,10 +113,4 @@ root(isDark)
 		> .visibility
 			margin-left 8px
 
-.bvonvjxbwzaiskogyhbwgyxvcgserpmu[data-darkmode]
-	root(true)
-
-.bvonvjxbwzaiskogyhbwgyxvcgserpmu:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 14caf19224..aeaf547b72 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -16,6 +16,13 @@
 	"popupFg": "#d6dce2",
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
 
+	"noteHeaderName": "#fff",
+	"noteHeaderBadgeFg": "#758188",
+	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
+	"noteHeaderAdminFg": "#f15f71",
+	"noteHeaderAdminBg": "#5d282e",
+	"noteHeaderAcct": "#606984",
+	"noteHeaderInfo": "#606984",
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
 	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 7a039ef294..d4803389da 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -16,6 +16,13 @@
 	"popupFg": "#586069",
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
 
+	"noteHeaderName": "#627079",
+	"noteHeaderBadgeFg": "#aaa",
+	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
+	"noteHeaderAdminFg": "#f15f71",
+	"noteHeaderAdminBg": "#5d282e",
+	"noteHeaderAcct": "#ccc",
+	"noteHeaderInfo": "#c0c0c0",
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
 	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",

From 49f8cfb0db79653caf0a1cb158041d51856912ef Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 02:35:13 +0900
Subject: [PATCH 388/539] wip

---
 .../app/desktop/views/components/notes.vue     | 18 +++++-------------
 src/client/theme/dark.json                     |  4 ++++
 src/client/theme/light.json                    |  4 ++++
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index d0148eef58..31b3a3ab18 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -216,9 +216,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-notes
 	.transition
 		.mk-notes-enter
 		.mk-notes-leave-to
@@ -235,8 +233,8 @@ root(isDark)
 			line-height 32px
 			font-size 14px
 			text-align center
-			color isDark ? #666b79 : #aaa
-			background isDark ? #242731 : #fdfdfd
+			color var(--dateDividerFg)
+			background var(--dateDividerBg)
 			border-bottom solid 1px var(--faceDivider)
 
 			span
@@ -266,15 +264,9 @@ root(isDark)
 			border-bottom-right-radius 6px
 
 			&:hover
-				background isDark ? #2e3440 : #f5f5f5
+				background var(--footerButtonHover)
 
 			&:active
-				background isDark ? #21242b : #eee
-
-.mk-notes[data-darkmode]
-	root(true)
-
-.mk-notes:not([data-darkmode])
-	root(false)
+				background var(--footerButtonActive)
 
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index aeaf547b72..b3d233d45f 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -15,6 +15,10 @@
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
+	"dateDividerBg": "#242731",
+	"dateDividerFg": "#666b79",
+	"footerButtonHover": "#2e3440",
+	"footerButtonActive": "#21242b",
 
 	"noteHeaderName": "#fff",
 	"noteHeaderBadgeFg": "#758188",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index d4803389da..87f384a200 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -15,6 +15,10 @@
 	"popupBg": "#fff",
 	"popupFg": "#586069",
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
+	"dateDividerBg": "#fdfdfd",
+	"dateDividerFg": "#aaa",
+	"footerButtonHover": "#f5f5f5",
+	"footerButtonActive": "#eee",
 
 	"noteHeaderName": "#627079",
 	"noteHeaderBadgeFg": "#aaa",

From 1eb6ad58d5699ec22b41265b4b8c687641015109 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 02:46:53 +0900
Subject: [PATCH 389/539] wip

---
 src/client/app/desktop/views/components/note-detail.vue | 4 ++--
 src/client/app/desktop/views/components/notes.note.vue  | 4 ++--
 src/client/app/desktop/views/pages/deck/deck.note.vue   | 4 ++--
 src/client/app/mobile/views/components/note-detail.vue  | 4 ++--
 src/client/app/mobile/views/components/note.vue         | 4 ++--
 src/client/theme/dark.json                              | 2 ++
 src/client/theme/halloween.json                         | 2 ++
 src/client/theme/light.json                             | 2 ++
 8 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 35eb6ac45d..5e7c8b42ca 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -263,8 +263,8 @@ root(isDark)
 			border-bottom 1px solid isDark ? #1c2023 : #eef0f2
 
 	> .renote
-		color #9dbb00
-		background isDark ? linear-gradient(to bottom, #314027 0%, #282c37 100%) : linear-gradient(to bottom, #edfde2 0%, #fff 100%)
+		color var(--renoteText)
+		background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
 
 		> p
 			margin 0
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 4f2b0241e8..17f7e2235a 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -357,8 +357,8 @@ root(isDark)
 		padding 16px 32px 8px 32px
 		line-height 28px
 		white-space pre
-		color #9dbb00
-		background isDark ? linear-gradient(to bottom, #314027 0%, #282c37 100%) : linear-gradient(to bottom, #edfde2 0%, #fff 100%)
+		color var(--renoteText)
+		background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
 
 		.avatar
 			display inline-block
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index a02636a42d..f1c4a5979a 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -246,8 +246,8 @@ root(isDark)
 		padding 8px 16px 0 16px
 		line-height 28px
 		white-space pre
-		color #9dbb00
-		background isDark ? linear-gradient(to bottom, #314027 0%, #282c37 100%) : linear-gradient(to bottom, #edfde2 0%, #fff 100%)
+		color var(--renoteText)
+		background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
 
 		.avatar
 			flex-shrink 0
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index f0a91e82d4..c56d10093d 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -266,8 +266,8 @@ root(isDark)
 			border-bottom 1px solid isDark ? #1c2023 : #eef0f2
 
 	> .renote
-		color #9dbb00
-		background isDark ? linear-gradient(to bottom, #314027 0%, #282c37 100%) : linear-gradient(to bottom, #edfde2 0%, #fff 100%)
+		color var(--renoteText)
+		background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
 
 		> p
 			margin 0
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index a8b733fae7..8b7c559997 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -256,8 +256,8 @@ root(isDark)
 		padding 8px 16px
 		line-height 28px
 		white-space pre
-		color #9dbb00
-		background isDark ? linear-gradient(to bottom, #314027 0%, #282c37 100%) : linear-gradient(to bottom, #edfde2 0%, #fff 100%)
+		color var(--renoteText)
+		background linear-gradient(to bottom, var(--renoteGradient) 0%, var(--face) 100%)
 
 		@media (min-width 500px)
 			padding 16px
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index b3d233d45f..533910de76 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -14,6 +14,8 @@
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
+	"renoteGradient": "#314027",
+	"renoteText": "#9dbb00",
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
 	"dateDividerBg": "#242731",
 	"dateDividerFg": "#666b79",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index d38bd849ed..18d214d041 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -12,6 +12,8 @@
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
+	"renoteGradient": "#5d2d1a",
+	"renoteText": "#ff6c00",
 	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
 	"desktopHeaderBg": "#0c0b19"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 87f384a200..df85fb973d 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -14,6 +14,8 @@
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
+	"renoteGradient": "#edfde2",
+	"renoteText": "#9dbb00",
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
 	"dateDividerBg": "#fdfdfd",
 	"dateDividerFg": "#aaa",

From 0ef64a6d0b7f95c2427536feee657164b759d0d3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 11:55:17 +0900
Subject: [PATCH 390/539] wip

---
 .../views/components/welcome-timeline.vue     |  2 +-
 .../desktop/views/components/note-detail.vue  | 36 +++++++++----------
 .../views/components/notes.note.sub.vue       |  2 +-
 .../desktop/views/components/notes.note.vue   | 14 ++++----
 .../views/pages/deck/deck.note.sub.vue        |  2 +-
 .../desktop/views/pages/deck/deck.note.vue    |  2 +-
 .../mobile/views/components/note-detail.vue   | 22 ++++++------
 .../app/mobile/views/components/note.sub.vue  |  2 +-
 .../app/mobile/views/components/note.vue      |  2 +-
 src/client/theme/dark.json                    |  7 ++++
 src/client/theme/halloween.json               |  6 ++--
 src/client/theme/light.json                   |  7 ++++
 12 files changed, 57 insertions(+), 47 deletions(-)

diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index 938ab602f0..ca1b6eb928 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -137,7 +137,7 @@ root(isDark)
 						overflow hidden
 						font-weight bold
 						text-overflow ellipsis
-						color isDark ? #fff : #627079
+						color var(--noteHeaderName)
 
 					> .username
 						margin 0 .5em 0 0
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 5e7c8b42ca..9222d8fab9 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -225,8 +225,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 root(isDark)
 	overflow hidden
 	text-align left
@@ -243,24 +241,24 @@ root(isDark)
 		text-align center
 		color #999
 		cursor pointer
-		background isDark ? #21242d : #fafafa
+		background var(--subNoteBg)
 		outline none
 		border none
-		border-bottom solid 1px isDark ? #1c2023 : #eef0f2
-		border-radius 6px 6px 0 0
+		border-bottom solid 1px var(--faceDivider)
+		border-radius var(--round) var(--round) 0 0
 
 		&:hover
-			background isDark ? #2e3440 : #f6f6f6
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
 		&:active
-			background isDark ? #21242b : #f0f0f0
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 		&:disabled
-			color isDark ? #21242b : #ccc
+			cursor wait
 
 	> .conversation
 		> *
-			border-bottom 1px solid isDark ? #1c2023 : #eef0f2
+			border-bottom 1px solid var(--faceDivider)
 
 	> .renote
 		color var(--renoteText)
@@ -287,7 +285,7 @@ root(isDark)
 			padding-top 8px
 
 	> .reply-to
-		border-bottom 1px solid isDark ? #1c2023 : #eef0f2
+		border-bottom 1px solid var(--faceDivider)
 
 	> article
 		padding 28px 32px 18px 32px
@@ -299,7 +297,7 @@ root(isDark)
 
 		&:hover
 			> footer > button
-				color isDark ? #707b97 : #888
+				color var(--noteActionsHighlighted)
 
 		> .avatar
 			width 60px
@@ -316,7 +314,7 @@ root(isDark)
 				display inline-block
 				margin 0
 				line-height 24px
-				color isDark ? #fff : #627079
+				color var(--noteHeaderName)
 				font-size 18px
 				font-weight 700
 				text-align left
@@ -394,20 +392,20 @@ root(isDark)
 				background transparent
 				border none
 				font-size 1em
-				color isDark ? #606984 : #ccc
+				color var(--noteActions)
 				cursor pointer
 
 				&:hover
-					color isDark ? #a1a8bf : #444
+					color var(--noteActionsHover)
 
 				&.replyButton:hover
-					color #0af
+					color var(--noteActionsReplyHover)
 
 				&.renoteButton:hover
-					color #8d0
+					color var(--noteActionsRenoteHover)
 
 				&.reactionButton:hover
-					color #fa0
+					color var(--noteActionsReactionHover)
 
 				> .count
 					display inline
@@ -415,11 +413,11 @@ root(isDark)
 					color #999
 
 				&.reacted, &.reacted:hover
-					color #fa0
+					color var(--noteActionsReactionHover)
 
 	> .replies
 		> *
-			border-top 1px solid isDark ? #1c2023 : #eef0f2
+			border-top 1px solid var(--faceDivider)
 
 .mk-note-detail[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index 8f01ddd43c..13e2991683 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -47,7 +47,7 @@ root(isDark)
 	margin 0
 	padding 16px 32px
 	font-size 0.9em
-	background isDark ? #21242d : #fcfcfc
+	background var(--subNoteBg)
 
 	> .avatar
 		flex-shrink 0
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 17f7e2235a..160de5199d 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -398,7 +398,7 @@ root(isDark)
 
 		&:hover
 			> .main > footer > button
-				color isDark ? #707b97 : #888
+				color var(--noteActionsHighlighted)
 
 		> .avatar
 			flex-shrink 0
@@ -500,22 +500,22 @@ root(isDark)
 					padding 0 8px
 					line-height 32px
 					font-size 1em
-					color isDark ? #606984 : #ddd
+					color var(--noteActions)
 					background transparent
 					border none
 					cursor pointer
 
 					&:hover
-						color isDark ? #a1a8bf : #444
+						color var(--noteActionsHover)
 
 					&.replyButton:hover
-						color #0af
+						color var(--noteActionsReplyHover)
 
 					&.renoteButton:hover
-						color #8d0
+						color var(--noteActionsRenoteHover)
 
 					&.reactionButton:hover
-						color #fa0
+						color var(--noteActionsReactionHover)
 
 					> .count
 						display inline
@@ -523,7 +523,7 @@ root(isDark)
 						color #999
 
 					&.reacted, &.reacted:hover
-						color #fa0
+						color var(--noteActionsReactionHover)
 
 	> .detail
 		padding-top 4px
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
index 3ba9ae914e..f1bf60d528 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
@@ -33,7 +33,7 @@ root(isDark)
 	display flex
 	padding 16px
 	font-size 10px
-	background isDark ? #21242d : #fcfcfc
+	background var(--subNoteBg)
 
 	&.smart
 		> .main
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index f1c4a5979a..ffb284fb42 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -402,7 +402,7 @@ root(isDark)
 					border none
 					box-shadow none
 					font-size 1em
-					color isDark ? #606984 : #ddd
+					color var(--noteActions)
 					cursor pointer
 
 					&:not(:last-child)
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index c56d10093d..472c18088d 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -223,8 +223,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 root(isDark)
 	overflow hidden
 	width 100%
@@ -248,22 +246,22 @@ root(isDark)
 		text-align center
 		color #999
 		cursor pointer
-		background isDark ? #21242d : #fafafa
+		background var(--subNoteBg)
 		outline none
 		border none
-		border-bottom solid 1px isDark ? #1c2023 : #eef0f2
+		border-bottom solid 1px var(--faceDivider)
 		border-radius 6px 6px 0 0
 		box-shadow none
 
 		&:hover
-			background isDark ? #16181d : #f6f6f6
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
-		&:disabled
-			color #ccc
+		&:active
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 	> .conversation
 		> *
-			border-bottom 1px solid isDark ? #1c2023 : #eef0f2
+			border-bottom 1px solid var(--faceDivider)
 
 	> .renote
 		color var(--renoteText)
@@ -290,7 +288,7 @@ root(isDark)
 			padding-top 8px
 
 	> .reply-to
-		border-bottom 1px solid isDark ? #1c2023 : #eef0f2
+		border-bottom 1px solid var(--faceDivider)
 
 	> article
 		padding 14px 16px 9px 16px
@@ -323,7 +321,7 @@ root(isDark)
 				> .name
 					display inline-block
 					margin .4em 0
-					color isDark ? #fff : #627079
+					color var(--noteHeaderName)
 					font-size 16px
 					font-weight bold
 					text-align left
@@ -407,7 +405,7 @@ root(isDark)
 				border none
 				box-shadow none
 				font-size 1em
-				color isDark ? #606984 : #ddd
+				color var(--noteActions)
 				cursor pointer
 
 				&:not(:last-child)
@@ -426,7 +424,7 @@ root(isDark)
 
 	> .replies
 		> *
-			border-top 1px solid isDark ? #1c2023 : #eef0f2
+			border-top 1px solid var(--faceDivider)
 
 .mk-note-detail[data-darkmode]
 	root(true)
diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue
index c25f827dad..2f38c9e97d 100644
--- a/src/client/app/mobile/views/components/note.sub.vue
+++ b/src/client/app/mobile/views/components/note.sub.vue
@@ -45,7 +45,7 @@ root(isDark)
 	display flex
 	padding 16px
 	font-size 10px
-	background isDark ? #21242d : #fcfcfc
+	background var(--subNoteBg)
 
 	@media (min-width 350px)
 		font-size 12px
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 8b7c559997..859fc88043 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -442,7 +442,7 @@ root(isDark)
 					border none
 					box-shadow none
 					font-size 1em
-					color isDark ? #606984 : #ddd
+					color var(--noteActions)
 					cursor pointer
 
 					&:not(:last-child)
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 533910de76..77a41228d0 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -14,8 +14,15 @@
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
+	"subNoteBg": "rgba(0, 0, 0, 0.18)",
 	"renoteGradient": "#314027",
 	"renoteText": "#9dbb00",
+	"noteActions": "#606984",
+	"noteActionsHover": "#a1a8bf",
+	"noteActionsReplyHover": "#0af",
+	"noteActionsRenoteHover": "#8d0",
+	"noteActionsReactionHover": "#fa0",
+	"noteActionsHighlighted": "#707b97",
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
 	"dateDividerBg": "#242731",
 	"dateDividerFg": "#666b79",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 18d214d041..7c26fbf6e6 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -7,9 +7,9 @@
 	"primary": "#fb8d4e",
 	"primaryForeground": "#fff",
 	"bg": "#1b1a35",
-	"face": "#282c37",
-	"faceHeader": "#313543",
-	"faceDivider": "rgba(0, 0, 0, 0.3)",
+	"face": "#2e2a3e",
+	"faceHeader": "#36314e",
+	"dateDividerBg": "#26253c",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
 	"renoteGradient": "#5d2d1a",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index df85fb973d..28cc71bdb7 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -14,8 +14,15 @@
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
+	"subNoteBg": "rgba(0, 0, 0, 0.01)",
 	"renoteGradient": "#edfde2",
 	"renoteText": "#9dbb00",
+	"noteActions": "#ddd",
+	"noteActionsHover": "#444",
+	"noteActionsReplyHover": "#0af",
+	"noteActionsRenoteHover": "#8d0",
+	"noteActionsReactionHover": "#fa0",
+	"noteActionsHighlighted": "#888",
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
 	"dateDividerBg": "#fdfdfd",
 	"dateDividerFg": "#aaa",

From df6c9b1a1cf7b4ff8cdbf562e004bbf3635d841b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 12:55:10 +0900
Subject: [PATCH 391/539] wip

---
 .../components/games/reversi/reversi.room.vue |   6 +-
 .../app/common/views/components/index.ts      |   2 -
 .../app/common/views/components/switch.vue    | 199 ------------------
 .../app/common/views/components/ui/button.vue |   2 -
 .../app/common/views/components/ui/switch.vue |  17 +-
 .../views/components/settings.profile.vue     |   8 +-
 .../app/desktop/views/components/settings.vue |  44 ++--
 .../views/pages/deck/deck.tl-column.vue       |   4 +-
 src/client/theme/dark.json                    |   5 +-
 src/client/theme/halloween.json               |   1 +
 src/client/theme/light.json                   |   5 +-
 11 files changed, 42 insertions(+), 251 deletions(-)
 delete mode 100644 src/client/app/common/views/components/switch.vue

diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index 072f3eda12..b407046ba9 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -47,9 +47,9 @@
 			</header>
 
 			<div>
-				<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
-				<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
-				<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
+				<ui-switch v-model="game.settings.isLlotheo" @change="updateSettings">%i18n:@is-llotheo%</ui-switch>
+				<ui-switch v-model="game.settings.loopedBoard" @change="updateSettings">%i18n:@looped-map%</ui-switch>
+				<ui-switch v-model="game.settings.canPutEverywhere" @change="updateSettings">%i18n:@can-put-everywhere%</ui-switch>
 			</div>
 		</div>
 
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 0a3d0d0ae6..4c1c0afa80 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -30,7 +30,6 @@ import messagingRoom from './messaging-room.vue';
 import urlPreview from './url-preview.vue';
 import twitterSetting from './twitter-setting.vue';
 import fileTypeIcon from './file-type-icon.vue';
-import Switch from './switch.vue';
 import Reversi from './games/reversi/reversi.vue';
 import welcomeTimeline from './welcome-timeline.vue';
 import uiInput from './ui/input.vue';
@@ -74,7 +73,6 @@ Vue.component('mk-messaging-room', messagingRoom);
 Vue.component('mk-url-preview', urlPreview);
 Vue.component('mk-twitter-setting', twitterSetting);
 Vue.component('mk-file-type-icon', fileTypeIcon);
-Vue.component('mk-switch', Switch);
 Vue.component('mk-reversi', Reversi);
 Vue.component('mk-welcome-timeline', welcomeTimeline);
 Vue.component('ui-input', uiInput);
diff --git a/src/client/app/common/views/components/switch.vue b/src/client/app/common/views/components/switch.vue
deleted file mode 100644
index aa60331cbc..0000000000
--- a/src/client/app/common/views/components/switch.vue
+++ /dev/null
@@ -1,199 +0,0 @@
-<template>
-<div
-	class="mk-switch"
-	:class="{ disabled, checked }"
-	role="switch"
-	:aria-checked="checked"
-	:aria-disabled="disabled"
-	@click="switchValue"
-	@mouseover="mouseenter"
->
-	<input
-		type="checkbox"
-		@change="handleChange"
-		ref="input"
-		:disabled="disabled"
-		@keydown.enter="switchValue"
-	>
-	<span class="button">
-		<span :style="{ transform }"></span>
-	</span>
-	<span class="label">
-		<span :aria-hidden="!checked">{{ text }}</span>
-		<p :aria-hidden="!checked">
-			<slot></slot>
-		</p>
-	</span>
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-export default Vue.extend({
-	props: {
-		value: {
-			type: Boolean,
-			default: false
-		},
-		disabled: {
-			type: Boolean,
-			default: false
-		},
-		text: String
-	},/*
-	created() {
-		if (!~[true, false].indexOf(this.value)) {
-			this.$emit('input', false);
-		}
-	},*/
-	computed: {
-		checked(): boolean {
-			return this.value;
-		},
-		transform(): string {
-			return this.checked ? 'translate3d(20px, 0, 0)' : '';
-		}
-	},
-	watch: {
-		value() {
-			(this.$el).style.transition = 'all 0.3s';
-			(this.$refs.input as any).checked = this.checked;
-		}
-	},
-	mounted() {
-		(this.$refs.input as any).checked = this.checked;
-	},
-	methods: {
-		mouseenter() {
-			(this.$el).style.transition = 'all 0s';
-		},
-		handleChange() {
-			(this.$el).style.transition = 'all 0.3s';
-			this.$emit('input', !this.checked);
-			this.$emit('change', !this.checked);
-			this.$nextTick(() => {
-				// set input's checked property
-				// in case parent refuses to change component's value
-				(this.$refs.input as any).checked = this.checked;
-			});
-		},
-		switchValue() {
-			!this.disabled && this.handleChange();
-		}
-	}
-});
-</script>
-
-<style lang="stylus" scoped>
-
-
-root(isDark)
-	display flex
-	margin 12px 0
-	cursor pointer
-	transition all 0.3s
-
-	> *
-		user-select none
-
-	&.disabled
-		opacity 0.6
-		cursor not-allowed
-
-	&.checked
-		> .button
-			background-color var(--primary)
-			border-color var(--primary)
-
-		> .label
-			> span
-				color var(--primary)
-
-		&:hover
-			> .label
-				> span
-					color var(--primaryDarken10)
-
-			> .button
-				background var(--primaryDarken10)
-				border-color var(--primaryDarken10)
-
-	&:hover
-		> .label
-			> span
-				color isDark ? #fff : #2e3338
-
-		> .button
-			$color = isDark ? #15181d : #ced2da
-			background $color
-			border-color $color
-
-	> input
-		position absolute
-		width 0
-		height 0
-		opacity 0
-		margin 0
-
-		&:focus + .button
-			&:after
-				content ""
-				pointer-events none
-				position absolute
-				top -5px
-				right -5px
-				bottom -5px
-				left -5px
-				border 2px solid var(--primaryAlpha03)
-				border-radius 14px
-
-	> .button
-		$color = isDark ? #1c1f25 : #dcdfe6
-
-		display inline-block
-		margin 0
-		width 40px
-		min-width 40px
-		height 20px
-		min-height 20px
-		background $color
-		border 1px solid $color
-		outline none
-		border-radius 10px
-		transition inherit
-
-		> *
-			position absolute
-			top 1px
-			left 1px
-			border-radius 100%
-			transition transform 0.3s
-			width 16px
-			height 16px
-			background-color #fff
-
-	> .label
-		margin-left 8px
-		display block
-		font-size 15px
-		cursor pointer
-		transition inherit
-
-		> span
-			display block
-			line-height 20px
-			color isDark ? #c4ccd2 : #4a535a
-			transition inherit
-
-		> p
-			margin 0
-			//font-size 90%
-			color isDark ? #78858e : #9daab3
-
-.mk-switch[data-darkmode]
-	root(true)
-
-.mk-switch:not([data-darkmode])
-	root(false)
-
-</style>
diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index ae59214038..c411f0f5c9 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -32,8 +32,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 root(isDark, fill)
 	> button
 		display block
diff --git a/src/client/app/common/views/components/ui/switch.vue b/src/client/app/common/views/components/ui/switch.vue
index e358713d8f..2ee787cb76 100644
--- a/src/client/app/common/views/components/ui/switch.vue
+++ b/src/client/app/common/views/components/ui/switch.vue
@@ -56,9 +56,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.ui-switch
 	display flex
 	margin 32px 0
 	cursor pointer
@@ -99,7 +97,7 @@ root(isDark)
 		margin 3px 0 0 0
 		width 34px
 		height 14px
-		background isDark ? rgba(#fff, 0.15) : rgba(#000, 0.25)
+		background var(--switchTrack)
 		outline none
 		border-radius 14px
 		transition inherit
@@ -125,18 +123,11 @@ root(isDark)
 		> span
 			display block
 			line-height 20px
-			color isDark ? #c4ccd2 : rgba(#000, 0.75)
+			color currentColor
 			transition inherit
 
 		> p
 			margin 0
-			//font-size 90%
-			color isDark ? #78858e : #9daab3
-
-.ui-switch[data-darkmode]
-	root(true)
-
-.ui-switch:not([data-darkmode])
-	root(false)
+			opacity 0.7
 
 </style>
diff --git a/src/client/app/desktop/views/components/settings.profile.vue b/src/client/app/desktop/views/components/settings.profile.vue
index d47b5b224b..9dd2798557 100644
--- a/src/client/app/desktop/views/components/settings.profile.vue
+++ b/src/client/app/desktop/views/components/settings.profile.vue
@@ -24,13 +24,13 @@
 	<button class="ui primary" @click="save">%i18n:@save%</button>
 	<section>
 		<h2>%i18n:@locked-account%</h2>
-		<mk-switch v-model="$store.state.i.isLocked" @change="onChangeIsLocked" text="%i18n:@is-locked%"/>
+		<ui-switch v-model="$store.state.i.isLocked" @change="onChangeIsLocked">%i18n:@is-locked%</ui-switch>
 	</section>
 	<section>
 		<h2>%i18n:@other%</h2>
-		<mk-switch v-model="$store.state.i.isBot" @change="onChangeIsBot" text="%i18n:@is-bot%"/>
-		<mk-switch v-model="$store.state.i.isCat" @change="onChangeIsCat" text="%i18n:@is-cat%"/>
-		<mk-switch v-model="alwaysMarkNsfw" text="%i18n:common.always-mark-nsfw%"/>
+		<ui-switch v-model="$store.state.i.isBot" @change="onChangeIsBot">%i18n:@is-bot%</ui-switch>
+		<ui-switch v-model="$store.state.i.isCat" @change="onChangeIsCat">%i18n:@is-cat%</ui-switch>
+		<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
 	</section>
 </div>
 </template>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 4b8ee3c9cd..4efaa75c4b 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -30,7 +30,7 @@
 
 			<section>
 				<header>%i18n:@note-visibility%</header>
-				<mk-switch v-model="rememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
+				<ui-switch v-model="rememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
 				<section>
 					<header>%i18n:@default-note-visibility%</header>
 					<ui-select v-model="defaultNoteVisibility">
@@ -59,30 +59,30 @@
 			<div class="div">
 				<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
 				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
-				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
-				<mk-switch v-model="useShadow" text="%i18n:@use-shadow%"/>
-				<mk-switch v-model="roundedCorners" text="%i18n:@rounded-corners%"/>
-				<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
-				<mk-switch v-model="reduceMotion" text="%i18n:common.reduce-motion%"/>
-				<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
-				<mk-switch v-model="showFullAcct" text="%i18n:common.show-full-acct%"/>
-				<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
-				<mk-switch v-model="iLikeSushi" text="%i18n:common.i-like-sushi%"/>
+				<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
+				<ui-switch v-model="useShadow">%i18n:@use-shadow%</ui-switch>
+				<ui-switch v-model="roundedCorners">%i18n:@rounded-corners%</ui-switch>
+				<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
+				<ui-switch v-model="reduceMotion">%i18n:common.reduce-motion%</ui-switch>
+				<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
+				<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
+				<ui-switch v-model="gradientWindowHeader">%i18n:@gradient-window-header%</ui-switch>
+				<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 			</div>
-			<mk-switch v-model="showPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
-			<mk-switch v-model="suggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
-			<mk-switch v-model="showClockOnHeader" text="%i18n:@show-clock-on-header%"/>
-			<mk-switch v-model="alwaysShowNsfw" text="%i18n:common.always-show-nsfw%"/>
-			<mk-switch v-model="showReplyTarget" text="%i18n:@show-reply-target%"/>
-			<mk-switch v-model="showMyRenotes" text="%i18n:@show-my-renotes%"/>
-			<mk-switch v-model="showRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
-			<mk-switch v-model="showLocalRenotes" text="%i18n:@show-local-renotes%"/>
+			<ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch>
+			<ui-switch v-model="suggestRecentHashtags">%i18n:@suggest-recent-hashtags%</ui-switch>
+			<ui-switch v-model="showClockOnHeader">%i18n:@show-clock-on-header%</ui-switch>
+			<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw%</ui-switch>
+			<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
+			<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
+			<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
+			<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
 			<mk-switch v-model="showMaps" text="%i18n:@show-maps%">
 				<span>%i18n:@show-maps-desc%</span>
 			</mk-switch>
-			<mk-switch v-model="disableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
-			<mk-switch v-model="games_reversi_showBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
-			<mk-switch v-model="games_reversi_useContrastStones" text="%i18n:common.use-contrast-reversi-stones%"/>
+			<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
+			<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
+			<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
 		</section>
 
 		<section class="web" v-show="page == 'web'">
@@ -102,7 +102,7 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@mobile%</h1>
-			<mk-switch v-model="disableViaMobile" text="%i18n:@disable-via-mobile%"/>
+			<ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
 		</section>
 
 		<section class="web" v-show="page == 'web'">
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl-column.vue b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
index 550b1be628..d245e3ecf5 100644
--- a/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
@@ -11,8 +11,8 @@
 	</span>
 
 	<div class="editor" style="padding:0 12px" v-if="edit">
-		<mk-switch v-model="column.isMediaOnly" @change="onChangeSettings" text="%i18n:@is-media-only%"/>
-		<mk-switch v-model="column.isMediaView" @change="onChangeSettings" text="%i18n:@is-media-view%"/>
+		<ui-switch v-model="column.isMediaOnly" @change="onChangeSettings">%i18n:@is-media-only%</ui-switch>
+		<ui-switch v-model="column.isMediaView" @change="onChangeSettings">%i18n:@is-media-view%</ui-switch>
 	</div>
 	<x-list-tl v-if="column.type == 'list'" :list="column.list" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
 	<x-hashtag-tl v-if="column.type == 'hashtag'" :tag-tl="$store.state.settings.tagTimelines.find(x => x.id == column.tagTlId)" :media-only="column.isMediaOnly" :media-view="column.isMediaView"/>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 77a41228d0..a3877093f5 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -1,7 +1,8 @@
 {
 	"meta": {
 		"id": "9978f7f9-5616-44fd-a704-cc5985efdd63",
-		"name": "Dark"
+		"name": "Dark",
+		"author": "syuilo"
 	},
 	"primary": "#fb4e4e",
 	"primaryForeground": "#fff",
@@ -28,7 +29,7 @@
 	"dateDividerFg": "#666b79",
 	"footerButtonHover": "#2e3440",
 	"footerButtonActive": "#21242b",
-
+	"switchTrack": "rgba(255, 255, 255, 0.15)",
 	"noteHeaderName": "#fff",
 	"noteHeaderBadgeFg": "#758188",
 	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 7c26fbf6e6..b156eb1aa8 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -2,6 +2,7 @@
 	"meta": {
 		"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
 		"name": "Halloween",
+		"author": "syuilo",
 		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63"
 	},
 	"primary": "#fb8d4e",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 28cc71bdb7..7dcf2d3f44 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -1,7 +1,8 @@
 {
 	"meta": {
 		"id": "406cfea3-a4e7-486c-9057-30ede1353c3f",
-		"name": "Light"
+		"name": "Light",
+		"author": "syuilo"
 	},
 	"primary": "#fb4e4e",
 	"primaryForeground": "#fff",
@@ -28,7 +29,7 @@
 	"dateDividerFg": "#aaa",
 	"footerButtonHover": "#f5f5f5",
 	"footerButtonActive": "#eee",
-
+	"switchTrack": "rgba(0, 0, 0, 0.25)",
 	"noteHeaderName": "#627079",
 	"noteHeaderBadgeFg": "#aaa",
 	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",

From 76a25917c03f3bd4e46ff53300f5a1a1fc8a883a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 13:54:53 +0900
Subject: [PATCH 392/539] wip

---
 src/client/app/desktop/views/components/notes.vue | 4 ++--
 src/client/theme/dark.json                        | 2 --
 src/client/theme/light.json                       | 2 --
 3 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 31b3a3ab18..84b13ed84e 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -264,9 +264,9 @@ export default Vue.extend({
 			border-bottom-right-radius 6px
 
 			&:hover
-				background var(--footerButtonHover)
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
 			&:active
-				background var(--footerButtonActive)
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index a3877093f5..c9e9835136 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -27,8 +27,6 @@
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
 	"dateDividerBg": "#242731",
 	"dateDividerFg": "#666b79",
-	"footerButtonHover": "#2e3440",
-	"footerButtonActive": "#21242b",
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
 	"noteHeaderName": "#fff",
 	"noteHeaderBadgeFg": "#758188",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 7dcf2d3f44..6aef10d9a6 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -27,8 +27,6 @@
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
 	"dateDividerBg": "#fdfdfd",
 	"dateDividerFg": "#aaa",
-	"footerButtonHover": "#f5f5f5",
-	"footerButtonActive": "#eee",
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
 	"noteHeaderName": "#627079",
 	"noteHeaderBadgeFg": "#aaa",

From 4fe2f29478fbf81cb21450170b551ed21211a854 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 14:32:48 +0900
Subject: [PATCH 393/539] wip

---
 .../app/desktop/views/components/calendar.vue |  4 ++--
 .../desktop/views/components/note-detail.vue  | 18 +++++---------
 .../desktop/views/components/note-preview.vue |  2 +-
 .../views/components/notes.note.sub.vue       |  2 +-
 .../desktop/views/components/notes.note.vue   |  6 ++---
 .../desktop/views/components/post-form.vue    |  8 +++----
 .../app/desktop/views/components/timeline.vue | 23 +++++-------------
 .../views/components/widget-container.vue     |  4 ++--
 .../desktop/views/pages/deck/deck.column.vue  |  4 ++--
 .../desktop/views/pages/deck/deck.note.vue    |  6 ++---
 .../views/pages/deck/deck.notification.vue    |  4 ++--
 .../mobile/views/components/note-detail.vue   | 20 ++++++----------
 .../mobile/views/components/note-preview.vue  |  2 +-
 .../app/mobile/views/components/note.sub.vue  |  2 +-
 .../app/mobile/views/components/note.vue      |  6 ++---
 .../mobile/views/components/notification.vue  |  4 ++--
 src/client/theme/dark.json                    | 24 +++++++++++++------
 src/client/theme/halloween.json               |  2 +-
 src/client/theme/light.json                   | 24 +++++++++++++------
 19 files changed, 80 insertions(+), 85 deletions(-)

diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index cd73ab350b..6b753068fa 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -166,10 +166,10 @@ root(isDark)
 		width 42px
 		font-size 0.9em
 		line-height 42px
-		color isDark ? #9baec8 : #ccc
+		color var(--faceTextButton)
 
 		&:hover
-			color isDark ? #b2c1d5 : #aaa
+			color var(--faceTextButtonHover)
 
 		&:active
 			color isDark ? #b2c1d5 : #999
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 9222d8fab9..50ad793f0b 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -225,7 +225,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-note-detail
 	overflow hidden
 	text-align left
 	background var(--face)
@@ -327,14 +327,14 @@ root(isDark)
 				display block
 				text-align left
 				margin 0
-				color isDark ? #606984 : #ccc
+				color var(--noteHeaderAcct)
 
 			> .time
 				position absolute
 				top 0
 				right 32px
 				font-size 1em
-				color isDark ? #606984 : #c0c0c0
+				color var(--noteHeaderInfo)
 
 		> .body
 			padding 8px 0
@@ -345,7 +345,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
@@ -358,14 +358,14 @@ root(isDark)
 					padding 0
 					overflow-wrap break-word
 					font-size 1.5em
-					color isDark ? #fff : #717171
+					color var(--noteText)
 
 				> .renote
 					margin 8px 0
 
 					> *
 						padding 16px
-						border dashed 1px #c0dac6
+						border dashed 1px vat(--quoteBorder)
 						border-radius 8px
 
 				> .location
@@ -419,10 +419,4 @@ root(isDark)
 		> *
 			border-top 1px solid var(--faceDivider)
 
-.mk-note-detail[data-darkmode]
-	root(true)
-
-.mk-note-detail:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue
index 6c84165356..f64657fb47 100644
--- a/src/client/app/desktop/views/components/note-preview.vue
+++ b/src/client/app/desktop/views/components/note-preview.vue
@@ -71,7 +71,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index 13e2991683..70709f8738 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -72,7 +72,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 160de5199d..5daaadb971 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -426,7 +426,7 @@ root(isDark)
 					margin 0
 					padding 0
 					overflow-wrap break-word
-					color isDark ? #fff : #717171
+					color var(--noteText)
 
 					> .text
 						margin-right 8px
@@ -439,7 +439,7 @@ root(isDark)
 						margin 0
 						padding 0
 						overflow-wrap break-word
-						color isDark ? #fff : #717171
+						color var(--noteText)
 
 						>>> .title
 							display block
@@ -491,7 +491,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px isDark ? #4e945e : #c0dac6
+							border dashed 1px vat(--quoteBorder)
 							border-radius 8px
 
 			> footer
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index fdd6e75318..5a5f9d63db 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -434,12 +434,10 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 root(isDark)
 	display block
 	padding 16px
-	background isDark ? #282C37 : var(--primaryLighten95)
+	background var(--desktopPostFormBg)
 
 	&:after
 		content ""
@@ -453,8 +451,8 @@ root(isDark)
 			width 100%
 			padding 12px
 			font-size 16px
-			color isDark ? #fff : #333
-			background isDark ? #191d23 : #fff
+			color var(--desktopPostFormTextareaFg)
+			background var(--desktopPostFormTextareaBg)
 			outline none
 			border solid 1px var(--primaryAlpha01)
 			border-radius 4px
diff --git a/src/client/app/desktop/views/components/timeline.vue b/src/client/app/desktop/views/components/timeline.vue
index 7800eae52d..3e4c45d228 100644
--- a/src/client/app/desktop/views/components/timeline.vue
+++ b/src/client/app/desktop/views/components/timeline.vue
@@ -175,9 +175,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-timeline
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -187,7 +185,7 @@ root(isDark)
 		padding 0 8px
 		z-index 10
 		background var(--faceHeader)
-		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
+		box-shadow 0 1px var(--desktopTimelineHeaderShadow)
 
 		> .buttons
 			position absolute
@@ -200,7 +198,7 @@ root(isDark)
 				padding 0 8px
 				font-size 0.9em
 				line-height 42px
-				color isDark ? #9baec8 : #ccc
+				color var(--faceTextButton)
 
 				> .badge
 					position absolute
@@ -210,10 +208,7 @@ root(isDark)
 					color var(--primary)
 
 				&:hover
-					color isDark ? #b2c1d5 : #aaa
-
-				&:active
-					color isDark ? #b2c1d5 : #999
+					color var(--faceTextButtonHover)
 
 				&[data-active]
 					color var(--primary)
@@ -252,16 +247,10 @@ root(isDark)
 					background var(--primary)
 
 			&:not([data-active])
-				color isDark ? #9aa2a7 : #6f7477
+				color var(--desktopTimelineSrc)
 				cursor pointer
 
 				&:hover
-					color isDark ? #d9dcde : #525a5f
-
-.mk-timeline[data-darkmode]
-	root(true)
-
-.mk-timeline:not([data-darkmode])
-	root(false)
+					color var(--desktopTimelineSrcHover)
 
 </style>
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index d17b9c91d8..156823799f 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -72,10 +72,10 @@ root(isDark)
 			width 42px
 			font-size 0.9em
 			line-height 42px
-			color isDark ? #9baec8 : #ccc
+			color var(--faceTextButton)
 
 			&:hover
-				color isDark ? #b2c1d5 : #aaa
+				color var(--faceTextButtonHover)
 
 			&:active
 				color isDark ? #b2c1d5 : #999
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 1cf8900ee5..fb521db25b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -344,10 +344,10 @@ root(isDark)
 			width $header-height
 			line-height $header-height
 			font-size 16px
-			color isDark ? #9baec8 : #ccc
+			color var(--faceTextButton)
 
 			&:hover
-				color isDark ? #b2c1d5 : #aaa
+				color var(--faceTextButtonHover)
 
 			&:active
 				color isDark ? #b2c1d5 : #999
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index ffb284fb42..bdc4368e7b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -309,7 +309,7 @@ root(isDark)
 					margin 0
 					padding 0
 					overflow-wrap break-word
-					color isDark ? #fff : #717171
+					color var(--noteText)
 
 					> .text
 						margin-right 8px
@@ -321,7 +321,7 @@ root(isDark)
 						margin 0
 						padding 0
 						overflow-wrap break-word
-						color isDark ? #fff : #717171
+						color var(--noteText)
 
 						>>> .title
 							display block
@@ -387,7 +387,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px isDark ? #4e945e : #c0dac6
+							border dashed 1px vat(--quoteBorder)
 							border-radius 8px
 
 				> .app
diff --git a/src/client/app/desktop/views/pages/deck/deck.notification.vue b/src/client/app/desktop/views/pages/deck/deck.notification.vue
index d0093ff282..ff10ac2aa6 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notification.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notification.vue
@@ -146,10 +146,10 @@ root(isDark)
 					font-size 0.9em
 
 			> .note-preview
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 			> .note-ref
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				[data-fa]
 					font-size 1em
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 472c18088d..ade518b1fc 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -223,7 +223,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-note-detail
 	overflow hidden
 	width 100%
 	text-align left
@@ -334,7 +334,7 @@ root(isDark)
 					display block
 					text-align left
 					margin 0
-					color isDark ? #606984 : #ccc
+					color var(--noteHeaderAcct)
 
 		> .body
 			padding 8px 0
@@ -345,7 +345,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
@@ -358,7 +358,7 @@ root(isDark)
 					padding 0
 					overflow-wrap break-word
 					font-size 16px
-					color isDark ? #fff : #717171
+					color var(--noteText)
 
 					@media (min-width 500px)
 						font-size 24px
@@ -368,7 +368,7 @@ root(isDark)
 
 					> *
 						padding 16px
-						border dashed 1px #c0dac6
+						border dashed 1px vat(--quoteBorder)
 						border-radius 8px
 
 				> .location
@@ -393,7 +393,7 @@ root(isDark)
 
 		> .time
 			font-size 16px
-			color isDark ? #606984 : #c0c0c0
+			color var(--noteHeaderInfo)
 
 		> footer
 			font-size 1.2em
@@ -412,7 +412,7 @@ root(isDark)
 					margin-right 28px
 
 				&:hover
-					color isDark ? #9198af : #666
+					color var(--noteActionsHover)
 
 				> .count
 					display inline
@@ -426,10 +426,4 @@ root(isDark)
 		> *
 			border-top 1px solid var(--faceDivider)
 
-.mk-note-detail[data-darkmode]
-	root(true)
-
-.mk-note-detail:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue
index 4c03593a9e..0b3278ff41 100644
--- a/src/client/app/mobile/views/components/note-preview.vue
+++ b/src/client/app/mobile/views/components/note-preview.vue
@@ -88,7 +88,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue
index 2f38c9e97d..8c2e3b496d 100644
--- a/src/client/app/mobile/views/components/note.sub.vue
+++ b/src/client/app/mobile/views/components/note.sub.vue
@@ -95,7 +95,7 @@ root(isDark)
 				margin 0
 				padding 0
 				overflow-wrap break-word
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				> .text
 					margin-right 8px
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 859fc88043..ed175b4f6f 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -349,7 +349,7 @@ root(isDark)
 					margin 0
 					padding 0
 					overflow-wrap break-word
-					color isDark ? #fff : #717171
+					color var(--noteText)
 
 					> .text
 						margin-right 8px
@@ -361,7 +361,7 @@ root(isDark)
 						margin 0
 						padding 0
 						overflow-wrap break-word
-						color isDark ? #fff : #717171
+						color var(--noteText)
 
 						>>> .title
 							display block
@@ -427,7 +427,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px isDark ? #4e945e : #c0dac6
+							border dashed 1px vat(--quoteBorder)
 							border-radius 8px
 
 				> .app
diff --git a/src/client/app/mobile/views/components/notification.vue b/src/client/app/mobile/views/components/notification.vue
index ee90c6b46b..7b73012e06 100644
--- a/src/client/app/mobile/views/components/notification.vue
+++ b/src/client/app/mobile/views/components/notification.vue
@@ -158,10 +158,10 @@ root(isDark)
 					font-size 0.9em
 
 			> .note-preview
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 			> .note-ref
-				color isDark ? #fff : #717171
+				color var(--noteText)
 
 				[data-fa]
 					font-size 1em
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index c9e9835136..88bde9d684 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -13,11 +13,22 @@
 	"face": "#282c37",
 	"faceHeader": "#313543",
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
+	"faceTextButton": "#9baec8",
+	"faceTextButtonHover": "#b2c1d5",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
 	"renoteGradient": "#314027",
 	"renoteText": "#9dbb00",
+	"quoteBorder": "#4e945e",
+	"noteText": "#fff",
+	"noteHeaderName": "#fff",
+	"noteHeaderBadgeFg": "#758188",
+	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
+	"noteHeaderAdminFg": "#f15f71",
+	"noteHeaderAdminBg": "#5d282e",
+	"noteHeaderAcct": "#606984",
+	"noteHeaderInfo": "#606984",
 	"noteActions": "#606984",
 	"noteActionsHover": "#a1a8bf",
 	"noteActionsReplyHover": "#0af",
@@ -28,13 +39,6 @@
 	"dateDividerBg": "#242731",
 	"dateDividerFg": "#666b79",
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
-	"noteHeaderName": "#fff",
-	"noteHeaderBadgeFg": "#758188",
-	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
-	"noteHeaderAdminFg": "#f15f71",
-	"noteHeaderAdminBg": "#5d282e",
-	"noteHeaderAcct": "#606984",
-	"noteHeaderInfo": "#606984",
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
 	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
@@ -43,6 +47,12 @@
 	"cwButtonHoverBg": "#707b97",
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 	"desktopHeaderBg": "#313543",
+	"desktopPostFormBg": "@face",
+	"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
+	"desktopPostFormTextareaFg": "#fff",
+	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
+	"desktopTimelineSrc": "@faceTextButton",
+	"desktopTimelineSrcHover": "@faceTextButtonHover",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index b156eb1aa8..474fc7ea8f 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -8,7 +8,7 @@
 	"primary": "#fb8d4e",
 	"primaryForeground": "#fff",
 	"bg": "#1b1a35",
-	"face": "#2e2a3e",
+	"face": "#322e44",
 	"faceHeader": "#36314e",
 	"dateDividerBg": "#26253c",
 	"popupBg": "#2c303c",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 6aef10d9a6..3374a62e36 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -13,11 +13,22 @@
 	"face": "#fff",
 	"faceHeader": "#fff",
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
+	"faceTextButton": "#ccc",
+	"faceTextButtonHover": "#aaa",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
 	"renoteGradient": "#edfde2",
 	"renoteText": "#9dbb00",
+	"quoteBorder": "#c0dac6",
+	"noteText": "#717171",
+	"noteHeaderName": "#627079",
+	"noteHeaderBadgeFg": "#aaa",
+	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
+	"noteHeaderAdminFg": "#f15f71",
+	"noteHeaderAdminBg": "#5d282e",
+	"noteHeaderAcct": "#ccc",
+	"noteHeaderInfo": "#c0c0c0",
 	"noteActions": "#ddd",
 	"noteActionsHover": "#444",
 	"noteActionsReplyHover": "#0af",
@@ -28,13 +39,6 @@
 	"dateDividerBg": "#fdfdfd",
 	"dateDividerFg": "#aaa",
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
-	"noteHeaderName": "#627079",
-	"noteHeaderBadgeFg": "#aaa",
-	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
-	"noteHeaderAdminFg": "#f15f71",
-	"noteHeaderAdminBg": "#5d282e",
-	"noteHeaderAcct": "#ccc",
-	"noteHeaderInfo": "#c0c0c0",
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
 	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
@@ -43,6 +47,12 @@
 	"cwButtonHoverBg": "#bbc4ce",
 	"reactionPickerButtonHoverBg": "#eee",
 	"desktopHeaderBg": "#f7f7f7",
+	"desktopPostFormBg": "#fff6f6",
+	"desktopPostFormTextareaBg": "#fff",
+	"desktopPostFormTextareaFg": "#333",
+	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
+	"desktopTimelineSrc": "#6f7477",
+	"desktopTimelineSrcHover": "#525a5f",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From 7b8a2aef0f9ed4d848d749769fd9dc6774b1e65a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 14:52:10 +0900
Subject: [PATCH 394/539] wip

---
 locales/ja-JP.yml                             |  1 -
 .../app/desktop/views/components/settings.vue |  8 +-------
 .../views/components/widget-container.vue     | 20 +++----------------
 .../app/desktop/views/components/window.vue   | 15 ++++----------
 .../desktop/views/pages/deck/deck.column.vue  |  2 +-
 .../pages/user/user.followers-you-know.vue    |  2 +-
 .../desktop/views/pages/user/user.friends.vue |  2 +-
 .../desktop/views/pages/user/user.photos.vue  |  2 +-
 src/client/app/store.ts                       |  1 -
 src/client/theme/dark.json                    |  3 +++
 src/client/theme/light.json                   |  3 +++
 11 files changed, 18 insertions(+), 41 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index db2a155221..f5d0a180d8 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -784,7 +784,6 @@ desktop/views/components/settings.vue:
   rounded-corners: "UIの角を丸める"
   circle-icons: "円形のアイコンを使用"
   contrasted-acct: "ユーザー名にコントラストを付ける"
-  gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
   post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
   suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
   show-clock-on-header: "右上に時計を表示する"
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 4efaa75c4b..e95e7a735d 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -66,7 +66,6 @@
 				<ui-switch v-model="reduceMotion">%i18n:common.reduce-motion%</ui-switch>
 				<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 				<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
-				<ui-switch v-model="gradientWindowHeader">%i18n:@gradient-window-header%</ui-switch>
 				<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 			</div>
 			<ui-switch v-model="showPostFormOnTopOfTl">%i18n:@post-form-on-timeline%</ui-switch>
@@ -421,12 +420,7 @@ export default Vue.extend({
 		disableViaMobile: {
 			get() { return this.$store.state.settings.disableViaMobile; },
 			set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
-		},
-
-		gradientWindowHeader: {
-			get() { return this.$store.state.settings.gradientWindowHeader; },
-			set(value) { this.$store.dispatch('settings/set', { key: 'gradientWindowHeader', value }); }
-		},
+		}
 	},
 	created() {
 		(this as any).os.getMeta().then(meta => {
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index 156823799f..cfcb2785c5 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="mk-widget-container" :class="{ naked }">
-	<header :class="{ withGradient }" v-if="showHeader">
+	<header v-if="showHeader">
 		<div class="title"><slot name="header"></slot></div>
 		<slot name="func"></slot>
 	</header>
@@ -20,15 +20,6 @@ export default Vue.extend({
 			type: Boolean,
 			default: false
 		}
-	},
-	computed: {
-		withGradient(): boolean {
-			return this.$store.getters.isSignedIn
-				? this.$store.state.settings.gradientWindowHeader != null
-					? this.$store.state.settings.gradientWindowHeader
-					: false
-				: false;
-		}
 	}
 });
 </script>
@@ -54,7 +45,7 @@ root(isDark)
 			line-height 42px
 			font-size 0.9em
 			font-weight bold
-			color isDark ? #e3e5e8 : #888
+			color var(--faceHeaderText)
 			box-shadow 0 1px rgba(#000, 0.07)
 
 			> [data-fa]
@@ -78,12 +69,7 @@ root(isDark)
 				color var(--faceTextButtonHover)
 
 			&:active
-				color isDark ? #b2c1d5 : #999
-
-		&.withGradient
-			> .title
-				background isDark ? linear-gradient(to bottom, #313543, #1d2027) : linear-gradient(to bottom, #fff, #ececec)
-				box-shadow 0 1px rgba(#000, 0.11)
+				color var(--faceTextButtonActive)
 
 .mk-widget-container[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index 15aa158073..5547445537 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -4,7 +4,6 @@
 	<div class="main" ref="main" tabindex="-1" :data-is-modal="isModal" @mousedown="onBodyMousedown" @keydown="onKeydown" :style="{ width, height }">
 		<div class="body">
 			<header ref="header"
-				:class="{ withGradient: $store.state.settings.gradientWindowHeader }"
 				@contextmenu.prevent="() => {}" @mousedown.prevent="onHeaderMousedown"
 			>
 				<h1><slot name="header"></slot></h1>
@@ -463,8 +462,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 root(isDark)
 	display block
 
@@ -582,10 +579,6 @@ root(isDark)
 				border-radius 6px 6px 0 0
 				box-shadow 0 1px 0 rgba(#000, 0.1)
 
-				&.withGradient
-					background isDark ? linear-gradient(to bottom, #313543, #1d2027) : linear-gradient(to bottom, #fff, #ececec)
-					box-shadow 0 1px 0 rgba(#000, 0.15)
-
 				&, *
 					user-select none
 
@@ -600,7 +593,7 @@ root(isDark)
 					font-size 1em
 					line-height $header-height
 					font-weight normal
-					color isDark ? #e3e5e8 : #666
+					color var(--desktopWindowTitle)
 
 				> div:last-child
 					position absolute
@@ -615,16 +608,16 @@ root(isDark)
 						padding 0
 						cursor pointer
 						font-size 1em
-						color isDark ? #9baec8 : rgba(#000, 0.4)
+						color var(--faceTextButton)
 						border none
 						outline none
 						background transparent
 
 						&:hover
-							color isDark ? #b2c1d5 : rgba(#000, 0.6)
+							color var(--faceTextButtonHover)
 
 						&:active
-							color isDark ? #b2c1d5 : darken(#000, 30%)
+							color var(--faceTextButtonActive)
 
 						> [data-fa]
 							padding 0
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index fb521db25b..2dba7d2522 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -317,7 +317,7 @@ root(isDark)
 		line-height $header-height
 		padding 0 16px
 		font-size 14px
-		color isDark ? #e3e5e8 : #888
+		color var(--faceHeaderText)
 		background var(--faceHeader)
 		box-shadow 0 1px rgba(#000, 0.15)
 		cursor pointer
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index 212e21a7a9..b90d0a831e 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -48,7 +48,7 @@ root(isDark)
 		line-height 42px
 		font-size 0.9em
 		font-weight bold
-		color isDark ? #e3e5e8 : #888
+		color var(--faceHeaderText)
 		box-shadow 0 1px rgba(#000, 0.07)
 
 		> i
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index 0a329b3d8e..9b466053f7 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -54,7 +54,7 @@ root(isDark)
 		font-size 0.9em
 		font-weight bold
 		background isDark ? #313543 : inherit
-		color isDark ? #e3e5e8 : #888
+		color var(--faceHeaderText)
 		box-shadow 0 1px rgba(#000, 0.07)
 
 		> i
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index 99e064446d..6e9d09e79f 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -53,7 +53,7 @@ root(isDark)
 		font-size 0.9em
 		font-weight bold
 		background: isDark ? #313543 : inherit
-		color isDark ? #e3e5e8 : #888
+		color var(--faceHeaderText)
 		box-shadow 0 1px rgba(#000, 0.07)
 
 		> i
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 00c08409a6..fbcc53d7be 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -21,7 +21,6 @@ const defaultSettings = {
 	circleIcons: true,
 	contrastedAcct: true,
 	showFullAcct: false,
-	gradientWindowHeader: false,
 	showReplyTarget: true,
 	showMyRenotes: true,
 	showRenotedMyNotes: true,
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 88bde9d684..d563409564 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -12,9 +12,11 @@
 	"scrollbarHandleHover": "#535660",
 	"face": "#282c37",
 	"faceHeader": "#313543",
+	"faceHeaderText": "#e3e5e8",
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"faceTextButton": "#9baec8",
 	"faceTextButtonHover": "#b2c1d5",
+	"faceTextButtonActive": "#b2c1d5",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
@@ -53,6 +55,7 @@
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
 	"desktopTimelineSrc": "@faceTextButton",
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
+	"desktopWindowTitle": "@faceHeaderText",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 3374a62e36..bdcf282e3d 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -12,9 +12,11 @@
 	"scrollbarHandleHover": "#00000066",
 	"face": "#fff",
 	"faceHeader": "#fff",
+	"faceHeaderText": "#888",
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"faceTextButton": "#ccc",
 	"faceTextButtonHover": "#aaa",
+	"faceTextButtonActive": "#999",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
@@ -53,6 +55,7 @@
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
 	"desktopTimelineSrc": "#6f7477",
 	"desktopTimelineSrcHover": "#525a5f",
+	"desktopWindowTitle": "#666",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From 9e319006f350e357e75654b2c5e28d803c08a617 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 15:19:11 +0900
Subject: [PATCH 395/539] wip

---
 .../views/components/ui.header.account.vue    |  7 +--
 .../views/components/ui.header.nav.vue        | 14 +----
 .../components/ui.header.notifications.vue    | 18 +-----
 .../views/components/ui.header.search.vue     | 19 ++----
 .../desktop/views/components/ui.header.vue    | 63 +------------------
 src/client/theme/dark.json                    |  6 ++
 src/client/theme/light.json                   |  6 ++
 7 files changed, 27 insertions(+), 106 deletions(-)

diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index c728fa42be..77221f81d2 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -134,7 +134,7 @@ root(isDark)
 		display block
 		margin 0
 		padding 0
-		color #9eaba8
+		color var(--desktopHeaderFg)
 		border none
 		background transparent
 		cursor pointer
@@ -144,14 +144,11 @@ root(isDark)
 
 		&:hover
 		&[data-active='true']
-			color isDark ? #fff : darken(#9eaba8, 20%)
+			color var(--desktopHeaderHoverFg)
 
 			> .avatar
 				filter saturate(150%)
 
-		&:active
-			color isDark ? #fff : darken(#9eaba8, 30%)
-
 		> .username
 			display block
 			float left
diff --git a/src/client/app/desktop/views/components/ui.header.nav.vue b/src/client/app/desktop/views/components/ui.header.nav.vue
index f41d4b8ecf..4f679db938 100644
--- a/src/client/app/desktop/views/components/ui.header.nav.vue
+++ b/src/client/app/desktop/views/components/ui.header.nav.vue
@@ -95,9 +95,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.nav
 	display inline-block
 	margin 0
 	padding 0
@@ -129,7 +127,7 @@ root(isDark)
 				padding 0 24px
 				font-size 13px
 				font-variant small-caps
-				color isDark ? #b8c5ca : #9eaba8
+				color var(--desktopHeaderFg)
 				text-decoration none
 				transition none
 				cursor pointer
@@ -138,7 +136,7 @@ root(isDark)
 					pointer-events none
 
 				&:hover
-					color isDark ? #fff : darken(#9eaba8, 20%)
+					color var(--desktopHeaderHoverFg)
 					text-decoration none
 
 				> [data-fa]:first-child
@@ -162,10 +160,4 @@ root(isDark)
 				@media (max-width 700px)
 					padding 0 12px
 
-.nav[data-darkmode]
-	root(true)
-
-.nav:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/ui.header.notifications.vue b/src/client/app/desktop/views/components/ui.header.notifications.vue
index 2a38655f3a..c59a49556d 100644
--- a/src/client/app/desktop/views/components/ui.header.notifications.vue
+++ b/src/client/app/desktop/views/components/ui.header.notifications.vue
@@ -61,16 +61,13 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-
+.notifications
 	> button
 		display block
 		margin 0
 		padding 0
 		width 32px
-		color #9eaba8
+		color var(--desktopHeaderFg)
 		border none
 		background transparent
 		cursor pointer
@@ -80,10 +77,7 @@ root(isDark)
 
 		&:hover
 		&[data-active='true']
-			color isDark ? #fff : darken(#9eaba8, 20%)
-
-		&:active
-			color isDark ? #fff : darken(#9eaba8, 30%)
+			color var(--desktopHeaderHoverFg)
 
 		> [data-fa].bell
 			font-size 1.2em
@@ -135,10 +129,4 @@ root(isDark)
 			font-size 1rem
 			overflow auto
 
-.notifications[data-darkmode]
-	root(true)
-
-.notifications:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/ui.header.search.vue b/src/client/app/desktop/views/components/ui.header.search.vue
index d5794dc882..d22efbf84f 100644
--- a/src/client/app/desktop/views/components/ui.header.search.vue
+++ b/src/client/app/desktop/views/components/ui.header.search.vue
@@ -28,8 +28,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-root(isDark)
+.search
 	> [data-fa]
 		display block
 		position absolute
@@ -38,7 +37,7 @@ root(isDark)
 		width 48px
 		text-align center
 		line-height 48px
-		color #9eaba8
+		color var(--desktopHeaderFg)
 		pointer-events none
 
 		> *
@@ -52,26 +51,20 @@ root(isDark)
 		width 14em
 		height 32px
 		font-size 1em
-		background rgba(#000, 0.05)
+		background var(--desktopHeaderSearchBg)
 		outline none
-		//border solid 1px #ddd
 		border none
 		border-radius 16px
 		transition color 0.5s ease, border 0.5s ease
-		color isDark ? #fff : #000
+		color var(--desktopHeaderSearchFg)
 
 		&::placeholder
-			color #9eaba8
+			color var(--desktopHeaderFg)
 
 		&:hover
-			background isDark ? rgba(#fff, 0.04) : rgba(#000, 0.08)
+			background var(--desktopHeaderSearchHoverBg)
 
 		&:focus
 			box-shadow 0 0 0 2px var(--primaryAlpha05) !important
 
-.search[data-darkmode]
-	root(true)
-
-.search:not([data-darkmode])
-	root(false)
 </style>
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index 264da8bef8..5089232b06 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -5,7 +5,6 @@
 	<div class="main" ref="main">
 		<div class="backdrop"></div>
 		<div class="main">
-			<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
 			<div class="container" ref="mainContainer">
 				<div class="left">
 					<x-nav/>
@@ -64,55 +63,6 @@ export default Vue.extend({
 
 	mounted() {
 		this.$store.commit('setUiHeaderHeight', this.$el.offsetHeight);
-
-		if (this.$store.getters.isSignedIn) {
-			const ago = (new Date().getTime() - new Date(this.$store.state.i.lastUsedAt).getTime()) / 1000;
-			const isHisasiburi = ago >= 3600;
-			this.$store.state.i.lastUsedAt = new Date();
-
-			if (isHisasiburi) {
-				(this.$refs.welcomeback as any).style.display = 'block';
-				(this.$refs.main as any).style.overflow = 'hidden';
-
-				anime({
-					targets: this.$refs.welcomeback,
-					top: '0',
-					opacity: 1,
-					delay: 1000,
-					duration: 500,
-					easing: 'easeOutQuad'
-				});
-
-				anime({
-					targets: this.$refs.mainContainer,
-					opacity: 0,
-					delay: 1000,
-					duration: 500,
-					easing: 'easeOutQuad'
-				});
-
-				setTimeout(() => {
-					anime({
-						targets: this.$refs.welcomeback,
-						top: '-48px',
-						opacity: 0,
-						duration: 500,
-						complete: () => {
-							(this.$refs.welcomeback as any).style.display = 'none';
-							(this.$refs.main as any).style.overflow = 'initial';
-						},
-						easing: 'easeInQuad'
-					});
-
-					anime({
-						targets: this.$refs.mainContainer,
-						opacity: 1,
-						duration: 500,
-						easing: 'easeInQuad'
-					});
-				}, 2500);
-			}
-		}
 	},
 
 	methods: {
@@ -161,17 +111,6 @@ root(isDark)
 			font-size 0.9rem
 			user-select none
 
-			> p
-				display none
-				position absolute
-				top 48px
-				width 100%
-				line-height 48px
-				margin 0
-				text-align center
-				color isDark ? #fff : #888
-				opacity 0
-
 			> .container
 				display flex
 				width 100%
@@ -190,7 +129,7 @@ root(isDark)
 						display block
 						width 48px
 						height 48px
-						background-image isDark ? url('/assets/desktop/header-icon.dark.svg') : url('/assets/desktop/header-icon.light.svg')
+						background-image var(--desktopHeaderIcon)
 						background-size 24px
 						background-position center
 						background-repeat no-repeat
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index d563409564..403a5ded1d 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -49,6 +49,12 @@
 	"cwButtonHoverBg": "#707b97",
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 	"desktopHeaderBg": "#313543",
+	"desktopHeaderFg": "#b8c5ca",
+	"desktopHeaderHoverFg": "#fff",
+	"desktopHeaderIcon": "url('/assets/desktop/header-icon.dark.svg')",
+	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
+	"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
+	"desktopHeaderSearchFg": "#fff",
 	"desktopPostFormBg": "@face",
 	"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
 	"desktopPostFormTextareaFg": "#fff",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index bdcf282e3d..f9f9a9a52d 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -49,6 +49,12 @@
 	"cwButtonHoverBg": "#bbc4ce",
 	"reactionPickerButtonHoverBg": "#eee",
 	"desktopHeaderBg": "#f7f7f7",
+	"desktopHeaderFg": "#9eaba8",
+	"desktopHeaderHoverFg": "#7b8c88",
+	"desktopHeaderIcon": "url('/assets/desktop/header-icon.light.svg')",
+	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
+	"desktopHeaderSearchHoverBg": "rgba(0, 0, 0, 0.08)",
+	"desktopHeaderSearchFg": "#000",
 	"desktopPostFormBg": "#fff6f6",
 	"desktopPostFormTextareaBg": "#fff",
 	"desktopPostFormTextareaFg": "#333",

From a36d73cb5271b09a75d656043d8e928f9f821c66 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 16:49:18 +0900
Subject: [PATCH 396/539] wip

---
 .../app/common/views/widgets/calendar.vue     |  2 +-
 .../app/desktop/views/components/calendar.vue | 45 +++++++------------
 .../views/components/notifications.vue        | 22 ++++-----
 .../desktop/views/pages/deck/deck.notes.vue   |  4 +-
 .../views/pages/deck/deck.notifications.vue   |  4 +-
 .../app/mobile/views/components/notes.vue     |  4 +-
 .../mobile/views/components/notifications.vue | 14 ++----
 src/client/theme/dark.json                    |  7 ++-
 src/client/theme/halloween.json               |  2 +-
 src/client/theme/light.json                   |  5 +++
 10 files changed, 47 insertions(+), 62 deletions(-)

diff --git a/src/client/app/common/views/widgets/calendar.vue b/src/client/app/common/views/widgets/calendar.vue
index a24524d1c5..238b493a61 100644
--- a/src/client/app/common/views/widgets/calendar.vue
+++ b/src/client/app/common/views/widgets/calendar.vue
@@ -124,7 +124,7 @@ root(isDark)
 
 	.mkw-calendar--body
 		padding 16px 0
-		color isDark ? #c5ced6 : #777
+		color var(--calendarDay)
 
 		&:after
 			content ""
diff --git a/src/client/app/desktop/views/components/calendar.vue b/src/client/app/desktop/views/components/calendar.vue
index 6b753068fa..e2f1329b3b 100644
--- a/src/client/app/desktop/views/components/calendar.vue
+++ b/src/client/app/desktop/views/components/calendar.vue
@@ -128,10 +128,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-	color isDark ? #c5ced6 : #777
+.mk-calendar
+	color var(--calendarDay)
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -149,12 +147,10 @@ root(isDark)
 		line-height 42px
 		font-size 0.9em
 		font-weight bold
-		color isDark ? #c5ced6 : #888
+		color var(--faceHeaderText)
+		background var(--faceHeader)
 		box-shadow 0 1px rgba(#000, 0.07)
 
-		if isDark
-			background #313543
-
 		> [data-fa]
 			margin-right 4px
 
@@ -172,7 +168,7 @@ root(isDark)
 			color var(--faceTextButtonHover)
 
 		&:active
-			color isDark ? #b2c1d5 : #999
+			color var(--faceTextButtonActive)
 
 		&:first-of-type
 			left 0
@@ -195,49 +191,46 @@ root(isDark)
 			font-size 14px
 
 			&.weekday
-				color isDark ? #43d5dc : #19a2a9
+				color var(--calendarWeek)
 
 				&[data-is-donichi]
-					color isDark ? #ff6679 : #ef95a0
+					color var(--calendarSaturdayOrSunday)
 
 				&[data-today]
-					box-shadow 0 0 0 1px isDark ? #43d5dc : #19a2a9 inset
+					box-shadow 0 0 0 1px var(--calendarWeek) inset
 					border-radius 6px
 
 					&[data-is-donichi]
-						box-shadow 0 0 0 1px isDark ? #ff6679 : #ef95a0 inset
+						box-shadow 0 0 0 1px var(--calendarSaturdayOrSunday) inset
 
 			&.day
 				cursor pointer
-				color isDark ? #c5ced6 : #777
+				color var(--calendarDay)
 
 				> div
 					border-radius 6px
 
 				&:hover > div
-					background rgba(#000, isDark ? 0.1 : 0.025)
+					background var(--faceClearButtonHover)
 
 				&:active > div
-					background rgba(#000, isDark ? 0.2 : 0.05)
+					background var(--faceClearButtonActive)
 
 				&[data-is-donichi]
-					color isDark ? #ff6679 : #ef95a0
+					color var(--calendarSaturdayOrSunday)
 
 				&[data-is-out-of-range]
 					cursor default
-					color rgba(isDark ? #c5ced6 : #777, 0.5)
-
-					&[data-is-donichi]
-						color rgba(isDark ? #ff6679 : #ef95a0, 0.5)
+					opacity 0.5
 
 				&[data-selected]
 					font-weight bold
 
 					> div
-						background rgba(#000, isDark ? 0.1 : 0.025)
+						background var(--faceClearButtonHover)
 
 					&:active > div
-						background rgba(#000, isDark ? 0.2 : 0.05)
+						background var(--faceClearButtonActive)
 
 				&[data-today]
 					> div
@@ -250,10 +243,4 @@ root(isDark)
 					&:active > div
 						background var(--primaryDarken10)
 
-.mk-calendar[data-darkmode]
-	root(true)
-
-.mk-calendar:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 2eb80dcd01..1f3f62395a 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -191,7 +191,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-notifications
 	.transition
 		.mk-notifications-enter
 		.mk-notifications-leave-to
@@ -208,7 +208,7 @@ root(isDark)
 				padding 16px
 				overflow-wrap break-word
 				font-size 13px
-				border-bottom solid 1px isDark ? #1c2023 : rgba(#000, 0.05)
+				border-bottom solid 1px var(--faceDivider)
 
 				&:last-child
 					border-bottom none
@@ -219,7 +219,7 @@ root(isDark)
 					top 16px
 					right 12px
 					vertical-align top
-					color isDark ? #606984 : rgba(#000, 0.6)
+					color var(--noteHeaderInfo)
 					font-size small
 
 				&:after
@@ -249,10 +249,10 @@ root(isDark)
 							margin-right 4px
 
 				.note-preview
-					color isDark ? #c2cad4 : rgba(#000, 0.7)
+					color var(--noteText)
 
 				.note-ref
-					color isDark ? #c2cad4 : rgba(#000, 0.7)
+					color var(--noteText)
 
 					[data-fa]
 						font-size 1em
@@ -283,9 +283,9 @@ root(isDark)
 				line-height 32px
 				text-align center
 				font-size 0.8em
-				color isDark ? #666b79 : #aaa
-				background isDark ? #242731 : #fdfdfd
-				border-bottom solid 1px isDark ? #1c2023 : rgba(#000, 0.05)
+				color var(--dateDividerFg)
+				background var(--dateDividerBg)
+				border-bottom solid 1px var(--faceDivider)
 
 				span
 					margin 0 16px
@@ -327,10 +327,4 @@ root(isDark)
 		> [data-fa]
 			margin-right 4px
 
-.mk-notifications[data-darkmode]
-	root(true)
-
-.mk-notifications:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index 214ec3cdf7..7e171a2397 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -214,8 +214,8 @@ root(isDark)
 			line-height 32px
 			font-size 14px
 			text-align center
-			color isDark ? #666b79 : #aaa
-			background isDark ? #242731 : #fdfdfd
+			color var(--dateDividerFg)
+			background var(--dateDividerBg)
 			border-bottom solid 1px var(--faceDivider)
 
 			span
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index 8a28061260..aa48571a5b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -177,8 +177,8 @@ root(isDark)
 			line-height 32px
 			text-align center
 			font-size 0.8em
-			color isDark ? #666b79 : #aaa
-			background isDark ? #242731 : #fdfdfd
+			color var(--dateDividerFg)
+			background var(--dateDividerBg)
 			border-bottom solid 1px var(--faceDivider)
 
 			span
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 8841b0e6bf..9153b1d551 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -243,8 +243,8 @@ root(isDark)
 			line-height 32px
 			text-align center
 			font-size 0.9em
-			color isDark ? #666b79 : #aaa
-			background isDark ? #242731 : #fdfdfd
+			color var(--dateDividerFg)
+			background var(--dateDividerBg)
 			border-bottom solid 1px var(--faceDivider)
 
 			span
diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue
index 8243a9bfb3..bfb6c1e62a 100644
--- a/src/client/app/mobile/views/components/notifications.vue
+++ b/src/client/app/mobile/views/components/notifications.vue
@@ -104,9 +104,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-notifications
 	margin 0 auto
-	background isDark ? #282C37 :#fff
+	background var(--face)
 	border-radius 8px
 	box-shadow 0 0 2px rgba(#000, 0.1)
 	overflow hidden
@@ -134,8 +134,8 @@ root(isDark)
 			line-height 32px
 			text-align center
 			font-size 0.8em
-			color isDark ? #666b79 : #aaa
-			background isDark ? #242731 : #fdfdfd
+			color var(--dateDividerFg)
+			background var(--dateDividerBg)
 			border-bottom solid 1px var(--faceDivider)
 
 			span
@@ -169,10 +169,4 @@ root(isDark)
 		> [data-fa]
 			margin-right 4px
 
-.mk-notifications[data-darkmode]
-	root(true)
-
-.mk-notifications:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 403a5ded1d..ef5170e71e 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -17,6 +17,8 @@
 	"faceTextButton": "#9baec8",
 	"faceTextButtonHover": "#b2c1d5",
 	"faceTextButtonActive": "#b2c1d5",
+	"faceClearButtonHover": "rgba(0, 0, 0, 0.1)",
+	"faceClearButtonActive": "rgba(0, 0, 0, 0.2)",
 	"popupBg": "#2c303c",
 	"popupFg": "#d6dce2",
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
@@ -48,11 +50,14 @@
 	"cwButtonFg": "#393f4f",
 	"cwButtonHoverBg": "#707b97",
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
+	"calendarWeek": "#43d5dc",
+	"calendarSaturdayOrSunday": "#ff6679",
+	"calendarDay": "#c5ced6",
 	"desktopHeaderBg": "#313543",
 	"desktopHeaderFg": "#b8c5ca",
 	"desktopHeaderHoverFg": "#fff",
 	"desktopHeaderIcon": "url('/assets/desktop/header-icon.dark.svg')",
-	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
+	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
 	"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
 	"desktopHeaderSearchFg": "#fff",
 	"desktopPostFormBg": "@face",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 474fc7ea8f..420a03d2cd 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -16,5 +16,5 @@
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
 	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
-	"desktopHeaderBg": "#0c0b19"
+	"desktopHeaderBg": "#36314e"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index f9f9a9a52d..bbffc8e143 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -17,6 +17,8 @@
 	"faceTextButton": "#ccc",
 	"faceTextButtonHover": "#aaa",
 	"faceTextButtonActive": "#999",
+	"faceClearButtonHover": "rgba(0, 0, 0, 0.025)",
+	"faceClearButtonActive": "rgba(0, 0, 0, 0.05)",
 	"popupBg": "#fff",
 	"popupFg": "#586069",
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
@@ -48,6 +50,9 @@
 	"cwButtonFg": "#fff",
 	"cwButtonHoverBg": "#bbc4ce",
 	"reactionPickerButtonHoverBg": "#eee",
+	"calendarWeek": "#19a2a9",
+	"calendarSaturdayOrSunday": "#ef95a0",
+	"calendarDay": "#777",
 	"desktopHeaderBg": "#f7f7f7",
 	"desktopHeaderFg": "#9eaba8",
 	"desktopHeaderHoverFg": "#7b8c88",

From 5f289e47676b790b6ac2d6c8cb887300e190fd73 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 16:58:00 +0900
Subject: [PATCH 397/539] wip

---
 .../views/components/visibility-chooser.vue   | 19 +++++--------------
 src/client/theme/halloween.json               |  4 ++--
 2 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index 5faf09fa11..02f33bfbc0 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -127,11 +127,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 $border-color = rgba(27, 31, 35, 0.15)
 
-root(isDark)
+.mk-visibility-chooser
 	position initial
 
 	> .backdrop
@@ -141,7 +139,7 @@ root(isDark)
 		z-index 10000
 		width 100%
 		height 100%
-		background isDark ? rgba(#000, 0.4) : rgba(#000, 0.1)
+		background var(--modalBackdrop)
 		opacity 0
 
 	> .popover
@@ -189,14 +187,14 @@ root(isDark)
 			display flex
 			padding 8px 14px
 			font-size 12px
-			color isDark ? #fff : #666
+			color var(--popupFg)
 			cursor pointer
 
 			&:hover
-				background isDark ? #252731 : #eee
+				background var(--faceClearButtonHover)
 
 			&:active
-				background isDark ? #21242b : #ddd
+				background var(--faceClearButtonActive)
 
 			&.active
 				color var(--primaryForeground)
@@ -222,11 +220,4 @@ root(isDark)
 
 				> span:last-child:not(:first-child)
 					opacity 0.6
-
-.mk-visibility-chooser[data-darkmode]
-	root(true)
-
-.mk-visibility-chooser:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 420a03d2cd..154755fe90 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -5,13 +5,13 @@
 		"author": "syuilo",
 		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63"
 	},
-	"primary": "#fb8d4e",
+	"primary": "#d67036",
 	"primaryForeground": "#fff",
 	"bg": "#1b1a35",
 	"face": "#322e44",
 	"faceHeader": "#36314e",
 	"dateDividerBg": "#26253c",
-	"popupBg": "#2c303c",
+	"popupBg": "@face",
 	"popupFg": "#d6dce2",
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",

From 5b0b83faa7af45ddae740a203651eedff9863b41 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 17:29:57 +0900
Subject: [PATCH 398/539] wip

---
 .../app/common/views/components/messaging.vue | 26 +++++--------------
 .../app/common/views/components/ui/card.vue   | 19 ++++----------
 src/client/theme/dark.json                    |  1 +
 src/client/theme/light.json                   |  1 +
 4 files changed, 14 insertions(+), 33 deletions(-)

diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index a984c980b1..8e5393e6e5 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -204,12 +204,10 @@ root(isDark)
 		left 0
 		z-index 1
 		width 100%
-		background #fff
 		box-shadow 0 0px 2px rgba(#000, 0.2)
 
 		> .form
-			padding 8px
-			background isDark ? #282c37 : #f7f7f7
+			background rgba(0, 0, 0, 0.02)
 
 			> label
 				display block
@@ -229,32 +227,22 @@ root(isDark)
 					bottom 0
 					left 0
 					width 1em
-					line-height 56px
+					line-height 48px
 					margin auto
 					color #555
 
 			> input
 				margin 0
-				padding 0 0 0 32px
+				padding 0 0 0 42px
 				width 100%
 				font-size 1em
-				line-height 38px
-				color #000
+				line-height 48px
+				color var(--faceText)
 				outline none
-				background isDark ? #191b22 : #fff
-				border solid 1px isDark ? #495156 : #eee
+				background transparent
+				border none
 				border-radius 5px
 				box-shadow none
-				transition color 0.5s ease, border 0.5s ease
-
-				&:hover
-					border solid 1px isDark ? #b0b0b0 : #ddd
-					transition border 0.2s ease
-
-				&:focus
-					color var(--primaryDarken20)
-					border solid 1px var(--primary)
-					transition color 0, border 0
 
 		> .result
 			display block
diff --git a/src/client/app/common/views/components/ui/card.vue b/src/client/app/common/views/components/ui/card.vue
index be24027f6c..a37a38d340 100644
--- a/src/client/app/common/views/components/ui/card.vue
+++ b/src/client/app/common/views/components/ui/card.vue
@@ -20,11 +20,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.ui-card
 	margin 16px
-	color isDark ? #fff : #000
+	color var(--faceText)
 	background var(--face)
 	box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)
 
@@ -32,14 +30,14 @@ root(isDark)
 		padding 16px
 		font-weight bold
 		font-size 20px
-		color isDark ? #fff : #444
+		color var(--faceText)
 
 		@media (min-width 500px)
 			padding 24px 32px
 
 	> section
 		padding 20px 16px
-		border-top solid 1px isDark ? rgba(#000, 0.3) : rgba(#000, 0.1)
+		border-top solid 1px var(--faceDivider)
 
 		@media (min-width 500px)
 			padding 32px
@@ -50,12 +48,5 @@ root(isDark)
 		> header
 			margin-bottom 16px
 			font-weight bold
-			color isDark ? #fff : #444
-
-.ui-card[data-darkmode]
-	root(true)
-
-.ui-card:not([data-darkmode])
-	root(false)
-
+			color var(--faceText)
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index ef5170e71e..7e0df42365 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -11,6 +11,7 @@
 	"scrollbarHandle": "#454954",
 	"scrollbarHandleHover": "#535660",
 	"face": "#282c37",
+	"faceText": "#fff",
 	"faceHeader": "#313543",
 	"faceHeaderText": "#e3e5e8",
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index bbffc8e143..482276f638 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -11,6 +11,7 @@
 	"scrollbarHandle": "#00000033",
 	"scrollbarHandleHover": "#00000066",
 	"face": "#fff",
+	"faceText": "#444",
 	"faceHeader": "#fff",
 	"faceHeaderText": "#888",
 	"faceDivider": "rgba(0, 0, 0, 0.082)",

From f3eeadcd8f3f0513250dc6ed13cabd6636da3a89 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 17:42:51 +0900
Subject: [PATCH 399/539] wip

---
 .../app/common/views/components/messaging.vue | 28 +++++++------------
 .../desktop/views/components/post-form.vue    |  4 +--
 2 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index 8e5393e6e5..91453e16ec 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -167,9 +167,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-messaging
 
 	&[data-compact]
 		font-size 0.8em
@@ -318,20 +316,20 @@ root(isDark)
 			display block
 			text-decoration none
 			background var(--face)
-			border-bottom solid 1px isDark ? #1c2023 : #eee
+			border-bottom solid 1px var(--faceDivider)
 
 			*
 				pointer-events none
 				user-select none
 
 			&:hover
-				background isDark ? #1e2129 : #fafafa
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
-				> .avatar
+				.avatar
 					filter saturate(200%)
 
 			&:active
-				background isDark ? #14161b : #eee
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 			&[data-is-read]
 			&[data-is-me]
@@ -371,17 +369,17 @@ root(isDark)
 						overflow hidden
 						text-overflow ellipsis
 						font-size 1em
-						color isDark ? #fff : rgba(#000, 0.9)
+						color var(--noteHeaderName)
 						font-weight bold
 						transition all 0.1s ease
 
 					> .username
 						margin 0 8px
-						color isDark ? #606984 : rgba(#000, 0.5)
+						color var(--noteHeaderAcct)
 
 					> .mk-time
 						margin 0 0 0 auto
-						color isDark ? #606984 : rgba(#000, 0.5)
+						color var(--noteHeaderInfo)
 						font-size 80%
 
 				> .avatar
@@ -401,10 +399,10 @@ root(isDark)
 						overflow hidden
 						overflow-wrap break-word
 						font-size 1.1em
-						color isDark ? #fff : rgba(#000, 0.8)
+						color var(--faceText)
 
 						.me
-							color isDark ? rgba(#fff, 0.7) : rgba(#000, 0.4)
+							opacity 0.7
 
 					> .image
 						display block
@@ -449,10 +447,4 @@ root(isDark)
 					> .avatar
 						margin 0 12px 0 0
 
-.mk-messaging[data-darkmode]
-	root(true)
-
-.mk-messaging:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 5a5f9d63db..0d600dd08e 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -503,7 +503,7 @@ root(isDark)
 
 			> span
 				margin-right 16px
-				color isDark ? #fff : #666
+				color var(--primary)
 
 		> .hashtags
 			margin 0 0 8px 0
@@ -512,7 +512,7 @@ root(isDark)
 			font-size 14px
 
 			> b
-				color isDark ? #9baec8 : var(--primaryDarken20)
+				color var(--primary)
 
 			> *
 				margin-right 8px

From cc6af402be152702488645f87fa9464e52caf36e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 18:01:23 +0900
Subject: [PATCH 400/539] wip

---
 src/client/app/desktop/views/components/post-form.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 0d600dd08e..5dd40c9ba5 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -521,7 +521,7 @@ root(isDark)
 		> .files
 			margin 0
 			padding 0
-			background isDark ? #181b23 : var(--primaryLighten98)
+			background var(--desktopPostFormTextareaBg)
 			border solid 1px var(--primaryAlpha01)
 			border-top none
 			border-radius 0 0 4px 4px
@@ -572,7 +572,7 @@ root(isDark)
 						cursor pointer
 
 		> .mk-poll-editor
-			background isDark ? #181b23 : var(--primaryLighten98)
+			background var(--desktopPostFormTextareaBg)
 			border solid 1px var(--primaryAlpha01)
 			border-top none
 			border-radius 0 0 4px 4px

From 459b374d612e53cfd4244649ac2c812618f827f5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 19:14:35 +0900
Subject: [PATCH 401/539] wip

---
 src/client/app/common/scripts/theme.ts        | 17 +++++++++++++++++
 .../app/common/views/widgets/broadcast.vue    | 14 ++++----------
 src/client/theme/dark.json                    | 19 +++++++++++++------
 src/client/theme/halloween.json               | 16 +++++++---------
 src/client/theme/light.json                   | 19 +++++++++++++------
 5 files changed, 54 insertions(+), 31 deletions(-)

diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index a08028ff9a..db1cd7c394 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -7,6 +7,7 @@ type Theme = {
 		id: string;
 		name: string;
 		inherit: string;
+		vars: any;
 	};
 } & {
 	[key: string]: string;
@@ -34,6 +35,22 @@ function compile(theme: Theme): { [key: string]: string } {
 		if (code[0] == '@') {
 			return getColor(theme[code.substr(1)]);
 		}
+		if (code[0] == '$') {
+			return getColor(theme.meta.vars[code.substr(1)]);
+		}
+
+		// func
+		if (code[0] == ':') {
+			const parts = code.split('<');
+			const func = parts.shift().substr(1);
+			const arg = parseInt(parts.shift(), 10);
+			const color = getColor(parts.join('<'));
+
+			switch (func) {
+				case 'darken': return color.darken(arg);
+				case 'lighten': return color.lighten(arg);
+			}
+		}
 
 		return tinycolor(code);
 	}
diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index c471229f15..65e37bfc69 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -71,9 +71,9 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.anltbovirfeutcigvwgmgxipejaeozxi-body
 	padding 10px
-	background isDark ? #253a50 : #f3f9ff
+	background var(--announcementsBg)
 
 	&[data-melt]
 		background transparent
@@ -130,14 +130,14 @@ root(isDark)
 		margin 0
 		font-size 0.95em
 		font-weight normal
-		color isDark ? #539eff : #4078c0
+		color var(--announcementsTitle)
 
 	> p
 		display block
 		z-index 1
 		margin 0
 		font-size 0.7em
-		color isDark ? #fff : #57616f
+		color var(--announcementsText)
 
 		&.fetching
 			text-align center
@@ -150,10 +150,4 @@ root(isDark)
 		> p
 			color #fff
 
-.anltbovirfeutcigvwgmgxipejaeozxi-body[data-darkmode]
-	root(true)
-
-.anltbovirfeutcigvwgmgxipejaeozxi-body:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 7e0df42365..c4d1fa9d62 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -2,17 +2,21 @@
 	"meta": {
 		"id": "9978f7f9-5616-44fd-a704-cc5985efdd63",
 		"name": "Dark",
-		"author": "syuilo"
+		"author": "syuilo",
+		"vars": {
+			"primary": "#fb4e4e",
+			"secondary": "#282C37"
+		}
 	},
-	"primary": "#fb4e4e",
+	"primary": "$primary",
 	"primaryForeground": "#fff",
-	"bg": "#191b22",
+	"bg": ":darken<8<$secondary",
 	"scrollbarTrack": "#282c37",
 	"scrollbarHandle": "#454954",
 	"scrollbarHandleHover": "#535660",
-	"face": "#282c37",
+	"face": "$secondary",
 	"faceText": "#fff",
-	"faceHeader": "#313543",
+	"faceHeader": ":lighten<5<$secondary",
 	"faceHeaderText": "#e3e5e8",
 	"faceDivider": "rgba(0, 0, 0, 0.3)",
 	"faceTextButton": "#9baec8",
@@ -20,7 +24,7 @@
 	"faceTextButtonActive": "#b2c1d5",
 	"faceClearButtonHover": "rgba(0, 0, 0, 0.1)",
 	"faceClearButtonActive": "rgba(0, 0, 0, 0.2)",
-	"popupBg": "#2c303c",
+	"popupBg": ":lighten<5<$secondary",
 	"popupFg": "#d6dce2",
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
 	"renoteGradient": "#314027",
@@ -54,6 +58,9 @@
 	"calendarWeek": "#43d5dc",
 	"calendarSaturdayOrSunday": "#ff6679",
 	"calendarDay": "#c5ced6",
+	"announcementsBg": "#253a50",
+	"announcementsTitle": "#539eff",
+	"announcementsText": "#fff",
 	"desktopHeaderBg": "#313543",
 	"desktopHeaderFg": "#b8c5ca",
 	"desktopHeaderHoverFg": "#fff",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 154755fe90..81c773f574 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -3,18 +3,16 @@
 		"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
 		"name": "Halloween",
 		"author": "syuilo",
-		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63"
+		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63",
+		"vars": {
+			"primary": "#d67036",
+			"primaryForeground": "#fff",
+			"secondary": "#1f1d30",
+			"text": "#b1bee3"
+		}
 	},
-	"primary": "#d67036",
-	"primaryForeground": "#fff",
 	"bg": "#1b1a35",
-	"face": "#322e44",
-	"faceHeader": "#36314e",
-	"dateDividerBg": "#26253c",
-	"popupBg": "@face",
-	"popupFg": "#d6dce2",
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
-	"reactionPickerButtonHoverBg": "rgba(0, 0, 0, 0.18)",
 	"desktopHeaderBg": "#36314e"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 482276f638..a7037b8e54 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -2,17 +2,21 @@
 	"meta": {
 		"id": "406cfea3-a4e7-486c-9057-30ede1353c3f",
 		"name": "Light",
-		"author": "syuilo"
+		"author": "syuilo",
+		"vars": {
+			"primary": "#fb4e4e",
+			"secondary": "#fff"
+		}
 	},
-	"primary": "#fb4e4e",
+	"primary": "$primary",
 	"primaryForeground": "#fff",
-	"bg": "#f7f7f7",
+	"bg": ":darken<8<$secondary",
 	"scrollbarTrack": "#fff",
 	"scrollbarHandle": "#00000033",
 	"scrollbarHandleHover": "#00000066",
-	"face": "#fff",
+	"face": "$secondary",
 	"faceText": "#444",
-	"faceHeader": "#fff",
+	"faceHeader": ":lighten<5<$secondary",
 	"faceHeaderText": "#888",
 	"faceDivider": "rgba(0, 0, 0, 0.082)",
 	"faceTextButton": "#ccc",
@@ -20,7 +24,7 @@
 	"faceTextButtonActive": "#999",
 	"faceClearButtonHover": "rgba(0, 0, 0, 0.025)",
 	"faceClearButtonActive": "rgba(0, 0, 0, 0.05)",
-	"popupBg": "#fff",
+	"popupBg": ":lighten<5<$secondary",
 	"popupFg": "#586069",
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
 	"renoteGradient": "#edfde2",
@@ -54,6 +58,9 @@
 	"calendarWeek": "#19a2a9",
 	"calendarSaturdayOrSunday": "#ef95a0",
 	"calendarDay": "#777",
+	"announcementsBg": "#f3f9ff",
+	"announcementsTitle": "#4078c0",
+	"announcementsText": "#57616f",
 	"desktopHeaderBg": "#f7f7f7",
 	"desktopHeaderFg": "#9eaba8",
 	"desktopHeaderHoverFg": "#7b8c88",

From 7a0a8b5d2b1d9f4f0bbacdb6b30cfbedab75f59d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 19:32:06 +0900
Subject: [PATCH 402/539] wip

---
 .../app/common/views/components/google.vue    | 20 +++++++------------
 src/client/theme/dark.json                    | 16 +++++++++++++++
 src/client/theme/light.json                   | 16 +++++++++++++++
 3 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/src/client/app/common/views/components/google.vue b/src/client/app/common/views/components/google.vue
index 8272961ef2..ac71a5e56d 100644
--- a/src/client/app/common/views/components/google.vue
+++ b/src/client/app/common/views/components/google.vue
@@ -26,7 +26,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-google
 	display flex
 	margin 8px 0
 
@@ -37,31 +37,25 @@ root(isDark)
 		height 40px
 		font-family sans-serif
 		font-size 16px
-		color isDark ? #dee4e8 : #55595c
-		background isDark ? #191b22 : #fff
-		border solid 1px isDark ? #495156 : #dadada
+		color var(--googleSearchFg)
+		background var(--googleSearchBg)
+		border solid 1px var(--googleSearchBorder)
 		border-radius 4px 0 0 4px
 
 		&:hover
-			border-color isDark ? #777c86 : #b0b0b0
+			border-color var(--googleSearchHoverBorder)
 
 	> button
 		flex-shrink 0
 		padding 0 16px
-		border solid 1px isDark ? #495156 : #dadada
+		border solid 1px var(--googleSearchBorder)
 		border-left none
 		border-radius 0 4px 4px 0
 
 		&:hover
-			background-color isDark ? #2e3440 : #eee
+			background-color var(--googleSearchHoverButton)
 
 		&:active
 			box-shadow 0 2px 4px rgba(#000, 0.15) inset
 
-.mk-google[data-darkmode]
-	root(true)
-
-.mk-google:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index c4d1fa9d62..0422eb021b 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -38,29 +38,45 @@
 	"noteHeaderAdminBg": "#5d282e",
 	"noteHeaderAcct": "#606984",
 	"noteHeaderInfo": "#606984",
+
 	"noteActions": "#606984",
 	"noteActionsHover": "#a1a8bf",
 	"noteActionsReplyHover": "#0af",
 	"noteActionsRenoteHover": "#8d0",
 	"noteActionsReactionHover": "#fa0",
 	"noteActionsHighlighted": "#707b97",
+
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
+
 	"dateDividerBg": "#242731",
 	"dateDividerFg": "#666b79",
+
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
+
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
 	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
+
 	"cwButtonBg": "#687390",
 	"cwButtonFg": "#393f4f",
 	"cwButtonHoverBg": "#707b97",
+
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
+
 	"calendarWeek": "#43d5dc",
 	"calendarSaturdayOrSunday": "#ff6679",
 	"calendarDay": "#c5ced6",
+
 	"announcementsBg": "#253a50",
 	"announcementsTitle": "#539eff",
 	"announcementsText": "#fff",
+
+	"googleSearchBg": "rgba(0, 0, 0, 0.2)",
+	"googleSearchFg": "#dee4e8",
+	"googleSearchBorder": "rgba(255, 255, 255, 0.2)",
+	"googleSearchHoverBorder": "rgba(255, 255, 255, 0.3)",
+	"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
+
 	"desktopHeaderBg": "#313543",
 	"desktopHeaderFg": "#b8c5ca",
 	"desktopHeaderHoverFg": "#fff",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index a7037b8e54..83e4ee05c3 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -38,29 +38,45 @@
 	"noteHeaderAdminBg": "#5d282e",
 	"noteHeaderAcct": "#ccc",
 	"noteHeaderInfo": "#c0c0c0",
+
 	"noteActions": "#ddd",
 	"noteActionsHover": "#444",
 	"noteActionsReplyHover": "#0af",
 	"noteActionsRenoteHover": "#8d0",
 	"noteActionsReactionHover": "#fa0",
 	"noteActionsHighlighted": "#888",
+
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
+
 	"dateDividerBg": "#fdfdfd",
 	"dateDividerFg": "#aaa",
+
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
+
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
 	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
+
 	"cwButtonBg": "#b1b9c1",
 	"cwButtonFg": "#fff",
 	"cwButtonHoverBg": "#bbc4ce",
+
 	"reactionPickerButtonHoverBg": "#eee",
+
 	"calendarWeek": "#19a2a9",
 	"calendarSaturdayOrSunday": "#ef95a0",
 	"calendarDay": "#777",
+
 	"announcementsBg": "#f3f9ff",
 	"announcementsTitle": "#4078c0",
 	"announcementsText": "#57616f",
+
+	"googleSearchBg": "#fff",
+	"googleSearchFg": "#55595c",
+	"googleSearchBorder": "rgba(0, 0, 0, 0.2)",
+	"googleSearchHoverBorder": "rgba(0, 0, 0, 0.3)",
+	"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
+
 	"desktopHeaderBg": "#f7f7f7",
 	"desktopHeaderFg": "#9eaba8",
 	"desktopHeaderHoverFg": "#7b8c88",

From b032f78769d7d70b2265cb5318276fa582c20bf7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 21:43:11 +0900
Subject: [PATCH 403/539] wip

---
 .../components/messaging-room.message.vue     | 20 ++-----
 .../views/components/messaging-room.vue       | 36 ++++-------
 .../app/mobile/views/components/ui.header.vue | 60 -------------------
 src/client/theme/dark.json                    |  8 +++
 src/client/theme/halloween.json               |  1 -
 src/client/theme/light.json                   |  8 +++
 6 files changed, 30 insertions(+), 103 deletions(-)

diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue
index e0528d5432..77bf55c52c 100644
--- a/src/client/app/common/views/components/messaging-room.message.vue
+++ b/src/client/app/common/views/components/messaging-room.message.vue
@@ -59,9 +59,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.message
 	$me-balloon-color = var(--primary)
 
 	padding 10px 12px 10px 12px
@@ -179,7 +177,7 @@ root(isDark)
 			display block
 			margin 2px 0 0 0
 			font-size 10px
-			color isDark ? rgba(#fff, 0.4) : rgba(#000, 0.4)
+			color var(--messagingRoomMessageInfo)
 
 			> [data-fa]
 				margin-left 4px
@@ -192,7 +190,7 @@ root(isDark)
 			padding-left 66px
 
 			> .balloon
-				$color = isDark ? #2d3338 : #eee
+				$color = var(--messagingRoomMessageBg)
 				float left
 				background $color
 
@@ -208,8 +206,7 @@ root(isDark)
 
 				> .content
 					> .text
-						if isDark
-							color #fff
+							color var(--messagingRoomMessageFg)
 
 			> footer
 				text-align left
@@ -250,18 +247,9 @@ root(isDark)
 
 				> .read
 					user-select none
-					margin 0 4px 0 0
-					color isDark ? rgba(#fff, 0.5) : rgba(#000, 0.5)
-					font-size 11px
 
 	&[data-is-deleted]
 		> .balloon
 			opacity 0.5
 
-.message[data-darkmode]
-	root(true)
-
-.message:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index 52abfa4e1d..98661bc39d 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -262,14 +262,12 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-messaging-room
 	display flex
 	flex 1
 	flex-direction column
 	height 100%
-	background isDark ? #191b22 : #fff
+	background var(--messagingRoomBg)
 
 	> .body
 		width 100%
@@ -277,24 +275,15 @@ root(isDark)
 		margin 0 auto
 		flex 1
 
-		> .init
-			width 100%
-			margin 0
-			padding 16px 8px 8px 8px
-			text-align center
-			font-size 0.8em
-			color rgba(isDark ? #fff : #000, 0.4)
-
-			[data-fa]
-				margin-right 4px
-
+		> .init,
 		> .empty
 			width 100%
 			margin 0
 			padding 16px 8px 8px 8px
 			text-align center
 			font-size 0.8em
-			color rgba(isDark ? #fff : #000, 0.4)
+			color var(--messagingRoomInfo)
+			opacity 0.5
 
 			[data-fa]
 				margin-right 4px
@@ -305,7 +294,8 @@ root(isDark)
 			padding 16px
 			text-align center
 			font-size 0.8em
-			color rgba(isDark ? #fff : #000, 0.4)
+			color var(--messagingRoomInfo)
+			opacity 0.5
 
 			[data-fa]
 				margin-right 4px
@@ -349,7 +339,7 @@ root(isDark)
 				left 0
 				right 0
 				margin 0 auto
-				background rgba(isDark ? #fff : #000, 0.1)
+				background var(--messagingRoomDateDividerLine)
 
 			> span
 				display inline-block
@@ -357,8 +347,8 @@ root(isDark)
 				padding 0 16px
 				//font-weight bold
 				line-height 32px
-				color rgba(isDark ? #fff : #000, 0.3)
-				background isDark ? #191b22 : #fff
+				color var(--messagingRoomDateDividerText)
+				background var(--messagingRoomBg)
 
 	> footer
 		position -webkit-sticky
@@ -410,10 +400,4 @@ root(isDark)
 	transition opacity 0.5s
 	opacity 0
 
-.mk-messaging-room[data-darkmode]
-	root(true)
-
-.mk-messaging-room:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index b859c22887..d3e258f052 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -4,7 +4,6 @@
 	<mk-special-message/>
 	<div class="main" ref="main">
 		<div class="backdrop"></div>
-		<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>%i18n:@adjective%</p>
 		<div class="content" ref="mainContainer">
 			<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
 			<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
@@ -50,53 +49,6 @@ export default Vue.extend({
 
 			this.connection.on('reversi_invited', this.onReversiInvited);
 			this.connection.on('reversi_no_invites', this.onReversiNoInvites);
-
-			const ago = (new Date().getTime() - new Date(this.$store.state.i.lastUsedAt).getTime()) / 1000;
-			const isHisasiburi = ago >= 3600;
-			this.$store.state.i.lastUsedAt = new Date();
-
-			if (isHisasiburi) {
-				(this.$refs.welcomeback as any).style.display = 'block';
-				(this.$refs.main as any).style.overflow = 'hidden';
-
-				anime({
-					targets: this.$refs.welcomeback,
-					top: '0',
-					opacity: 1,
-					delay: 1000,
-					duration: 500,
-					easing: 'easeOutQuad'
-				});
-
-				anime({
-					targets: this.$refs.mainContainer,
-					opacity: 0,
-					delay: 1000,
-					duration: 500,
-					easing: 'easeOutQuad'
-				});
-
-				setTimeout(() => {
-					anime({
-						targets: this.$refs.welcomeback,
-						top: '-48px',
-						opacity: 0,
-						duration: 500,
-						complete: () => {
-							(this.$refs.welcomeback as any).style.display = 'none';
-							(this.$refs.main as any).style.overflow = 'initial';
-						},
-						easing: 'easeInQuad'
-					});
-
-					anime({
-						targets: this.$refs.mainContainer,
-						opacity: 1,
-						duration: 500,
-						easing: 'easeInQuad'
-					});
-				}, 2500);
-			}
 		}
 	},
 	beforeDestroy() {
@@ -159,18 +111,6 @@ root(isDark)
 			//background-color rgba(#1b2023, 0.75)
 			background-color isDark ? #313543 : #595f6f
 
-		> p
-			display none
-			position absolute
-			z-index 1002
-			top $height
-			width 100%
-			line-height $height
-			margin 0
-			text-align center
-			color #fff
-			opacity 0
-
 		> .content
 			z-index 1001
 
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 0422eb021b..7a9a06187f 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -77,6 +77,14 @@
 	"googleSearchHoverBorder": "rgba(255, 255, 255, 0.3)",
 	"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
 
+	"messagingRoomBg": "@bg",
+	"messagingRoomInfo": "#fff",
+	"messagingRoomDateDividerLine": "rgba(255, 255, 255, 0.1)",
+	"messagingRoomDateDividerText": "rgba(255, 255, 255, 0.3)",
+	"messagingRoomMessageInfo": "rgba(255, 255, 255, 0.4)",
+	"messagingRoomMessageBg": "$secondary",
+	"messagingRoomMessageFg": "#fff",
+
 	"desktopHeaderBg": "#313543",
 	"desktopHeaderFg": "#b8c5ca",
 	"desktopHeaderHoverFg": "#fff",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 81c773f574..327d04cad6 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -11,7 +11,6 @@
 			"text": "#b1bee3"
 		}
 	},
-	"bg": "#1b1a35",
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
 	"desktopHeaderBg": "#36314e"
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 83e4ee05c3..ca0dad0718 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -77,6 +77,14 @@
 	"googleSearchHoverBorder": "rgba(0, 0, 0, 0.3)",
 	"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
 
+	"messagingRoomBg": "#fff",
+	"messagingRoomInfo": "#000",
+	"messagingRoomDateDividerLine": "rgba(0, 0, 0, 0.1)",
+	"messagingRoomDateDividerText": "rgba(0, 0, 0, 0.3)",
+	"messagingRoomMessageInfo": "rgba(0, 0, 0, 0.4)",
+	"messagingRoomMessageBg": "#eee",
+	"messagingRoomMessageFg": "#333",
+
 	"desktopHeaderBg": "#f7f7f7",
 	"desktopHeaderFg": "#9eaba8",
 	"desktopHeaderHoverFg": "#7b8c88",

From ef74653a4bb80215482b25c2028924c5c04717e3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 22:25:10 +0900
Subject: [PATCH 404/539] wip

---
 src/client/app/common/scripts/theme.ts        |  3 ++-
 .../app/desktop/views/components/settings.vue | 27 +++++++------------
 src/client/theme/dark.json                    |  7 ++++-
 src/client/theme/light.json                   |  7 ++++-
 4 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index db1cd7c394..f27ded8685 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -43,12 +43,13 @@ function compile(theme: Theme): { [key: string]: string } {
 		if (code[0] == ':') {
 			const parts = code.split('<');
 			const func = parts.shift().substr(1);
-			const arg = parseInt(parts.shift(), 10);
+			const arg = parseFloat(parts.shift());
 			const color = getColor(parts.join('<'));
 
 			switch (func) {
 				case 'darken': return color.darken(arg);
 				case 'lighten': return color.lighten(arg);
+				case 'alpha': return color.setAlpha(arg);
 			}
 		}
 
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index e95e7a735d..4d839f1dc9 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -486,9 +486,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-settings
 	display flex
 	width 100%
 	height 100%
@@ -499,13 +497,13 @@ root(isDark)
 		height 100%
 		padding 16px 0 0 0
 		overflow auto
-		border-right solid 1px isDark ? #1c2023 : #ddd
+		border-right solid 1px var(--faceDivider)
 
 		> p
 			display block
 			padding 10px 16px
 			margin 0
-			color isDark ? #9aa2a7 : #666
+			color var(--desktopSettingsNavItem)
 			cursor pointer
 			user-select none
 			transition margin-left 0.2s ease
@@ -514,7 +512,7 @@ root(isDark)
 				margin-right 4px
 
 			&:hover
-				color isDark ? #fff : #555
+				color var(--desktopSettingsNavItemHover)
 
 			&.active
 				margin-left 8px
@@ -528,14 +526,13 @@ root(isDark)
 
 		> section
 			margin 32px
-			color isDark ? #c4ccd2 : #4a535a
+			color var(--text)
 
 			> h1
 				margin 0 0 1em 0
 				padding 0 0 8px 0
 				font-size 1em
-				color isDark ? #e3e7ea : #555
-				border-bottom solid 1px isDark ? #1c2023 : #eee
+				border-bottom solid 1px var(--faceDivider)
 
 			&, >>> *
 				.ui.button.block
@@ -548,18 +545,12 @@ root(isDark)
 						margin 0 0 1em 0
 						padding 0 0 8px 0
 						font-size 1em
-						color isDark ? #e3e7ea : #555
-						border-bottom solid 1px isDark ? #1c2023 : #eee
+						color var(--text)
+						border-bottom solid 1px var(--faceDivider)
 
 		> .web
 			> .div
-				border-bottom solid 1px isDark ? #1c2023 : #eee
+				border-bottom solid 1px var(--faceDivider)
 				margin 16px 0
 
-.mk-settings[data-darkmode]
-	root(true)
-
-.mk-settings:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 7a9a06187f..8962235f2f 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -5,12 +5,14 @@
 		"author": "syuilo",
 		"vars": {
 			"primary": "#fb4e4e",
-			"secondary": "#282C37"
+			"secondary": "#282C37",
+			"text": "#d0e0ea"
 		}
 	},
 	"primary": "$primary",
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
+	"text": "$text",
 	"scrollbarTrack": "#282c37",
 	"scrollbarHandle": "#454954",
 	"scrollbarHandleHover": "#535660",
@@ -99,6 +101,9 @@
 	"desktopTimelineSrc": "@faceTextButton",
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
 	"desktopWindowTitle": "@faceHeaderText",
+	"desktopSettingsNavItem": ":alpha<0.8<$text",
+	"desktopSettingsNavItemHover": ":lighten<10<$text",
+
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index ca0dad0718..11b001ceb1 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -5,12 +5,14 @@
 		"author": "syuilo",
 		"vars": {
 			"primary": "#fb4e4e",
-			"secondary": "#fff"
+			"secondary": "#fff",
+			"text": "#666"
 		}
 	},
 	"primary": "$primary",
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
+	"text": "$text",
 	"scrollbarTrack": "#fff",
 	"scrollbarHandle": "#00000033",
 	"scrollbarHandleHover": "#00000066",
@@ -99,6 +101,9 @@
 	"desktopTimelineSrc": "#6f7477",
 	"desktopTimelineSrcHover": "#525a5f",
 	"desktopWindowTitle": "#666",
+	"desktopSettingsNavItem": ":alpha<0.8<$text",
+	"desktopSettingsNavItemHover": ":darken<10<$text",
+
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From 0c7111b438d8a1242008412dfa01504f2a116cd7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 22:30:52 +0900
Subject: [PATCH 405/539] wip

---
 src/client/app/common/scripts/theme.ts | 4 ----
 src/client/style.styl                  | 4 ++--
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/common/scripts/theme.ts
index f27ded8685..7a1c6abb76 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/common/scripts/theme.ts
@@ -62,10 +62,6 @@ function compile(theme: Theme): { [key: string]: string } {
 		if (k == 'meta') return;
 		const c = getColor(v);
 		props[k] = genValue(c);
-		props[`${k}-r`] = c.toRgb().r;
-		props[`${k}-g`] = c.toRgb().g;
-		props[`${k}-b`] = c.toRgb().b;
-		props[`${k}-a`] = c.toRgb().a;
 	});
 
 	const primary = getColor(props['primary']);
diff --git a/src/client/style.styl b/src/client/style.styl
index 111e167204..8ebba2f15e 100644
--- a/src/client/style.styl
+++ b/src/client/style.styl
@@ -33,7 +33,7 @@ a
 
 @css {
 	a {
-		tap-highlight-color: rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.7) !important;
-		-webkit-tap-highlight-color: rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.7) !important;
+		tap-highlight-color: var(--primaryAlpha07) !important;
+		-webkit-tap-highlight-color: var(--primaryAlpha07) !important;
 	}
 }

From 1e9eeeb980fc416efcda68b4020d65425c0e8e31 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 22:50:34 +0900
Subject: [PATCH 406/539] wip

---
 .../views/components/messaging-room.form.vue  |  2 +-
 .../common/views/components/poll-editor.vue   |  2 +-
 .../common/views/components/ui/form/radio.vue |  2 +-
 .../app/common/views/components/ui/input.vue  | 10 ++++----
 .../app/common/views/components/ui/radio.vue  |  2 +-
 .../app/common/views/components/ui/select.vue |  4 ++--
 .../common/views/components/ui/textarea.vue   | 24 +++++++------------
 .../common/views/components/url-preview.vue   | 18 +++++---------
 src/client/theme/dark.json                    | 12 +++++++++-
 src/client/theme/halloween.json               |  1 +
 src/client/theme/light.json                   | 10 ++++++++
 11 files changed, 47 insertions(+), 40 deletions(-)

diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue
index 90668aee6e..8e62587c20 100644
--- a/src/client/app/common/views/components/messaging-room.form.vue
+++ b/src/client/app/common/views/components/messaging-room.form.vue
@@ -209,7 +209,7 @@ root(isDark)
 		padding 8px
 		resize none
 		font-size 1em
-		color isDark ? #fff : #000
+		color var(--inputText)
 		outline none
 		border none
 		border-top solid 1px isDark ? #4b5056 : #eee
diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue
index 219f0a7fd5..7f52c62c23 100644
--- a/src/client/app/common/views/components/poll-editor.vue
+++ b/src/client/app/common/views/components/poll-editor.vue
@@ -103,7 +103,7 @@ root(isDark)
 				padding 6px 8px
 				width 300px
 				font-size 14px
-				color isDark ? #fff : #000
+				color var(--inputText)
 				background isDark ? #191b22 : #fff
 				border solid 1px var(--primaryAlpha01)
 				border-radius 4px
diff --git a/src/client/app/common/views/components/ui/form/radio.vue b/src/client/app/common/views/components/ui/form/radio.vue
index 13cabbdc04..5728a8171b 100644
--- a/src/client/app/common/views/components/ui/form/radio.vue
+++ b/src/client/app/common/views/components/ui/form/radio.vue
@@ -62,7 +62,7 @@ root(isDark)
 
 	&:hover
 		> .button
-			border solid 2px isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+			border solid 2px var(--inputLabel)
 
 	&.disabled
 		opacity 0.6
diff --git a/src/client/app/common/views/components/ui/input.vue b/src/client/app/common/views/components/ui/input.vue
index 98c9bf7f5a..d7b83d81cd 100644
--- a/src/client/app/common/views/components/ui/input.vue
+++ b/src/client/app/common/views/components/ui/input.vue
@@ -167,7 +167,7 @@ root(isDark, fill)
 		width 24px
 		text-align center
 		line-height 32px
-		color isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+		color var(--inputLabel)
 
 		&:not(:empty) + .input
 			margin-left 28px
@@ -183,7 +183,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				height 1px
-				background isDark ? rgba(#fff, 0.7) : rgba(#000, 0.42)
+				background var(--inputBorder)
 
 			&:after
 				content ''
@@ -242,7 +242,7 @@ root(isDark, fill)
 			transition-duration 0.3s
 			font-size 16px
 			line-height 32px
-			color isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+			color var(--inputLabel)
 			pointer-events none
 			//will-change transform
 			transform-origin top left
@@ -257,7 +257,7 @@ root(isDark, fill)
 			font-weight fill ? bold : normal
 			font-size 16px
 			line-height 32px
-			color isDark ? #fff : #000
+			color var(--inputText)
 			background transparent
 			border none
 			border-radius 0
@@ -280,7 +280,7 @@ root(isDark, fill)
 			top 0
 			font-size 16px
 			line-height fill ? 44px : 32px
-			color isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+			color var(--inputLabel)
 			pointer-events none
 
 			&:empty
diff --git a/src/client/app/common/views/components/ui/radio.vue b/src/client/app/common/views/components/ui/radio.vue
index ded6b5650c..3a4407abc0 100644
--- a/src/client/app/common/views/components/ui/radio.vue
+++ b/src/client/app/common/views/components/ui/radio.vue
@@ -87,7 +87,7 @@ root(isDark)
 		width 20px
 		height 20px
 		background none
-		border solid 2px isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+		border solid 2px var(--inputLabel)
 		border-radius 100%
 		transition inherit
 
diff --git a/src/client/app/common/views/components/ui/select.vue b/src/client/app/common/views/components/ui/select.vue
index c32865c690..bdb730fea9 100644
--- a/src/client/app/common/views/components/ui/select.vue
+++ b/src/client/app/common/views/components/ui/select.vue
@@ -103,7 +103,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				height 1px
-				background isDark ? rgba(#fff, 0.7) : rgba(#000, 0.42)
+				background var(--inputBorder)
 
 			&:after
 				content ''
@@ -143,7 +143,7 @@ root(isDark, fill)
 			font-weight fill ? bold : normal
 			font-size 16px
 			height 32px
-			color isDark ? #fff : #000
+			color var(--inputText)
 			background transparent
 			border none
 			border-radius 0
diff --git a/src/client/app/common/views/components/ui/textarea.vue b/src/client/app/common/views/components/ui/textarea.vue
index 53b7dcaf8c..67898ee059 100644
--- a/src/client/app/common/views/components/ui/textarea.vue
+++ b/src/client/app/common/views/components/ui/textarea.vue
@@ -63,9 +63,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark, fill)
+root(fill)
 	margin 42px 0 32px 0
 
 	> .input
@@ -84,7 +82,7 @@ root(isDark, fill)
 				left 0
 				right 0
 				background none
-				border solid 1px isDark ? rgba(#fff, 0.7) : rgba(#000, 0.42)
+				border solid 1px var(--inputBorder)
 				border-radius 3px
 				pointer-events none
 
@@ -112,7 +110,7 @@ root(isDark, fill)
 			transition-duration 0.3s
 			font-size 16px
 			line-height 32px
-			color isDark ? rgba(#fff, 0.7) : rgba(#000, 0.54)
+			color var(--inputLabel)
 			pointer-events none
 			//will-change transform
 			transform-origin top left
@@ -126,7 +124,7 @@ root(isDark, fill)
 			font inherit
 			font-weight fill ? bold : normal
 			font-size 16px
-			color isDark ? #fff : #000
+			color var(--inputText)
 			background transparent
 			border none
 			border-radius 0
@@ -159,16 +157,10 @@ root(isDark, fill)
 				left 0 !important
 				transform scale(0.75)
 
-.ui-textarea[data-darkmode]
-	&.fill
-		root(true, true)
-	&:not(.fill)
-		root(true, false)
+.ui-textarea.fill
+	root(true)
 
-.ui-textarea:not([data-darkmode])
-	&.fill
-		root(false, true)
-	&:not(.fill)
-		root(false, false)
+.ui-textarea:not(.fill)
+	root(false)
 
 </style>
diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index f9b8415b5b..86489cf8be 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -200,17 +200,17 @@ export default Vue.extend({
 		top 0
 		width 100%
 
-root(isDark)
+.mk-url-preview
 	> a
 		display block
 		font-size 14px
-		border solid 1px isDark ? #191b1f : #eee
+		border solid 1px var(--urlPreviewBorder)
 		border-radius 4px
 		overflow hidden
 
 		&:hover
 			text-decoration none
-			border-color isDark ? #4f5561 : #ddd
+			border-color var(--urlPreviewBorderHover)
 
 			> article > header > h1
 				text-decoration underline
@@ -235,11 +235,11 @@ root(isDark)
 				> h1
 					margin 0
 					font-size 1em
-					color isDark ? #d6dae0 : #555
+					color var(--urlPreviewTitle)
 
 			> p
 				margin 0
-				color isDark ? #a4aab3 : #777
+				color var(--urlPreviewText)
 				font-size 0.8em
 
 			> footer
@@ -256,7 +256,7 @@ root(isDark)
 				> p
 					display inline-block
 					margin 0
-					color isDark ? #b0b4bf : #666
+					color var(--urlPreviewInfo)
 					font-size 0.8em
 					line-height 16px
 					vertical-align top
@@ -322,10 +322,4 @@ root(isDark)
 						width 12px
 						height 12px
 
-.mk-url-preview[data-darkmode]
-	root(true)
-
-.mk-url-preview:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 8962235f2f..44a8e0e568 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -6,9 +6,10 @@
 		"vars": {
 			"primary": "#fb4e4e",
 			"secondary": "#282C37",
-			"text": "#d0e0ea"
+			"text": "#d6dae0"
 		}
 	},
+
 	"primary": "$primary",
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
@@ -54,6 +55,9 @@
 	"dateDividerFg": "#666b79",
 
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
+	"inputBorder": "rgba(255, 255, 255, 0.7)",
+	"inputLabel": "rgba(255, 255, 255, 0.7)",
+	"inputText": "#fff",
 
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
@@ -65,6 +69,12 @@
 
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 
+	"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
+	"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
+	"urlPreviewTitle": "$text",
+	"urlPreviewText": ":alpha<0.7<$text",
+	"urlPreviewInfo": ":alpha<0.8<$text",
+
 	"calendarWeek": "#43d5dc",
 	"calendarSaturdayOrSunday": "#ff6679",
 	"calendarDay": "#c5ced6",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 327d04cad6..1fc60c00ad 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -11,6 +11,7 @@
 			"text": "#b1bee3"
 		}
 	},
+
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
 	"desktopHeaderBg": "#36314e"
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 11b001ceb1..8dd4b1fe7b 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -9,6 +9,7 @@
 			"text": "#666"
 		}
 	},
+
 	"primary": "$primary",
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
@@ -54,6 +55,9 @@
 	"dateDividerFg": "#aaa",
 
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
+	"inputBorder": "rgba(0, 0, 0, 0.42)",
+	"inputLabel": "rgba(0, 0, 0, 0.54)",
+	"inputText": "#000",
 
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
@@ -65,6 +69,12 @@
 
 	"reactionPickerButtonHoverBg": "#eee",
 
+	"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
+	"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
+	"urlPreviewTitle": "$text",
+	"urlPreviewText": ":alpha<0.7<$text",
+	"urlPreviewInfo": ":alpha<0.8<$text",
+
 	"calendarWeek": "#19a2a9",
 	"calendarSaturdayOrSunday": "#ef95a0",
 	"calendarDay": "#777",

From e82a44c03d9b17bb3a9852cccec5edbb2cf76be2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 22:55:17 +0900
Subject: [PATCH 407/539] wip

---
 .../desktop/views/components/ui.header.account.vue | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/src/client/app/desktop/views/components/ui.header.account.vue b/src/client/app/desktop/views/components/ui.header.account.vue
index 77221f81d2..a541dea121 100644
--- a/src/client/app/desktop/views/components/ui.header.account.vue
+++ b/src/client/app/desktop/views/components/ui.header.account.vue
@@ -127,9 +127,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.account
 	> .header
 		display block
 		margin 0
@@ -217,7 +215,7 @@ root(isDark)
 
 			& + ul
 				padding-top 10px
-				border-top solid 1px isDark ? #1c2023 : #eee
+				border-top solid 1px var(--faceDivider)
 
 			> li
 				display block
@@ -231,7 +229,7 @@ root(isDark)
 					padding 0 28px
 					margin 0
 					line-height 40px
-					color isDark ? #c8cece : #868C8C
+					color var(--text)
 					cursor pointer
 
 					*
@@ -287,10 +285,4 @@ root(isDark)
 	transform-origin: center -16px;
 }
 
-.account[data-darkmode]
-	root(true)
-
-.account:not([data-darkmode])
-	root(false)
-
 </style>

From 74be1c81b111bca81047b21083249d8be4b35ed8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 22:59:56 +0900
Subject: [PATCH 408/539] wip

---
 .../common/views/components/reactions-viewer.vue  | 15 ++++-----------
 src/client/theme/dark.json                        |  2 ++
 src/client/theme/light.json                       |  2 ++
 3 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/client/app/common/views/components/reactions-viewer.vue b/src/client/app/common/views/components/reactions-viewer.vue
index c30fa2a1dc..9212a84b31 100644
--- a/src/client/app/common/views/components/reactions-viewer.vue
+++ b/src/client/app/common/views/components/reactions-viewer.vue
@@ -39,10 +39,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-	$borderColor = isDark ? #5e6673 : #eee
-	border-top dashed 1px $borderColor
-	border-bottom dashed 1px $borderColor
+.mk-reactions-viewer
+	border-top dashed 1px var(--reactionViewerBorder)
+	border-bottom dashed 1px var(--reactionViewerBorder)
 	margin 4px 0
 
 	&:empty
@@ -60,12 +59,6 @@ root(isDark)
 		> span
 			margin-left 4px
 			font-size 1.2em
-			color isDark ? #d1d5dc : #444
-
-.mk-reactions-viewer[data-darkmode]
-	root(true)
-
-.mk-reactions-viewer:not([data-darkmode])
-	root(false)
+			color var(--text)
 
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 44a8e0e568..39828e364e 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -69,6 +69,8 @@
 
 	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
 
+	"reactionViewerBorder": "rgba(255, 255, 255, 0.1)",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
 	"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
 	"urlPreviewTitle": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 8dd4b1fe7b..2c45a57705 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -69,6 +69,8 @@
 
 	"reactionPickerButtonHoverBg": "#eee",
 
+	"reactionViewerBorder": "rgba(0, 0, 0, 0.1)",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
 	"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
 	"urlPreviewTitle": "$text",

From a0305c4c040f769f1992cdd2eea70095af802365 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 23:02:59 +0900
Subject: [PATCH 409/539] wip

---
 src/client/app/common/views/components/instance.vue | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/client/app/common/views/components/instance.vue b/src/client/app/common/views/components/instance.vue
index 14c6664eff..c3935cce0e 100644
--- a/src/client/app/common/views/components/instance.vue
+++ b/src/client/app/common/views/components/instance.vue
@@ -26,9 +26,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-	color isDark ? #fff : #5b646f
-	background isDark ? #21242f : #fff
+.nhasjydimbopojusarffqjyktglcuxjy
+	color var(--text)
+	background var(--face)
 	text-align center
 
 	> .banner
@@ -48,10 +48,4 @@ root(isDark)
 		display block
 		padding-bottom 16px
 
-.nhasjydimbopojusarffqjyktglcuxjy[data-darkmode]
-	root(true)
-
-.nhasjydimbopojusarffqjyktglcuxjy:not([data-darkmode])
-	root(false)
-
 </style>

From 32942709bfdb799f1ac26a087ffd4d73b558fcb5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 23:09:23 +0900
Subject: [PATCH 410/539] wip

---
 src/client/app/desktop/views/components/note-detail.vue   | 2 +-
 src/client/app/desktop/views/components/notes.note.vue    | 8 ++++----
 .../app/desktop/views/components/sub-note-content.vue     | 2 +-
 src/client/app/desktop/views/pages/deck/deck.note.vue     | 6 +++---
 src/client/app/mobile/views/components/note-detail.vue    | 2 +-
 src/client/app/mobile/views/components/note.vue           | 6 +++---
 .../app/mobile/views/components/sub-note-content.vue      | 2 +-
 src/client/theme/dark.json                                | 2 ++
 src/client/theme/halloween.json                           | 1 +
 src/client/theme/light.json                               | 2 ++
 10 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 50ad793f0b..0c4b560e98 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -365,7 +365,7 @@ export default Vue.extend({
 
 					> *
 						padding 16px
-						border dashed 1px vat(--quoteBorder)
+						border dashed 1px var(--quoteBorder)
 						border-radius 8px
 
 				> .location
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 5daaadb971..7e4f42533f 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -447,7 +447,7 @@ root(isDark)
 							padding 4px
 							font-size 90%
 							text-align center
-							background isDark ? #2f3944 : #eef1f3
+							background var(--mfmTitleBg)
 							border-radius 4px
 
 						>>> .code
@@ -461,12 +461,12 @@ root(isDark)
 
 						> .reply
 							margin-right 8px
-							color isDark ? #99abbf : #717171
+							color var(--text)
 
 						> .rp
 							margin-left 4px
 							font-style oblique
-							color #a0bf46
+							color var(--renoteText)
 
 					> .location
 						margin 4px 0
@@ -491,7 +491,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px vat(--quoteBorder)
+							border dashed 1px var(--quoteBorder)
 							border-radius 8px
 
 			> footer
diff --git a/src/client/app/desktop/views/components/sub-note-content.vue b/src/client/app/desktop/views/components/sub-note-content.vue
index 6889dc231e..fd8e658056 100644
--- a/src/client/app/desktop/views/components/sub-note-content.vue
+++ b/src/client/app/desktop/views/components/sub-note-content.vue
@@ -38,7 +38,7 @@ export default Vue.extend({
 		> .rp
 			margin-left 4px
 			font-style oblique
-			color #a0bf46
+			color var(--renoteText)
 
 	mk-poll
 		font-size 80%
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index bdc4368e7b..3bc4f26823 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -329,7 +329,7 @@ root(isDark)
 							padding 4px
 							font-size 90%
 							text-align center
-							background isDark ? #2f3944 : #eef1f3
+							background var(--mfmTitleBg)
 							border-radius 4px
 
 						>>> .code
@@ -348,7 +348,7 @@ root(isDark)
 						> .rp
 							margin-left 4px
 							font-style oblique
-							color #a0bf46
+							color var(--renoteText)
 
 						[data-is-me]:after
 							content "you"
@@ -387,7 +387,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px vat(--quoteBorder)
+							border dashed 1px var(--quoteBorder)
 							border-radius 8px
 
 				> .app
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index ade518b1fc..48d6d32868 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -368,7 +368,7 @@ export default Vue.extend({
 
 					> *
 						padding 16px
-						border dashed 1px vat(--quoteBorder)
+						border dashed 1px var(--quoteBorder)
 						border-radius 8px
 
 				> .location
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index ed175b4f6f..b1c5835692 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -369,7 +369,7 @@ root(isDark)
 							padding 4px
 							font-size 90%
 							text-align center
-							background isDark ? #2f3944 : #eef1f3
+							background var(--mfmTitleBg)
 							border-radius 4px
 
 						>>> .code
@@ -388,7 +388,7 @@ root(isDark)
 						> .rp
 							margin-left 4px
 							font-style oblique
-							color #a0bf46
+							color var(--renoteText)
 
 						[data-is-me]:after
 							content "you"
@@ -427,7 +427,7 @@ root(isDark)
 
 						> *
 							padding 16px
-							border dashed 1px vat(--quoteBorder)
+							border dashed 1px var(--quoteBorder)
 							border-radius 8px
 
 				> .app
diff --git a/src/client/app/mobile/views/components/sub-note-content.vue b/src/client/app/mobile/views/components/sub-note-content.vue
index 4d0aa25f34..2238edf278 100644
--- a/src/client/app/mobile/views/components/sub-note-content.vue
+++ b/src/client/app/mobile/views/components/sub-note-content.vue
@@ -37,7 +37,7 @@ export default Vue.extend({
 		> .rp
 			margin-left 4px
 			font-style oblique
-			color #a0bf46
+			color var(--renoteText)
 
 	mk-poll
 		font-size 80%
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 39828e364e..1eb41ea52e 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -91,6 +91,8 @@
 	"googleSearchHoverBorder": "rgba(255, 255, 255, 0.3)",
 	"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
 
+	"mfmTitleBg": "rgba(0, 0, 0, 0.2)",
+
 	"messagingRoomBg": "@bg",
 	"messagingRoomInfo": "#fff",
 	"messagingRoomDateDividerLine": "rgba(255, 255, 255, 0.1)",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 1fc60c00ad..1bd00357e2 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -14,5 +14,6 @@
 
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
+	"quoteBorder": "#c3631c",
 	"desktopHeaderBg": "#36314e"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 2c45a57705..556bd24506 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -91,6 +91,8 @@
 	"googleSearchHoverBorder": "rgba(0, 0, 0, 0.3)",
 	"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
 
+	"mfmTitleBg": "rgba(0, 0, 0, 0.07)",
+
 	"messagingRoomBg": "#fff",
 	"messagingRoomInfo": "#000",
 	"messagingRoomDateDividerLine": "rgba(0, 0, 0, 0.1)",

From 38a6aa26bc3d8fb70215474a667ad06080660cea Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 23:17:33 +0900
Subject: [PATCH 411/539] wip

---
 .../app/desktop/views/components/notes.note.vue    | 14 +++-----------
 .../app/desktop/views/pages/deck/deck.note.vue     |  4 ++--
 src/client/app/mobile/views/components/note.vue    |  4 ++--
 src/client/theme/dark.json                         |  2 ++
 src/client/theme/light.json                        |  2 ++
 5 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 7e4f42533f..b628d045aa 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -317,9 +317,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.note
 	margin 0
 	padding 0
 	background var(--face)
@@ -456,8 +454,8 @@ root(isDark)
 						>>> .quote
 							margin 8px
 							padding 6px 12px
-							color isDark ? #6f808e : #aaa
-							border-left solid 3px isDark ? #637182 : #eee
+							color var(--mfmQuote)
+							border-left solid 3px var(--mfmQuoteLine)
 
 						> .reply
 							margin-right 8px
@@ -529,12 +527,6 @@ root(isDark)
 		padding-top 4px
 		background rgba(#000, 0.0125)
 
-.note[data-darkmode]
-	root(true)
-
-.note:not([data-darkmode])
-	root(false)
-
 </style>
 
 <style lang="stylus" module>
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 3bc4f26823..c6925d5cec 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -338,8 +338,8 @@ root(isDark)
 						>>> .quote
 							margin 8px
 							padding 6px 12px
-							color isDark ? #6f808e : #aaa
-							border-left solid 3px isDark ? #637182 : #eee
+							color var(--mfmQuote)
+							border-left solid 3px var(--mfmQuoteLine)
 
 						> .reply
 							margin-right 8px
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index b1c5835692..8bb9f43fab 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -378,8 +378,8 @@ root(isDark)
 						>>> .quote
 							margin 8px
 							padding 6px 12px
-							color isDark ? #6f808e : #aaa
-							border-left solid 3px isDark ? #637182 : #eee
+							color var(--mfmQuote)
+							border-left solid 3px var(--mfmQuoteLine)
 
 						> .reply
 							margin-right 8px
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 1eb41ea52e..d79e348b07 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -92,6 +92,8 @@
 	"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
 
 	"mfmTitleBg": "rgba(0, 0, 0, 0.2)",
+	"mfmQuote": ":alpha<0.7<$text",
+	"mfmQuoteLine": ":alpha<0.6<$text",
 
 	"messagingRoomBg": "@bg",
 	"messagingRoomInfo": "#fff",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 556bd24506..7d15d49ae7 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -92,6 +92,8 @@
 	"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
 
 	"mfmTitleBg": "rgba(0, 0, 0, 0.07)",
+	"mfmQuote": ":alpha<0.6<$text",
+	"mfmQuoteLine": ":alpha<0.5<$text",
 
 	"messagingRoomBg": "#fff",
 	"messagingRoomInfo": "#000",

From 61e5cb2041523a091ba2eb434684abc3933776df Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 27 Sep 2018 23:55:05 +0900
Subject: [PATCH 412/539] wip

---
 .../app/desktop/views/pages/welcome.vue       | 57 ++++++-------------
 1 file changed, 17 insertions(+), 40 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 405fcb76d0..261642cab4 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -134,12 +134,12 @@
 		</article>
 	</modal>
 
-	<modal name="signup" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
+	<modal name="signup" class="modal" width="450px" height="auto" scrollable>
 		<header class="formHeader">%i18n:@signup%</header>
 		<mk-signup class="form"/>
 	</modal>
 
-	<modal name="signin" :class="$store.state.device.darkmode ? 'modal-dark' : 'modal-light'" width="450px" height="auto" scrollable>
+	<modal name="signin" class="modal" width="450px" height="auto" scrollable>
 		<header class="formHeader">%i18n:@signin%</header>
 		<mk-signin class="form"/>
 	</modal>
@@ -226,23 +226,7 @@ export default Vue.extend({
 .v--modal-overlay
 	background rgba(0, 0, 0, 0.6)
 
-.modal-light
-	.v--modal-box
-		color #777
-
-		.formHeader
-			border-bottom solid 1px #eee
-
-.modal-dark
-	.v--modal-box
-		background #313543
-		color #fff
-
-		.formHeader
-			border-bottom solid 1px rgba(#000, 0.2)
-
-.modal-light
-.modal-dark
+.modal
 	.form
 		padding 24px 48px 48px 48px
 
@@ -252,6 +236,13 @@ export default Vue.extend({
 		margin 0 48px
 		font-size 1.5em
 
+	.v--modal-box
+		background var(--face)
+		color var(--text)
+
+		.formHeader
+			border-bottom solid 1px rgba(#000, 0.2)
+
 .v--modal-overlay.about
 	.v--modal-box.v--modal
 		margin 32px 0
@@ -303,15 +294,9 @@ export default Vue.extend({
 </style>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-welcome
 	display flex
 	min-height 100vh
-	//background-color #00070F
-	//background-image url('/assets/bg.jpg')
-	//background-position center
-	//background-size cover
 
 	> .banner
 		position absolute
@@ -331,7 +316,7 @@ root(isDark)
 			left 0
 			width 100%
 			height 100px
-			background linear-gradient(transparent, isDark ? #191b22 : #f7f7f7)
+			background linear-gradient(transparent, var(--bg))
 
 	> .forkit
 		position absolute
@@ -345,7 +330,7 @@ root(isDark)
 		left 16px
 		padding 16px
 		font-size 18px
-		color isDark ? #fff : #444
+		color var(--text)
 
 	> main
 		margin 0 auto
@@ -354,7 +339,7 @@ root(isDark)
 		max-width 1200px
 
 		.block
-			color isDark ? #fff : #444
+			color var(--text)
 			background var(--face)
 			box-shadow var(--shadow)
 			//border-radius 8px
@@ -365,9 +350,7 @@ root(isDark)
 				padding 0 16px
 				line-height 48px
 				background var(--faceHeader)
-
-				if !isDark
-					box-shadow 0 1px 0px rgba(0, 0, 0, 0.1)
+				box-shadow 0 1px 0px rgba(0, 0, 0, 0.1)
 
 				& + div
 					max-height calc(100% - 48px)
@@ -406,7 +389,7 @@ root(isDark)
 						> .stats
 							margin-left 16px
 							padding-left 16px
-							border-left solid 1px isDark ? #fff : #444
+							border-left solid 1px var(--faceDivider)
 
 							> *
 								margin-right 16px
@@ -449,7 +432,7 @@ root(isDark)
 					> div
 						padding 0 0 16px 0
 						margin 0 0 16px 0
-						border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+						border-bottom 1px solid var(--faceDivider)
 
 						> h1
 							margin 0
@@ -518,10 +501,4 @@ root(isDark)
 								display block
 								margin 0
 
-.mk-welcome[data-darkmode]
-	root(true)
-
-.mk-welcome:not([data-darkmode])
-	root(false)
-
 </style>

From cbf5d4b71d807e53e2252e8767364f7a7e761b34 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 00:48:17 +0900
Subject: [PATCH 413/539] wip

---
 package.json                                  |   1 +
 .../app/desktop/views/pages/welcome.vue       |   8 +-
 src/client/assets/title.light.svg             | 140 ------------------
 .../assets/{title.dark.svg => title.svg}      |  16 +-
 webpack.config.ts                             |   2 +
 5 files changed, 16 insertions(+), 151 deletions(-)
 delete mode 100644 src/client/assets/title.light.svg
 rename src/client/assets/{title.dark.svg => title.svg} (92%)

diff --git a/package.json b/package.json
index a3e3b56be4..347e9d0c24 100644
--- a/package.json
+++ b/package.json
@@ -214,6 +214,7 @@
 		"vue-loader": "15.4.2",
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
+		"vue-svg-inline-loader": "1.1.3",
 		"vue-template-compiler": "2.5.17",
 		"vuedraggable": "2.16.0",
 		"vuewordcloud": "18.7.11",
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 261642cab4..f8f49bf997 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -14,7 +14,7 @@
 			<div class="main block">
 				<div>
 					<h1 v-if="name != 'Misskey'">{{ name }}</h1>
-					<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name"></h1>
+					<h1 v-else><img svg-inline src="../../../../assets/title.svg" :alt="name"></h1>
 
 					<div class="info">
 						<span><b>{{ host }}</b> - <span v-html="'%i18n:@powered-by-misskey%'"></span></span>
@@ -377,9 +377,11 @@ export default Vue.extend({
 					> h1
 						margin 0
 
-						> img
+						> svg
 							margin -8px 0 0 -16px
-							max-width 280px
+							width 280px
+							height 100px
+							fill currentColor
 
 					> .info
 						margin 0 auto 16px auto
diff --git a/src/client/assets/title.light.svg b/src/client/assets/title.light.svg
deleted file mode 100644
index 95ad11c399..0000000000
--- a/src/client/assets/title.light.svg
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="614.71039"
-   height="205.08009"
-   viewBox="0 0 162.64213 54.260776"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.1 r15371"
-   sodipodi:docname="misskey.svg"
-   inkscape:export-filename="C:\Users\Takumiya_Cho\Desktop\misskey.png"
-   inkscape:export-xdpi="96"
-   inkscape:export-ydpi="96">
-  <defs
-     id="defs2">
-    <inkscape:path-effect
-       effect="simplify"
-       id="path-effect5115"
-       is_visible="true"
-       steps="1"
-       threshold="0.000408163"
-       smooth_angles="360"
-       helper_size="0"
-       simplify_individual_paths="false"
-       simplify_just_coalesce="false"
-       simplifyindividualpaths="false"
-       simplifyJustCoalesce="false" />
-    <inkscape:path-effect
-       effect="simplify"
-       id="path-effect5104"
-       is_visible="true"
-       steps="1"
-       threshold="0.000408163"
-       smooth_angles="360"
-       helper_size="0"
-       simplify_individual_paths="false"
-       simplify_just_coalesce="false"
-       simplifyindividualpaths="false"
-       simplifyJustCoalesce="false" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.9899495"
-     inkscape:cx="370.82839"
-     inkscape:cy="79.043895"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     units="px"
-     inkscape:snap-bbox="true"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-bbox-edge-midpoints="false"
-     inkscape:snap-smooth-nodes="true"
-     inkscape:snap-center="true"
-     inkscape:snap-page="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1017"
-     inkscape:window-x="-8"
-     inkscape:window-y="1072"
-     inkscape:window-maximized="1"
-     inkscape:object-paths="true"
-     inkscape:bbox-paths="true"
-     fit-margin-top="50"
-     fit-margin-left="50"
-     fit-margin-bottom="20"
-     fit-margin-right="50" />
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="レイヤー 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-11.097531,-173.29664)">
-    <g
-       transform="matrix(0.28612302,0,0,0.28612302,17.176981,141.74334)"
-       id="text4489-6"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.92471898px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       aria-label="Mi">
-      <path
-         sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
-         inkscape:connector-curvature="0"
-         id="path5210"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#212d3a;fill-opacity:1;stroke-width:0.92471898px"
-         d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path5212"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#212d3a;fill-opacity:1;stroke-width:0.92471898px"
-         d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
-    </g>
-    <path
-       inkscape:connector-curvature="0"
-       id="path5199"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 72.022691,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791824,1.29083 2.581666,1.69422 2.581666,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685756,0.0807 1.169817,0.24203 4.477578,0.60508 0.443724,0 0.968125,-0.0403 0.201693,0 0.201693,-0.24203 0.04034,-0.20169 -0.242032,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895911,-0.48406 -1.12948,-0.32271 -1.895912,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685756,0.84711 0.685756,1.93625 0,1.25049 -0.927787,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path5201"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 89.577027,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791823,1.29083 2.581667,1.69422 2.581667,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685755,0.0807 1.169818,0.24203 4.477579,0.60508 0.443724,0 0.968125,-0.0403 0.201692,0 0.201692,-0.24203 0.04034,-0.20169 -0.242031,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895912,-0.48406 -1.129479,-0.32271 -1.895911,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685755,0.84711 0.685755,1.93625 0,1.25049 -0.927786,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path5203"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 115.65209,203.87137 q 0.12101,0.0807 2.86404,2.78336 1.25049,1.21016 1.25049,2.94471 0,1.61354 -1.16982,2.86404 -1.16982,1.21016 -2.90437,1.21016 -1.65388,0 -2.86404,-1.16982 l -4.03385,-3.91284 q -0.16136,-0.12102 -0.32271,-0.12102 -0.32271,0 -0.32271,1.21016 0,1.69422 -1.21016,2.90438 -1.21015,1.16981 -2.90437,1.16981 -1.69422,0 -2.90438,-1.16981 -1.169807,-1.21016 -1.169807,-2.90438 v -18.79776 q 0,-1.69422 1.169807,-2.86404 1.21016,-1.21015 2.90438,-1.21015 1.69422,0 2.90437,1.21015 1.21016,1.16982 1.21016,2.86404 v 6.29281 q 0,0.40339 0.28237,0.5244 0.24203,0.12102 0.5244,-0.0807 0.16135,-0.0807 4.84063,-3.18675 1.0488,-0.64542 2.25895,-0.64542 2.21862,0 3.42878,1.81524 0.64542,1.0488 0.64542,2.25896 0,2.21862 -1.81524,3.42877 l -2.54133,1.61354 v 0.0403 l -0.0807,0.0403 q -0.56474,0.36305 -0.0403,0.88745 z" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path5205"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 131.25181,213.92955 q -4.19521,0 -7.18026,-2.94472 -2.94472,-2.98505 -2.94472,-7.18026 0,-4.15487 2.94472,-7.09958 2.98505,-2.98505 7.18026,-2.98505 4.15487,0 6.97857,2.78335 0.92778,0.92779 0.92778,2.25896 0,1.33118 -0.92778,2.25896 l -4.67928,4.63893 q -1.00846,1.00847 -2.01692,1.00847 -1.45219,0 -2.25896,-0.80677 -0.80677,-0.80677 -0.80677,-2.13795 0,-1.29083 0.92778,-2.21862 l 0.80678,-0.84711 q 0.16135,-0.12101 0.0807,-0.24203 -0.12101,-0.0807 -0.32271,-0.0403 -0.80677,0.20169 -1.37151,0.80677 -1.12948,1.08914 -1.12948,2.622 0,1.5732 1.08915,2.70268 1.12947,1.08914 2.70268,1.08914 1.53286,0 2.622,-1.12947 0.92779,-0.92779 2.25896,-0.92779 1.33117,0 2.25896,0.92779 0.92779,0.92778 0.92779,2.25895 0,1.33118 -0.92779,2.25896 -2.98505,2.94472 -7.13992,2.94472 z" />
-    <path
-       inkscape:connector-curvature="0"
-       id="path5207"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#212d3a;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="m 160.51049,198.1433 v 5.60705 q 0,0.56474 -0.0807,1.21016 v 7.38195 q 0,4.51792 -2.74302,7.2206 -2.70268,2.70269 -7.30128,2.70269 -2.66234,0 -4.80028,-1.00847 -2.13795,-0.96812 -2.13795,-3.3481 0,-0.80677 0.36305,-1.53286 0.96812,-2.17828 3.3481,-2.17828 0.56474,0 1.5732,0.32271 1.00847,0.3227 1.65388,0.3227 1.69422,0 2.21862,-0.72609 0.20169,-0.28237 0.0807,-0.44372 -0.16136,-0.24204 -0.56474,-0.16136 -0.68576,0.12102 -1.49253,0.12102 -4.07419,0 -6.97856,-2.90438 -2.90438,-2.90437 -2.90438,-6.97857 v -5.60705 q 0,-1.69422 1.16982,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.90438,1.21016 1.21015,1.16982 1.21015,2.86404 v 5.60705 q 0,0.68576 0.48407,1.21016 0.5244,0.48406 1.21015,0.48406 0.7261,0 1.21016,-0.48406 0.48406,-0.5244 0.48406,-1.21016 v -5.60705 q 0,-1.69422 1.21016,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.86404,1.21016 1.21016,1.16982 1.21016,2.86404 z" />
-  </g>
-</svg>
diff --git a/src/client/assets/title.dark.svg b/src/client/assets/title.svg
similarity index 92%
rename from src/client/assets/title.dark.svg
rename to src/client/assets/title.svg
index 10139024ad..0e4e0b8b3b 100644
--- a/src/client/assets/title.dark.svg
+++ b/src/client/assets/title.svg
@@ -97,44 +97,44 @@
     <g
        transform="matrix(0.28612302,0,0,0.28612302,17.176981,141.74334)"
        id="text4489-6"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.92471898px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.92471898px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        aria-label="Mi">
       <path
          sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
          inkscape:connector-curvature="0"
          id="path5210"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#fff;fill-opacity:1;stroke-width:0.92471898px"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill-opacity:1;stroke-width:0.92471898px"
          d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
       <path
          inkscape:connector-curvature="0"
          id="path5212"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#fff;fill-opacity:1;stroke-width:0.92471898px"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill-opacity:1;stroke-width:0.92471898px"
          d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
     </g>
     <path
        inkscape:connector-curvature="0"
        id="path5199"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 72.022691,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791824,1.29083 2.581666,1.69422 2.581666,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685756,0.0807 1.169817,0.24203 4.477578,0.60508 0.443724,0 0.968125,-0.0403 0.201693,0 0.201693,-0.24203 0.04034,-0.20169 -0.242032,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895911,-0.48406 -1.12948,-0.32271 -1.895912,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685756,0.84711 0.685756,1.93625 0,1.25049 -0.927787,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
     <path
        inkscape:connector-curvature="0"
        id="path5201"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 89.577027,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791823,1.29083 2.581667,1.69422 2.581667,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685755,0.0807 1.169818,0.24203 4.477579,0.60508 0.443724,0 0.968125,-0.0403 0.201692,0 0.201692,-0.24203 0.04034,-0.20169 -0.242031,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895912,-0.48406 -1.129479,-0.32271 -1.895911,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685755,0.84711 0.685755,1.93625 0,1.25049 -0.927786,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
     <path
        inkscape:connector-curvature="0"
        id="path5203"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 115.65209,203.87137 q 0.12101,0.0807 2.86404,2.78336 1.25049,1.21016 1.25049,2.94471 0,1.61354 -1.16982,2.86404 -1.16982,1.21016 -2.90437,1.21016 -1.65388,0 -2.86404,-1.16982 l -4.03385,-3.91284 q -0.16136,-0.12102 -0.32271,-0.12102 -0.32271,0 -0.32271,1.21016 0,1.69422 -1.21016,2.90438 -1.21015,1.16981 -2.90437,1.16981 -1.69422,0 -2.90438,-1.16981 -1.169807,-1.21016 -1.169807,-2.90438 v -18.79776 q 0,-1.69422 1.169807,-2.86404 1.21016,-1.21015 2.90438,-1.21015 1.69422,0 2.90437,1.21015 1.21016,1.16982 1.21016,2.86404 v 6.29281 q 0,0.40339 0.28237,0.5244 0.24203,0.12102 0.5244,-0.0807 0.16135,-0.0807 4.84063,-3.18675 1.0488,-0.64542 2.25895,-0.64542 2.21862,0 3.42878,1.81524 0.64542,1.0488 0.64542,2.25896 0,2.21862 -1.81524,3.42877 l -2.54133,1.61354 v 0.0403 l -0.0807,0.0403 q -0.56474,0.36305 -0.0403,0.88745 z" />
     <path
        inkscape:connector-curvature="0"
        id="path5205"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 131.25181,213.92955 q -4.19521,0 -7.18026,-2.94472 -2.94472,-2.98505 -2.94472,-7.18026 0,-4.15487 2.94472,-7.09958 2.98505,-2.98505 7.18026,-2.98505 4.15487,0 6.97857,2.78335 0.92778,0.92779 0.92778,2.25896 0,1.33118 -0.92778,2.25896 l -4.67928,4.63893 q -1.00846,1.00847 -2.01692,1.00847 -1.45219,0 -2.25896,-0.80677 -0.80677,-0.80677 -0.80677,-2.13795 0,-1.29083 0.92778,-2.21862 l 0.80678,-0.84711 q 0.16135,-0.12101 0.0807,-0.24203 -0.12101,-0.0807 -0.32271,-0.0403 -0.80677,0.20169 -1.37151,0.80677 -1.12948,1.08914 -1.12948,2.622 0,1.5732 1.08915,2.70268 1.12947,1.08914 2.70268,1.08914 1.53286,0 2.622,-1.12947 0.92779,-0.92779 2.25896,-0.92779 1.33117,0 2.25896,0.92779 0.92779,0.92778 0.92779,2.25895 0,1.33118 -0.92779,2.25896 -2.98505,2.94472 -7.13992,2.94472 z" />
     <path
        inkscape:connector-curvature="0"
        id="path5207"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
        d="m 160.51049,198.1433 v 5.60705 q 0,0.56474 -0.0807,1.21016 v 7.38195 q 0,4.51792 -2.74302,7.2206 -2.70268,2.70269 -7.30128,2.70269 -2.66234,0 -4.80028,-1.00847 -2.13795,-0.96812 -2.13795,-3.3481 0,-0.80677 0.36305,-1.53286 0.96812,-2.17828 3.3481,-2.17828 0.56474,0 1.5732,0.32271 1.00847,0.3227 1.65388,0.3227 1.69422,0 2.21862,-0.72609 0.20169,-0.28237 0.0807,-0.44372 -0.16136,-0.24204 -0.56474,-0.16136 -0.68576,0.12102 -1.49253,0.12102 -4.07419,0 -6.97856,-2.90438 -2.90438,-2.90437 -2.90438,-6.97857 v -5.60705 q 0,-1.69422 1.16982,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.90438,1.21016 1.21015,1.16982 1.21015,2.86404 v 5.60705 q 0,0.68576 0.48407,1.21016 0.5244,0.48406 1.21015,0.48406 0.7261,0 1.21016,-0.48406 0.48406,-0.5244 0.48406,-1.21016 v -5.60705 q 0,-1.69422 1.21016,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.86404,1.21016 1.21016,1.16982 1.21016,2.86404 z" />
   </g>
 </svg>
diff --git a/webpack.config.ts b/webpack.config.ts
index 3822080574..3b14ee4a8a 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -134,6 +134,8 @@ module.exports = {
 						preserveWhitespace: false
 					}
 				}
+			}, {
+				loader: 'vue-svg-inline-loader'
 			}, {
 				loader: 'replace',
 				query: {

From f4bf824e79af6d8d7fb8fbb33f600f5ddb322a03 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 00:51:17 +0900
Subject: [PATCH 414/539] wip

---
 src/client/app/desktop/views/pages/welcome.vue | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index f8f49bf997..65651f7ffc 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -95,7 +95,7 @@
 		</div>
 	</main>
 
-	<modal name="about" :class="$store.state.device.darkmode ? ['about', 'modal-dark'] : ['about', 'modal-light']" width="800px" height="auto" scrollable>
+	<modal name="about" class="about modal" width="800px" height="auto" scrollable>
 		<article class="fpdezooorhntlzyeszemrsqdlgbysvxq">
 			<h1>%i18n:common.intro.title%</h1>
 			<p v-html="'%i18n:common.intro.about%'"></p>
@@ -258,7 +258,7 @@ export default Vue.extend({
 
 	> section
 		> h2
-			border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+			border-bottom 1px solid var(--faceDivider)
 
 		> section
 			display grid
@@ -267,7 +267,7 @@ export default Vue.extend({
 			gap 32px
 			margin-bottom 32px
 			padding-bottom 32px
-			border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+			border-bottom 1px solid var(--faceDivider)
 
 			&:nth-child(odd)
 				grid-template-columns 1fr 180px

From d1dce76e2814012f7350563f23834c77d6da18ad Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 01:05:09 +0900
Subject: [PATCH 415/539] wip

---
 src/client/app/mobile/style.styl              | 10 +-----
 .../app/mobile/views/components/ui.nav.vue    |  4 +--
 src/client/app/mobile/views/pages/welcome.vue | 31 ++++++++++---------
 src/client/theme/dark.json                    |  2 ++
 src/client/theme/light.json                   |  2 ++
 5 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/src/client/app/mobile/style.styl b/src/client/app/mobile/style.styl
index df8f4a8fae..095e5266fd 100644
--- a/src/client/app/mobile/style.styl
+++ b/src/client/app/mobile/style.styl
@@ -8,12 +8,4 @@
 
 html
 	height 100%
-	background #ececed !important
-
-	&[data-darkmode]
-		background #191B22 !important
-
-body
-	display flex
-	flex-direction column
-	min-height 100%
+	background var(--bg)
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index 29dcf18021..a84dc7349a 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -226,8 +226,8 @@ root(isDark)
 
 	.announcements
 		> article
-			background isDark ? rgba(30, 129, 216, 0.2) : rgba(155, 196, 232, 0.2)
-			color isDark ? #fff : #3f4967
+			background var(--mobileAnnouncement)
+			color var(--mobileAnnouncementFg)
 			padding 16px
 			margin 8px 0
 			font-size 12px
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 82ccfeaff5..4e24f70ffc 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -3,7 +3,7 @@
 	<div class="banner" :style="{ backgroundImage: banner ? `url(${banner})` : null }"></div>
 
 	<div>
-		<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" :alt="name">
+		<img svg-inline src="../../../../assets/title.svg" :alt="name">
 		<p class="host">{{ host }}</p>
 		<div class="about">
 			<h2>{{ name }}</h2>
@@ -144,16 +144,17 @@ root(isDark)
 			left 0
 			width 100%
 			height 100px
-			background linear-gradient(transparent, isDark ? #191b22 : #f7f7f7)
+			background linear-gradient(transparent, var(--bg))
 
 	> div:not(.banner)
 		padding 32px
 		margin 0 auto
 		max-width 500px
 
-		> img
+		> svg
 			display block
-			max-width 200px
+			width 200px
+			height 50px
 			margin 0 auto
 
 		> .host
@@ -169,8 +170,8 @@ root(isDark)
 		> .about
 			margin-top 16px
 			padding 16px
-			color #555
-			background #fff
+			color var(--text)
+			background var(--face)
 			border-radius 6px
 
 			> h2
@@ -238,7 +239,7 @@ root(isDark)
 			margin 16px 0
 			padding 8px
 			font-size 14px
-			color #444
+			color var(--text)
 			background rgba(#000, 0.1)
 			border-radius 6px
 
@@ -249,9 +250,9 @@ root(isDark)
 			margin 16px 0
 
 			> article
-				background isDark ? rgba(30, 129, 216, 0.2) : rgba(155, 196, 232, 0.2)
+				background var(--mobileAnnouncement)
 				border-radius 6px
-				color isDark ? #fff : #3f4967
+				color var(--mobileAnnouncementFg)
 				padding 16px
 				margin 8px 0
 				font-size 12px
@@ -263,10 +264,10 @@ root(isDark)
 			margin 16px 0
 			padding 32px
 			font-size 14px
-			background #fff
+			background var(--face)
 			border-radius 6px
 			overflow hidden
-			color #3a3e46
+			color var(--text)
 
 			> h1
 				margin 0
@@ -279,12 +280,12 @@ root(isDark)
 
 			> section
 				> h2
-					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+					border-bottom 1px solid var(--faceDivider)
 
 				> section
 					margin-bottom 16px
 					padding-bottom 16px
-					border-bottom 1px solid isDark ? rgba(#000, 0.2) : rgba(#000, 0.05)
+					border-bottom 1px solid var(--faceDivider)
 
 					> h3
 						margin-bottom 8px
@@ -301,7 +302,7 @@ root(isDark)
 
 		> .info
 			padding 16px 0
-			border solid 2px #ddd
+			border solid 2px rgba(0, 0, 0, 0.1)
 			border-radius 8px
 
 			> *
@@ -309,7 +310,7 @@ root(isDark)
 
 		> footer
 			text-align center
-			color #444
+			color var(--text)
 
 			> small
 				display block
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index d79e348b07..3074eb22ae 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -120,6 +120,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
+	"mobileAnnouncement": "rgba(30, 129, 216, 0.2)",
+	"mobileAnnouncementFg": "#fff",
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 7d15d49ae7..9f41ee8f22 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -120,6 +120,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 
+	"mobileAnnouncement": "rgba(155, 196, 232, 0.2)",
+	"mobileAnnouncementFg": "#3f4967",
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",

From 9ea7de3564caa063ee9549ae808ea731379e2516 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 10:14:58 +0900
Subject: [PATCH 416/539] wip

---
 .../app/common/views/components/media-banner.vue |  9 ++-------
 .../common/views/components/welcome-timeline.vue | 16 +++++-----------
 src/client/theme/dark.json                       | 11 +++++++----
 src/client/theme/halloween.json                  |  3 +--
 src/client/theme/light.json                      | 11 +++++++----
 5 files changed, 22 insertions(+), 28 deletions(-)

diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 211dbf0208..0f5981d3c4 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/components/media-banner.vue
@@ -43,7 +43,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-media-banner
 	width 100%
 	border-radius 4px
 	margin-top 4px
@@ -71,7 +71,7 @@ root(isDark)
 			font-size 1.6em
 
 	> .download
-		background isDark ? #21242d : #f7f7f7
+		background var(--noteAttachedFile)
 
 	> .sensitive
 		background #111
@@ -82,9 +82,4 @@ root(isDark)
 			display block
 			width 100%
 
-.mk-media-banner[data-darkmode]
-	root(true)
-
-.mk-media-banner:not([data-darkmode])
-	root(false)
 </style>
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index ca1b6eb928..6934fb4856 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -90,7 +90,7 @@ export default Vue.extend({
 	opacity 0
 	transform translateY(-30px)
 
-root(isDark)
+.mk-welcome-timeline
 	background var(--face)
 
 	> div
@@ -101,8 +101,8 @@ root(isDark)
 			padding 16px
 			overflow-wrap break-word
 			font-size .9em
-			color isDark ? #fff : #4C4C4C
-			border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
+			color var(--noteText)
+			border-bottom 1px solid var(--faceDivider)
 
 			&:after
 				content ""
@@ -141,22 +141,16 @@ root(isDark)
 
 					> .username
 						margin 0 .5em 0 0
-						color isDark ? #606984 : #ccc
+						color var(--noteHeaderAcct)
 
 					> .info
 						margin-left auto
 						font-size 0.9em
 
 						> .created-at
-							color isDark ? #606984 : #c0c0c0
+							color var(--noteHeaderInfo)
 
 				> .text
 					text-align left
 
-.mk-welcome-timeline[data-darkmode]
-	root(true)
-
-.mk-welcome-timeline:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 3074eb22ae..498c9ecdd9 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -29,6 +29,7 @@
 	"faceClearButtonActive": "rgba(0, 0, 0, 0.2)",
 	"popupBg": ":lighten<5<$secondary",
 	"popupFg": "#d6dce2",
+
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
 	"renoteGradient": "#314027",
 	"renoteText": "#9dbb00",
@@ -49,10 +50,12 @@
 	"noteActionsReactionHover": "#fa0",
 	"noteActionsHighlighted": "#707b97",
 
+	"noteAttachedFile": "rgba(255, 255, 255, 0.1)",
+
 	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
 
-	"dateDividerBg": "#242731",
-	"dateDividerFg": "#666b79",
+	"dateDividerBg": ":darken<2<$secondary",
+	"dateDividerFg": ":alpha<0.7<$text",
 
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
 	"inputBorder": "rgba(255, 255, 255, 0.7)",
@@ -103,8 +106,8 @@
 	"messagingRoomMessageBg": "$secondary",
 	"messagingRoomMessageFg": "#fff",
 
-	"desktopHeaderBg": "#313543",
-	"desktopHeaderFg": "#b8c5ca",
+	"desktopHeaderBg": ":lighten<5<$secondary",
+	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#fff",
 	"desktopHeaderIcon": "url('/assets/desktop/header-icon.dark.svg')",
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 1bd00357e2..6e92db95ff 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -14,6 +14,5 @@
 
 	"renoteGradient": "#5d2d1a",
 	"renoteText": "#ff6c00",
-	"quoteBorder": "#c3631c",
-	"desktopHeaderBg": "#36314e"
+	"quoteBorder": "#c3631c"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 9f41ee8f22..d05ee995f6 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -29,6 +29,7 @@
 	"faceClearButtonActive": "rgba(0, 0, 0, 0.05)",
 	"popupBg": ":lighten<5<$secondary",
 	"popupFg": "#586069",
+
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
 	"renoteGradient": "#edfde2",
 	"renoteText": "#9dbb00",
@@ -49,10 +50,12 @@
 	"noteActionsReactionHover": "#fa0",
 	"noteActionsHighlighted": "#888",
 
+	"noteAttachedFile": "rgba(0, 0, 0, 0.05)",
+
 	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
 
-	"dateDividerBg": "#fdfdfd",
-	"dateDividerFg": "#aaa",
+	"dateDividerBg": ":darken<2<$secondary",
+	"dateDividerFg": ":alpha<0.7<$text",
 
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
 	"inputBorder": "rgba(0, 0, 0, 0.42)",
@@ -103,8 +106,8 @@
 	"messagingRoomMessageBg": "#eee",
 	"messagingRoomMessageFg": "#333",
 
-	"desktopHeaderBg": "#f7f7f7",
-	"desktopHeaderFg": "#9eaba8",
+	"desktopHeaderBg": ":lighten<5<$secondary",
+	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#7b8c88",
 	"desktopHeaderIcon": "url('/assets/desktop/header-icon.light.svg')",
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",

From 18be0d36f34138b0a60c39609a649b98367e1356 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 10:50:59 +0900
Subject: [PATCH 417/539] wip

---
 src/client/theme/dark.json  | 8 +++++---
 src/client/theme/light.json | 2 ++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 498c9ecdd9..8a39648037 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -14,9 +14,11 @@
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
 	"text": "$text",
-	"scrollbarTrack": "#282c37",
-	"scrollbarHandle": "#454954",
-	"scrollbarHandleHover": "#535660",
+
+	"scrollbarTrack": ":darken<5<$secondary",
+	"scrollbarHandle": ":lighten<5<$secondary",
+	"scrollbarHandleHover": ":lighten<10<$secondary",
+
 	"face": "$secondary",
 	"faceText": "#fff",
 	"faceHeader": ":lighten<5<$secondary",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index d05ee995f6..f5003ae2ec 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -14,9 +14,11 @@
 	"primaryForeground": "#fff",
 	"bg": ":darken<8<$secondary",
 	"text": "$text",
+
 	"scrollbarTrack": "#fff",
 	"scrollbarHandle": "#00000033",
 	"scrollbarHandleHover": "#00000066",
+
 	"face": "$secondary",
 	"faceText": "#444",
 	"faceHeader": ":lighten<5<$secondary",

From fccfe19e13db9b7e22829193d3ebd2bb3cad3453 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:18:56 +0900
Subject: [PATCH 418/539] wip

---
 src/client/app/common/views/widgets/nav.vue   | 14 +++-----
 .../common/views/widgets/posts-monitor.vue    | 10 ++----
 src/client/app/common/views/widgets/rss.vue   | 16 +++------
 .../views/widgets/server.cpu-memory.vue       | 10 ++----
 .../views/pages/admin/admin.cpu-memory.vue    |  2 +-
 src/client/app/mobile/views/pages/user.vue    | 34 +++++++------------
 src/client/theme/dark.json                    |  9 +++++
 src/client/theme/light.json                   |  9 +++++
 8 files changed, 45 insertions(+), 59 deletions(-)

diff --git a/src/client/app/common/views/widgets/nav.vue b/src/client/app/common/views/widgets/nav.vue
index 04dfe97c72..12003db3f2 100644
--- a/src/client/app/common/views/widgets/nav.vue
+++ b/src/client/app/common/views/widgets/nav.vue
@@ -16,23 +16,17 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mkw-nav
 	.mkw-nav--body
 		padding 16px
 		font-size 12px
-		color isDark ? #9aa4b3 : #aaa
+		color var(--text)
 		background var(--face)
 
 		a
-			color isDark ? #9aa4b3 : #999
+			color var(--text)
 
 		i
-			color isDark ? #9aa4b3 : #ccc
-
-.mkw-nav[data-darkmode]
-	root(true)
-
-.mkw-nav:not([data-darkmode])
-	root(false)
+			color var(--text)
 
 </style>
diff --git a/src/client/app/common/views/widgets/posts-monitor.vue b/src/client/app/common/views/widgets/posts-monitor.vue
index 801307be54..09f766696b 100644
--- a/src/client/app/common/views/widgets/posts-monitor.vue
+++ b/src/client/app/common/views/widgets/posts-monitor.vue
@@ -173,7 +173,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.qpdmibaztplkylerhdbllwcokyrfxeyj
 	&.dual
 		> svg
 			width 50%
@@ -192,7 +192,7 @@ root(isDark)
 
 		> text
 			font-size 5px
-			fill isDark ? rgba(#fff, 0.55) : rgba(#000, 0.55)
+			fill var(--chartCaption)
 
 			> tspan
 				opacity 0.5
@@ -202,10 +202,4 @@ root(isDark)
 		display block
 		clear both
 
-.qpdmibaztplkylerhdbllwcokyrfxeyj[data-darkmode]
-	root(true)
-
-.qpdmibaztplkylerhdbllwcokyrfxeyj:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/rss.vue b/src/client/app/common/views/widgets/rss.vue
index a777388cdb..448eee9fb6 100644
--- a/src/client/app/common/views/widgets/rss.vue
+++ b/src/client/app/common/views/widgets/rss.vue
@@ -65,7 +65,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mkw-rss
 	.mkw-rss--body
 		.feed
 			padding 12px 16px
@@ -74,8 +74,8 @@ root(isDark)
 			> a
 				display block
 				padding 4px 0
-				color isDark ? #9aa4b3 : #666
-				border-bottom dashed 1px isDark ? #1c2023 : #eee
+				color var(--text)
+				border-bottom dashed 1px var(--faceDivider)
 
 				&:last-child
 					border-bottom none
@@ -90,7 +90,7 @@ root(isDark)
 				margin-right 4px
 
 		&[data-mobile]
-			background isDark ? #21242f : #f3f3f3
+			background var(--face)
 
 			.feed
 				padding 0
@@ -100,12 +100,6 @@ root(isDark)
 					border-bottom none
 
 					&:nth-child(even)
-						background isDark ? rgba(#000, 0.05) : rgba(#fff, 0.7)
-
-.mkw-rss[data-darkmode]
-	root(true)
-
-.mkw-rss:not([data-darkmode])
-	root(false)
+						background rgba(#000, 0.05)
 
 </style>
diff --git a/src/client/app/common/views/widgets/server.cpu-memory.vue b/src/client/app/common/views/widgets/server.cpu-memory.vue
index b0421d6150..55aa1ea895 100644
--- a/src/client/app/common/views/widgets/server.cpu-memory.vue
+++ b/src/client/app/common/views/widgets/server.cpu-memory.vue
@@ -129,7 +129,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.cpu-memory
 	> svg
 		display block
 		padding 10px
@@ -144,7 +144,7 @@ root(isDark)
 
 		> text
 			font-size 5px
-			fill isDark ? rgba(#fff, 0.55) : rgba(#000, 0.55)
+			fill var(--chartCaption)
 
 			> tspan
 				opacity 0.5
@@ -154,10 +154,4 @@ root(isDark)
 		display block
 		clear both
 
-.cpu-memory[data-darkmode]
-	root(true)
-
-.cpu-memory:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue b/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
index d14ce12553..ebaa11478d 100644
--- a/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
@@ -125,7 +125,7 @@ root(isDark)
 
 		> text
 			font-size 10px
-			fill isDark ? rgba(#fff, 0.55) : rgba(#000, 0.55)
+			fill var(--chartCaption)
 
 			> tspan
 				opacity 0.5
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index 1ff81fc0c6..d7edda1a74 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -115,10 +115,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-	$bg = isDark ? #22252f : #f7f7f7
+main
+	$bg = var(--face)
 
 	> .is-suspended
 	> .is-remote
@@ -148,7 +146,7 @@ root(isDark)
 
 		> .banner
 			padding-bottom 33.3%
-			background-color isDark ? #5f7273 : #cacaca
+			background-color rgba(0, 0, 0, 0.1)
 			background-size cover
 			background-position center
 
@@ -198,26 +196,26 @@ root(isDark)
 					margin 0
 					line-height 22px
 					font-size 20px
-					color isDark ? #fff : #757c82
+					color var(--mobileUserPageName)
 
 				> .username
 					display inline-block
 					line-height 20px
 					font-size 16px
 					font-weight bold
-					color isDark ? #657786 : #969ea5
+					color var(--mobileUserPageAcct)
 
 				> .followed
 					margin-left 8px
 					padding 2px 4px
 					font-size 12px
-					color isDark ? #657786 : #fff
-					background isDark ? #f8f8f8 : #a7bec7
+					color var(--mobileUserPageFollowedFg)
+					background var(--mobileUserPageFollowedBg)
 					border-radius 4px
 
 			> .description
 				margin 8px 0
-				color isDark ? #fff : #757c82
+				color var(--mobileUserPageDescription)
 
 			> .info
 				margin 8px 0
@@ -225,14 +223,14 @@ root(isDark)
 				> p
 					display inline
 					margin 0 16px 0 0
-					color isDark ? #a9b9c1 : #90989c
+					color var(--text)
 
 					> i
 						margin-right 4px
 
 			> .status
 				> a
-					color isDark ? #657786 : #818a92
+					color var(--text)
 
 					&:not(:last-child)
 						margin-right 16px
@@ -240,7 +238,7 @@ root(isDark)
 					> b
 						margin-right 4px
 						font-size 16px
-						color isDark ? #fff : #787e86
+						color var(--mobileUserPageStatusHighlight)
 
 					> i
 						font-size 14px
@@ -249,7 +247,7 @@ root(isDark)
 		position -webkit-sticky
 		position sticky
 		top 47px
-		box-shadow 0 4px 4px isDark ? rgba(#000, 0.3) : rgba(#000, 0.07)
+		box-shadow 0 4px 4px var(--mobileUserPageHeaderShadow)
 		background-color $bg
 		z-index 2
 
@@ -266,7 +264,7 @@ root(isDark)
 				line-height 48px
 				font-size 12px
 				text-decoration none
-				color isDark ? #657786 : #9ca1a5
+				color var(--text)
 				border-bottom solid 2px transparent
 
 				@media (min-width 400px)
@@ -289,10 +287,4 @@ root(isDark)
 		@media (min-width 600px)
 			padding 32px
 
-main[data-darkmode]
-	root(true)
-
-main:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 8a39648037..896ac7a920 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -86,6 +86,8 @@
 	"calendarSaturdayOrSunday": "#ff6679",
 	"calendarDay": "#c5ced6",
 
+	"chartCaption": ":alpha<0.6<$text",
+
 	"announcementsBg": "#253a50",
 	"announcementsTitle": "#539eff",
 	"announcementsText": "#fff",
@@ -125,6 +127,13 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
+	"mobileUserPageName": "#fff",
+	"mobileUserPageAcct": "$text",
+	"mobileUserPageDescription": "$text",
+	"mobileUserPageFollowedBg": "rgba(0, 0, 0, 0.3)",
+	"mobileUserPageFollowedFg": "$text",
+	"mobileUserPageStatusHighlight": "#fff",
+	"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.3)",
 	"mobileAnnouncement": "rgba(30, 129, 216, 0.2)",
 	"mobileAnnouncementFg": "#fff",
 	"mobileSignedInAsBg": "#273c34",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index f5003ae2ec..fe018b5476 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -86,6 +86,8 @@
 	"calendarSaturdayOrSunday": "#ef95a0",
 	"calendarDay": "#777",
 
+	"chartCaption": ":alpha<0.6<$text",
+
 	"announcementsBg": "#f3f9ff",
 	"announcementsTitle": "#4078c0",
 	"announcementsText": "#57616f",
@@ -125,6 +127,13 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 
+	"mobileUserPageName": "#757c82",
+	"mobileUserPageAcct": "#969ea5",
+	"mobileUserPageDescription": "#757c82",
+	"mobileUserPageFollowedBg": "#a7bec7",
+	"mobileUserPageFollowedFg": "#fff",
+	"mobileUserPageStatusHighlight": "#787e86",
+	"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.07)",
 	"mobileAnnouncement": "rgba(155, 196, 232, 0.2)",
 	"mobileAnnouncementFg": "#3f4967",
 	"mobileSignedInAsBg": "#fcfff5",

From 436773837b5f121168a7d23ce3e3b817ededc12a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:23:30 +0900
Subject: [PATCH 419/539] wip

---
 .../app/mobile/views/components/ui.nav.vue       | 16 ++++------------
 src/client/theme/dark.json                       |  2 ++
 src/client/theme/light.json                      |  2 ++
 3 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index a84dc7349a..ba122cc3e2 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -121,10 +121,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-	$color = isDark ? #c9d2e0 : #777
+.nav
+	$color = var(--text)
 
 	.backdrop
 		position fixed
@@ -133,7 +131,7 @@ root(isDark)
 		z-index 1025
 		width 100%
 		height 100%
-		background isDark ? rgba(#000, 0.7) : rgba(#000, 0.2)
+		background var(--mobileNavBackdrop)
 
 	.body
 		position fixed
@@ -144,7 +142,7 @@ root(isDark)
 		height 100%
 		overflow auto
 		-webkit-overflow-scrolling touch
-		background isDark ? #16191f : #fff
+		background var(--secondary)
 
 	.me
 		display block
@@ -265,10 +263,4 @@ root(isDark)
 	opacity: 0;
 }
 
-.nav[data-darkmode]
-	root(true)
-
-.nav:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 896ac7a920..f5294f27cd 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -12,6 +12,7 @@
 
 	"primary": "$primary",
 	"primaryForeground": "#fff",
+	"secondary": "$secondary",
 	"bg": ":darken<8<$secondary",
 	"text": "$text",
 
@@ -127,6 +128,7 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
+	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
 	"mobileUserPageName": "#fff",
 	"mobileUserPageAcct": "$text",
 	"mobileUserPageDescription": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index fe018b5476..4776b2f3b3 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -12,6 +12,7 @@
 
 	"primary": "$primary",
 	"primaryForeground": "#fff",
+	"secondary": "$secondary",
 	"bg": ":darken<8<$secondary",
 	"text": "$text",
 
@@ -127,6 +128,7 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 
+	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
 	"mobileUserPageName": "#757c82",
 	"mobileUserPageAcct": "#969ea5",
 	"mobileUserPageDescription": "#757c82",

From 7ca5e33a3afdc57ea27cda2c004a3e6e8d688342 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:40:47 +0900
Subject: [PATCH 420/539] wip

---
 .../app/mobile/views/components/ui.header.vue     | 15 +++------------
 src/client/theme/dark.json                        |  2 ++
 src/client/theme/light.json                       |  2 ++
 3 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index d3e258f052..7fd68002e7 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -70,9 +70,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.header
 	$height = 48px
 
 	position fixed
@@ -98,7 +96,7 @@ root(isDark)
 		color #fff
 
 	> .main
-		color rgba(#fff, 0.9)
+		color var(--mobileHeaderFg)
 
 		> .backdrop
 			position absolute
@@ -108,8 +106,7 @@ root(isDark)
 			height $height
 			-webkit-backdrop-filter blur(12px)
 			backdrop-filter blur(12px)
-			//background-color rgba(#1b2023, 0.75)
-			background-color isDark ? #313543 : #595f6f
+			background-color var(--mobileHeaderBg)
 
 		> .content
 			z-index 1001
@@ -171,10 +168,4 @@ root(isDark)
 				line-height $height
 				border-left solid 1px rgba(#000, 0.1)
 
-.header[data-darkmode]
-	root(true)
-
-.header:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index f5294f27cd..65e12d5247 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -128,6 +128,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
+	"mobileHeaderBg": ":lighten<5<$secondary",
+	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
 	"mobileUserPageName": "#fff",
 	"mobileUserPageAcct": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4776b2f3b3..4817663529 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -128,6 +128,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 
+	"mobileHeaderBg": ":lighten<5<$secondary",
+	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
 	"mobileUserPageName": "#757c82",
 	"mobileUserPageAcct": "#969ea5",

From 016c7fd2c436c0a70d24e469ac42fe8bda42592f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:43:15 +0900
Subject: [PATCH 421/539] wip

---
 src/client/app/mobile/views/pages/user/home.vue | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/client/app/mobile/views/pages/user/home.vue b/src/client/app/mobile/views/pages/user/home.vue
index d19ccfd522..2c7134ed43 100644
--- a/src/client/app/mobile/views/pages/user/home.vue
+++ b/src/client/app/mobile/views/pages/user/home.vue
@@ -54,7 +54,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.root.home
 	max-width 600px
 	margin 0 auto
 
@@ -65,7 +65,7 @@ root(isDark)
 			margin 0 0 16px 0
 
 	> section
-		background isDark ? #21242f : #eee
+		background var(--face)
 		border-radius 8px
 		box-shadow 0 4px 16px rgba(#000, 0.1)
 
@@ -80,8 +80,8 @@ root(isDark)
 			padding 8px 10px
 			font-size 15px
 			font-weight normal
-			color isDark ? #b8c5cc : #465258
-			background var(--face)
+			color var(--text)
+			background var(--faceHeader)
 			border-radius 8px 8px 0 0
 
 			@media (min-width 500px)
@@ -98,12 +98,6 @@ root(isDark)
 		display block
 		margin 16px
 		text-align center
-		color isDark ? #cad2da : #929aa0
-
-.root.home[data-darkmode]
-	root(true)
-
-.root.home:not([data-darkmode])
-	root(false)
+		color var(--text)
 
 </style>

From 47d4de75da5bd2b6aafb5cdc6eabf6fec6932f1e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:44:23 +0900
Subject: [PATCH 422/539] wip

---
 .../views/components/widget-container.vue       | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/src/client/app/mobile/views/components/widget-container.vue b/src/client/app/mobile/views/components/widget-container.vue
index bf7adf5fcb..2a4025002b 100644
--- a/src/client/app/mobile/views/components/widget-container.vue
+++ b/src/client/app/mobile/views/components/widget-container.vue
@@ -25,8 +25,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-	background isDark ? #21242f : #eee
+.mk-widget-container
+	background var(--face)
 	border-radius 8px
 	box-shadow 0 4px 16px rgba(#000, 0.1)
 	overflow hidden
@@ -35,17 +35,14 @@ root(isDark)
 		background transparent !important
 		box-shadow none !important
 
-	&.hideHeader
-		background isDark ? #21242f : #fff
-
 	> header
 		> .title
 			margin 0
 			padding 8px 10px
 			font-size 15px
 			font-weight normal
-			color isDark ? #b8c5cc : #465258
-			background var(--face)
+			color var(--faceHeaderText)
+			background var(--faceHeader)
 			border-radius 8px 8px 0 0
 
 			> [data-fa]
@@ -65,10 +62,4 @@ root(isDark)
 			font-size 15px
 			color #465258
 
-.mk-widget-container[data-darkmode]
-	root(true)
-
-.mk-widget-container:not([data-darkmode])
-	root(false)
-
 </style>

From fe8c384618597b044c004970fa39a78b0e6c5ec7 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:45:34 +0900
Subject: [PATCH 423/539] wip

---
 src/client/app/mobile/views/pages/settings.vue | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index 0a44a592e1..a3b508e37e 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -322,7 +322,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+main
 	margin 0 auto
 	max-width 600px
 	width 100%
@@ -346,12 +346,7 @@ root(isDark)
 	> footer
 		margin 16px
 		text-align center
-		color isDark ? #c9d2e0 : #888
-
-main[data-darkmode]
-	root(true)
-
-main:not([data-darkmode])
-	root(false)
+		color var(--text)
+		opacity 0.7
 
 </style>

From d715af0620d1c18b5a5820193d1503bae94fd05e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 11:49:32 +0900
Subject: [PATCH 424/539] wip

---
 src/client/app/mobile/views/pages/home.vue | 22 ++++++----------------
 src/client/theme/dark.json                 |  1 +
 src/client/theme/light.json                |  1 +
 3 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index c2ab5d5623..616a3aee1b 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -154,9 +154,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+main
 	> .nav
 		> .pointer
 			position fixed
@@ -176,7 +174,7 @@ root(isDark)
 				border-top solid $size transparent
 				border-left solid $size transparent
 				border-right solid $size transparent
-				border-bottom solid $size isDark ? #272f3a : #fff
+				border-bottom solid $size var(--popupBg)
 
 		> .bg
 			position fixed
@@ -198,7 +196,7 @@ root(isDark)
 			margin 0 auto
 			overflow auto
 			-webkit-overflow-scrolling touch
-			background isDark ? #272f3a : #fff
+			background var(--popupBg)
 			border-radius 8px
 			box-shadow 0 0 16px rgba(#000, 0.1)
 
@@ -207,19 +205,19 @@ root(isDark)
 
 				> .hr
 					margin 8px 0
-					border-top solid 1px isDark ? rgba(#000, 0.3) : rgba(#000, 0.1)
+					border-top solid 1px var(--faceDivider)
 
 				> *:not(.hr)
 					display block
 					padding 8px 16px
-					color isDark ? #cdd0d8 : #666
+					color var(--text)
 
 					&[data-active]
 						color var(--primaryForeground)
 						background var(--primary)
 
 					&:not([data-active]):hover
-						background isDark ? #353e4a : #eee
+						background var(--mobileHomeTlItemHover)
 
 					> .badge
 						margin-left 6px
@@ -237,17 +235,9 @@ root(isDark)
 		@media (min-width 600px)
 			padding 32px
 
-main[data-darkmode]
-	root(true)
-
-main:not([data-darkmode])
-	root(false)
-
 </style>
 
 <style lang="stylus" module>
-
-
 .title
 	i
 		margin-right 4px
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 65e12d5247..6aa9bf86b6 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -131,6 +131,7 @@
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
+	"mobileHomeTlItemHover": "rgba(255, 255, 255, 0.1)",
 	"mobileUserPageName": "#fff",
 	"mobileUserPageAcct": "$text",
 	"mobileUserPageDescription": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4817663529..1cd77c7d61 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -131,6 +131,7 @@
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
+	"mobileHomeTlItemHover": "rgba(0, 0, 0, 0.05)",
 	"mobileUserPageName": "#757c82",
 	"mobileUserPageAcct": "#969ea5",
 	"mobileUserPageDescription": "#757c82",

From b4a4d784c3ec847dd19b4b692d66a52c09c9dcb5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 12:07:28 +0900
Subject: [PATCH 425/539] wip

---
 .../app/mobile/views/components/post-form.vue | 24 +++++++------------
 src/client/theme/dark.json                    |  2 ++
 src/client/theme/light.json                   |  2 ++
 3 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index 6ada5e60ee..fe8e30a41d 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -324,9 +324,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-post-form
 	max-width 500px
 	width calc(100% - 16px)
 	margin 8px auto
@@ -349,20 +347,20 @@ root(isDark)
 		> header
 			z-index 1000
 			height 50px
-			box-shadow 0 1px 0 0 isDark ? rgba(#000, 0.2) : rgba(#000, 0.1)
+			box-shadow 0 1px 0 0 var(--mobilePostFormDivider)
 
 			> .cancel
 				padding 0
 				width 50px
 				line-height 50px
 				font-size 24px
-				color isDark ? #9baec8 : #555
+				color var(--text)
 
 			> div
 				position absolute
 				top 0
 				right 0
-				color #657786
+				color var(--text)
 
 				> .text-count
 					line-height 50px
@@ -396,7 +394,7 @@ root(isDark)
 
 				> span
 					margin-right 16px
-					color isDark ? #fff : #666
+					color var(--text)
 
 			> input
 				z-index 1
@@ -408,11 +406,11 @@ root(isDark)
 				margin 0
 				width 100%
 				font-size 16px
-				color isDark ? #fff : #333
-				background isDark ? #191d23 : #fff
+				color var(--inputText)
+				background var(--mobilePostFormTextareaBg)
 				border none
 				border-radius 0
-				box-shadow 0 1px 0 0 isDark ? rgba(#000, 0.2) : rgba(#000, 0.1)
+				box-shadow 0 1px 0 0 var(--mobilePostFormDivider)
 
 				&:disabled
 					opacity 0.5
@@ -481,10 +479,4 @@ root(isDark)
 		> *
 			margin-right 8px
 
-.mk-post-form[data-darkmode]
-	root(true)
-
-.mk-post-form:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 6aa9bf86b6..3d3c9b37c7 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -131,6 +131,8 @@
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
+	"mobilePostFormDivider": "rgba(0, 0, 0, 0.2)",
+	"mobilePostFormTextareaBg": "rgba(0, 0, 0, 0.3)",
 	"mobileHomeTlItemHover": "rgba(255, 255, 255, 0.1)",
 	"mobileUserPageName": "#fff",
 	"mobileUserPageAcct": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 1cd77c7d61..d4dd246542 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -131,6 +131,8 @@
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
+	"mobilePostFormDivider": "rgba(0, 0, 0, 0.1)",
+	"mobilePostFormTextareaBg": "#fff",
 	"mobileHomeTlItemHover": "rgba(0, 0, 0, 0.05)",
 	"mobileUserPageName": "#757c82",
 	"mobileUserPageAcct": "#969ea5",

From 5df85b5febd86cd34bcc59737f4ae974689e2a0e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 12:10:15 +0900
Subject: [PATCH 426/539] wip

---
 .../app/common/views/components/poll-editor.vue      | 12 ++----------
 src/client/theme/dark.json                           |  2 ++
 src/client/theme/light.json                          |  2 ++
 3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue
index 7f52c62c23..b5c57d48a5 100644
--- a/src/client/app/common/views/components/poll-editor.vue
+++ b/src/client/app/common/views/components/poll-editor.vue
@@ -68,9 +68,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-poll-editor
 	padding 8px
 
 	> .caution
@@ -104,7 +102,7 @@ root(isDark)
 				width 300px
 				font-size 14px
 				color var(--inputText)
-				background isDark ? #191b22 : #fff
+				background var(--pollEditorInputBg)
 				border solid 1px var(--primaryAlpha01)
 				border-radius 4px
 
@@ -142,10 +140,4 @@ root(isDark)
 		&:active
 			color var(--primaryDarken30)
 
-.mk-poll-editor[data-darkmode]
-	root(true)
-
-.mk-poll-editor:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 3d3c9b37c7..8700d396a8 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -77,6 +77,8 @@
 
 	"reactionViewerBorder": "rgba(255, 255, 255, 0.1)",
 
+	"pollEditorInputBg": "rgba(0, 0, 0, 0.25)",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
 	"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
 	"urlPreviewTitle": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index d4dd246542..d55b75ab08 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -77,6 +77,8 @@
 
 	"reactionViewerBorder": "rgba(0, 0, 0, 0.1)",
 
+	"pollEditorInputBg": "#fff",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
 	"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
 	"urlPreviewTitle": "$text",

From 76097416802a8afcd09bc69994c6632ce0f73902 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 12:13:08 +0900
Subject: [PATCH 427/539] wip

---
 .../app/desktop/views/components/note-preview.vue      |  2 +-
 .../app/desktop/views/components/notes.note.sub.vue    |  2 +-
 .../app/desktop/views/pages/deck/deck.note.sub.vue     |  2 +-
 .../app/mobile/views/components/note-preview.vue       |  2 +-
 src/client/app/mobile/views/components/note.sub.vue    | 10 ++--------
 src/client/theme/dark.json                             |  1 +
 src/client/theme/light.json                            |  1 +
 7 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue
index f64657fb47..7e5a1db8d4 100644
--- a/src/client/app/desktop/views/components/note-preview.vue
+++ b/src/client/app/desktop/views/components/note-preview.vue
@@ -81,7 +81,7 @@ root(isDark)
 					cursor default
 					margin 0
 					padding 0
-					color isDark ? #959ba7 : #717171
+					color var(--subNoteText)
 
 .qiziqtywpuaucsgarwajitwaakggnisj[data-darkmode]
 	root(true)
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index 70709f8738..a0c4cc2fad 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -82,7 +82,7 @@ root(isDark)
 					cursor default
 					margin 0
 					padding 0
-					color isDark ? #959ba7 : #717171
+					color var(--subNoteText)
 
 					pre
 						max-height 120px
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
index f1bf60d528..0b6a13beaf 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
@@ -62,7 +62,7 @@ root(isDark)
 			> .text
 				margin 0
 				padding 0
-				color isDark ? #959ba7 : #717171
+				color var(--subNoteText)
 
 				pre
 					max-height 120px
diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue
index 0b3278ff41..1c73779251 100644
--- a/src/client/app/mobile/views/components/note-preview.vue
+++ b/src/client/app/mobile/views/components/note-preview.vue
@@ -98,7 +98,7 @@ root(isDark)
 					cursor default
 					margin 0
 					padding 0
-					color isDark ? #959ba7 : #717171
+					color var(--subNoteText)
 
 .yohlumlkhizgfkvvscwfcrcggkotpvry[data-darkmode]
 	root(true)
diff --git a/src/client/app/mobile/views/components/note.sub.vue b/src/client/app/mobile/views/components/note.sub.vue
index 8c2e3b496d..24f5be160c 100644
--- a/src/client/app/mobile/views/components/note.sub.vue
+++ b/src/client/app/mobile/views/components/note.sub.vue
@@ -41,7 +41,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.zlrxdaqttccpwhpaagdmkawtzklsccam
 	display flex
 	padding 16px
 	font-size 10px
@@ -104,16 +104,10 @@ root(isDark)
 				> .text
 					margin 0
 					padding 0
-					color isDark ? #959ba7 : #717171
+					color var(--subNoteText)
 
 					pre
 						max-height 120px
 						font-size 80%
 
-.zlrxdaqttccpwhpaagdmkawtzklsccam[data-darkmode]
-	root(true)
-
-.zlrxdaqttccpwhpaagdmkawtzklsccam:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 8700d396a8..b4c9fd5606 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -34,6 +34,7 @@
 	"popupFg": "#d6dce2",
 
 	"subNoteBg": "rgba(0, 0, 0, 0.18)",
+	"subNoteText": ":alpha<0.7<$text",
 	"renoteGradient": "#314027",
 	"renoteText": "#9dbb00",
 	"quoteBorder": "#4e945e",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index d55b75ab08..6aec07e74d 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -34,6 +34,7 @@
 	"popupFg": "#586069",
 
 	"subNoteBg": "rgba(0, 0, 0, 0.01)",
+	"subNoteText": ":alpha<0.7<$text",
 	"renoteGradient": "#edfde2",
 	"renoteText": "#9dbb00",
 	"quoteBorder": "#c0dac6",

From 29476ea3da691416ff9abb8c953b8ecb13c908b1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 12:20:22 +0900
Subject: [PATCH 428/539] wip

---
 .../app/desktop/views/pages/deck/deck.note.vue     |  2 +-
 .../app/mobile/views/components/note-card.vue      | 13 ++++---------
 src/client/app/mobile/views/components/note.vue    | 14 +++-----------
 3 files changed, 8 insertions(+), 21 deletions(-)

diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index c6925d5cec..2555c6f7e0 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -343,7 +343,7 @@ root(isDark)
 
 						> .reply
 							margin-right 8px
-							color isDark ? #99abbf : #717171
+							color var(--noteText)
 
 						> .rp
 							margin-left 4px
diff --git a/src/client/app/mobile/views/components/note-card.vue b/src/client/app/mobile/views/components/note-card.vue
index e30e6c1c8f..de9c9c1450 100644
--- a/src/client/app/mobile/views/components/note-card.vue
+++ b/src/client/app/mobile/views/components/note-card.vue
@@ -27,17 +27,18 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-note-card
 	display inline-block
 	width 150px
 	//height 120px
 	font-size 12px
 	background var(--face)
 	border-radius 4px
+	box-shadow 0 2px 8px rgba(0, 0, 0, 0.2)
 
 	> a
 		display block
-		color isDark ? #fff : #2c3940
+		color var(--noteText)
 
 		&:hover
 			text-decoration none
@@ -75,17 +76,11 @@ root(isDark)
 				left 0
 				width 100%
 				height 20px
-				background isDark ? linear-gradient(to bottom, rgba(#282c37, 0) 0%, #282c37 100%) : linear-gradient(to bottom, rgba(#fff, 0) 0%, #fff 100%)
+				background linear-gradient(to bottom, transparent 0%, var(--face) 100%)
 
 		> .mk-time
 			display inline-block
 			padding 8px
 			color #aaa
 
-.mk-note-card[data-darkmode]
-	root(true)
-
-.mk-note-card:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 8bb9f43fab..4af19ade29 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -228,9 +228,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.note
 	font-size 12px
 	border-bottom solid 1px var(--faceDivider)
 
@@ -383,7 +381,7 @@ root(isDark)
 
 						> .reply
 							margin-right 8px
-							color isDark ? #99abbf : #717171
+							color var(--noteText)
 
 						> .rp
 							margin-left 4px
@@ -449,7 +447,7 @@ root(isDark)
 						margin-right 28px
 
 					&:hover
-						color isDark ? #9198af : #666
+						color var(--noteActionsHover)
 
 					> .count
 						display inline
@@ -459,12 +457,6 @@ root(isDark)
 					&.reacted
 						color var(--primary)
 
-.note[data-darkmode]
-	root(true)
-
-.note:not([data-darkmode])
-	root(false)
-
 </style>
 
 <style lang="stylus" module>

From 1eef90f6cbdbf06bbc1c7e03398e9e1243664fe1 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 14:03:55 +0900
Subject: [PATCH 429/539] wip

---
 .../views/components/drive.file-detail.vue    | 42 +++++++------------
 .../mobile/views/components/drive.file.vue    | 19 +++------
 .../mobile/views/components/drive.folder.vue  | 10 +----
 .../app/mobile/views/components/drive.vue     | 20 ++++-----
 .../mobile/views/components/notification.vue  | 10 +----
 .../views/pages/received-follow-requests.vue  |  4 +-
 src/client/theme/dark.json                    |  1 +
 src/client/theme/light.json                   |  1 +
 8 files changed, 36 insertions(+), 71 deletions(-)

diff --git a/src/client/app/mobile/views/components/drive.file-detail.vue b/src/client/app/mobile/views/components/drive.file-detail.vue
index 8108892597..de46297fcb 100644
--- a/src/client/app/mobile/views/components/drive.file-detail.vue
+++ b/src/client/app/mobile/views/components/drive.file-detail.vue
@@ -134,10 +134,10 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.pyvicwrksnfyhpfgkjwqknuururpaztw
 	> .preview
 		padding 8px
-		background isDark ? #191b22 : #f0f0f0
+		background var(--bg)
 
 		> img
 			display block
@@ -148,9 +148,10 @@ root(isDark)
 
 		> footer
 			padding 8px 8px 0 8px
-			font-size 0.8em
-			color isDark ? #606984 : #888
 			text-align center
+			font-size 0.8em
+			color var(--text)
+			opacity 0.7
 
 			> .separator
 				display inline
@@ -178,12 +179,12 @@ root(isDark)
 	> .info
 		padding 14px
 		font-size 0.8em
-		border-top solid 1px isDark ? #1c2023 : #dfdfdf
+		border-top solid 1px var(--faceDivider)
 
 		> div
 			max-width 500px
 			margin 0 auto
-			color isDark ? #9397a2 : #9d9d9d
+			color var(--text)
 
 			> .separator
 				padding 0 4px
@@ -198,7 +199,7 @@ root(isDark)
 
 	> .menu
 		padding 14px
-		border-top solid 1px isDark ? #1c2023 : #dfdfdf
+		border-top solid 1px var(--faceDivider)
 
 		> div
 			max-width 500px
@@ -209,31 +210,26 @@ root(isDark)
 				width 100%
 				padding 10px 16px
 				margin 0 0 12px 0
-				color isDark ? #dfe3e8 : #333
+				color var(--primaryForeground)
 				font-size 0.9em
 				text-align center
 				text-decoration none
-				text-shadow 0 1px 0 isDark ? rgba(0, 0, 0, 0.9) : rgba(255, 255, 255, 0.9)
-				background-image isDark ? linear-gradient(#292f3c, #1b2025) : linear-gradient(#fafafa, #eaeaea)
-				border 1px solid isDark ? #121417 : #ddd
-				border-bottom-color isDark ? #060606 : #cecece
+				background var(--primary)
+				border none
 				border-radius 3px
 
 				&:last-child
 					margin-bottom 0
 
 				&:active
-					background-color #767676
-					background-image none
-					border-color #444
-					box-shadow 0 1px 3px rgba(#000, 0.075), inset 0 0 5px rgba(#000, 0.2)
+					background var(--primaryDarken10)
 
 				> [data-fa]
 					margin-right 4px
 
 	> .hash
 		padding 14px
-		border-top solid 1px isDark ? #1c2023 : #dfdfdf
+		border-top solid 1px var(--faceDivider)
 
 		> div
 			max-width 500px
@@ -243,7 +239,7 @@ root(isDark)
 				display block
 				margin 0
 				padding 0
-				color isDark ? #a8b7d0 : #555
+				color var(--text)
 				font-size 0.9em
 
 				> [data-fa]
@@ -264,7 +260,7 @@ root(isDark)
 
 	> .exif
 		padding 14px
-		border-top solid 1px isDark ? #1c2023 : #dfdfdf
+		border-top solid 1px var(--faceDivider)
 
 		> div
 			max-width 500px
@@ -274,7 +270,7 @@ root(isDark)
 				display block
 				margin 0
 				padding 0
-				color isDark ? #a8b7d0 : #555
+				color var(--text)
 				font-size 0.9em
 
 				> [data-fa]
@@ -292,10 +288,4 @@ root(isDark)
 				border-radius 2px
 				background #f5f5f5
 
-.pyvicwrksnfyhpfgkjwqknuururpaztw[data-darkmode]
-	root(true)
-
-.pyvicwrksnfyhpfgkjwqknuururpaztw:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/drive.file.vue b/src/client/app/mobile/views/components/drive.file.vue
index ba58cf59a0..68978bb944 100644
--- a/src/client/app/mobile/views/components/drive.file.vue
+++ b/src/client/app/mobile/views/components/drive.file.vue
@@ -63,9 +63,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.vupkuhvjnjyqaqhsiogfbywvjxynrgsm
 	display block
 	text-decoration none !important
 
@@ -103,7 +101,7 @@ root(isDark)
 				padding 0
 				font-size 0.9em
 				font-weight bold
-				color isDark ? #fff : #555
+				color var(--text)
 				text-overflow ellipsis
 				overflow-wrap break-word
 
@@ -127,21 +125,22 @@ root(isDark)
 				display block
 				margin 4px 0 0 0
 				font-size 0.7em
+				color var(--text)
 
 				> .separator
 					padding 0 4px
 
 				> .type
-					color #9D9D9D
+					opacity 0.7
 
 					> .mk-file-type-icon
 						margin-right 4px
 
 				> .data-size
-					color #9D9D9D
+					opacity 0.7
 
 				> .created-at
-					color #BDBDBD
+					opacity 0.7
 
 					> [data-fa]
 						margin-right 2px
@@ -155,10 +154,4 @@ root(isDark)
 		&, *
 			color #fff !important
 
-.vupkuhvjnjyqaqhsiogfbywvjxynrgsm[data-darkmode]
-	root(true)
-
-.vupkuhvjnjyqaqhsiogfbywvjxynrgsm:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/drive.folder.vue b/src/client/app/mobile/views/components/drive.folder.vue
index f76ecba6ad..05dcbd083e 100644
--- a/src/client/app/mobile/views/components/drive.folder.vue
+++ b/src/client/app/mobile/views/components/drive.folder.vue
@@ -24,9 +24,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.jvwxssxsytqlqvrpiymarjlzlsxskqsr
 	display block
-	color isDark ? #fff : #777
+	color var(--text)
 	text-decoration none !important
 
 	*
@@ -55,10 +55,4 @@ root(isDark)
 			> *
 				height 100%
 
-.jvwxssxsytqlqvrpiymarjlzlsxskqsr[data-darkmode]
-	root(true)
-
-.jvwxssxsytqlqvrpiymarjlzlsxskqsr:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue
index 76d6c2737d..8919462511 100644
--- a/src/client/app/mobile/views/components/drive.vue
+++ b/src/client/app/mobile/views/components/drive.vue
@@ -473,7 +473,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.kmmwchoexgckptowjmjgfsygeltxfeqs
 	background var(--face)
 
 	> nav
@@ -487,10 +487,10 @@ root(isDark)
 		overflow auto
 		white-space nowrap
 		font-size 0.9em
-		color rgba(isDark ? #fff : #000, 0.67)
+		color var(--text)
 		-webkit-backdrop-filter blur(12px)
 		backdrop-filter blur(12px)
-		//background-color rgba(var(--faceHeader), 0.75)
+		background-color var(--mobileDriveNavBg)
 		border-bottom solid 1px rgba(#000, 0.13)
 
 		> p
@@ -516,7 +516,7 @@ root(isDark)
 			opacity 0.5
 
 		> .info
-			border-bottom solid 1px isDark ? #1c2023 : #eee
+			border-bottom solid 1px var(--faceDivider)
 
 			&:empty
 				display none
@@ -527,15 +527,15 @@ root(isDark)
 				margin 0 auto
 				padding 4px 16px
 				font-size 10px
-				color isDark ? #606984 : #777
+				color var(--text)
 
 		> .folders
 			> .folder
-				border-bottom solid 1px isDark ? #1c2023 : #eee
+				border-bottom solid 1px var(--faceDivider)
 
 		> .files
 			> .file
-				border-bottom solid 1px isDark ? #1c2023 : #eee
+				border-bottom solid 1px var(--faceDivider)
 
 			> .more
 				display block
@@ -591,10 +591,4 @@ root(isDark)
 	> .file
 		display none
 
-.kmmwchoexgckptowjmjgfsygeltxfeqs[data-darkmode]
-	root(true)
-
-.kmmwchoexgckptowjmjgfsygeltxfeqs:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/notification.vue b/src/client/app/mobile/views/components/notification.vue
index 7b73012e06..4a09104341 100644
--- a/src/client/app/mobile/views/components/notification.vue
+++ b/src/client/app/mobile/views/components/notification.vue
@@ -105,7 +105,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-notification
 	> .notification
 		padding 16px
 		font-size 12px
@@ -154,7 +154,7 @@ root(isDark)
 
 				> .mk-time
 					margin-left auto
-					color isDark ? #606984 : #c0c0c0
+					color var(--noteHeaderInfo)
 					font-size 0.9em
 
 			> .note-preview
@@ -182,10 +182,4 @@ root(isDark)
 			> div > header i
 				color #888
 
-.mk-notification[data-darkmode]
-	root(true)
-
-.mk-notification:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/pages/received-follow-requests.vue b/src/client/app/mobile/views/pages/received-follow-requests.vue
index c2b2606fd8..beaf6bba57 100644
--- a/src/client/app/mobile/views/pages/received-follow-requests.vue
+++ b/src/client/app/mobile/views/pages/received-follow-requests.vue
@@ -52,8 +52,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 main
 	width 100%
 	max-width 680px
@@ -69,7 +67,7 @@ main
 	> div
 		display flex
 		padding 16px
-		border solid 1px isDark ? #1c2023 : #eee
+		border solid 1px var(--faceDivider)
 		border-radius 4px
 
 		> span
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index b4c9fd5606..f8b3420e7c 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -136,6 +136,7 @@
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
 	"mobilePostFormDivider": "rgba(0, 0, 0, 0.2)",
 	"mobilePostFormTextareaBg": "rgba(0, 0, 0, 0.3)",
+	"mobileDriveNavBg": ":alpha<0.75<$secondary",
 	"mobileHomeTlItemHover": "rgba(255, 255, 255, 0.1)",
 	"mobileUserPageName": "#fff",
 	"mobileUserPageAcct": "$text",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 6aec07e74d..7652c6027d 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -136,6 +136,7 @@
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
 	"mobilePostFormDivider": "rgba(0, 0, 0, 0.1)",
 	"mobilePostFormTextareaBg": "#fff",
+	"mobileDriveNavBg": ":alpha<0.75<$secondary",
 	"mobileHomeTlItemHover": "rgba(0, 0, 0, 0.05)",
 	"mobileUserPageName": "#757c82",
 	"mobileUserPageAcct": "#969ea5",

From c627288bdeb23167edc04101cd985f02f4bc8ede Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 14:26:20 +0900
Subject: [PATCH 430/539] wip

---
 src/client/app/common/views/pages/follow.vue  |  2 +-
 .../common/views/widgets/posts-monitor.vue    |  2 +-
 .../received-follow-requests-window.vue       |  2 +-
 .../views/components/user-lists-window.vue    |  2 +-
 .../app/desktop/views/pages/deck/deck.vue     |  2 +-
 .../desktop/views/pages/user/user.friends.vue | 17 +++++-------
 .../desktop/views/pages/user/user.header.vue  | 18 ++++---------
 .../desktop/views/pages/user/user.photos.vue  | 10 ++-----
 .../desktop/views/pages/user/user.profile.vue | 12 +++------
 .../views/pages/user/user.timeline.vue        | 16 +++---------
 .../app/desktop/views/pages/user/user.vue     | 26 +++++++------------
 .../app/desktop/views/widgets/polls.vue       | 12 +++------
 .../app/desktop/views/widgets/profile.vue     | 16 ++++--------
 .../app/desktop/views/widgets/users.vue       | 15 ++++-------
 .../views/components/drive-file-chooser.vue   | 14 +++-------
 src/client/app/mobile/views/pages/home.vue    |  2 +-
 .../app/mobile/views/pages/settings.vue       |  2 +-
 src/client/app/mobile/views/pages/user.vue    |  2 +-
 src/client/theme/dark.json                    |  5 ++++
 src/client/theme/light.json                   |  5 ++++
 20 files changed, 65 insertions(+), 117 deletions(-)

diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 5e2d448d8b..ef7ee111e2 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
+<div class="syxhndwprovvuqhmyvveewmbqayniwkv" v-if="!fetching">
 	<div class="signed-in-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${myName}`)"></div>
 
 	<main>
diff --git a/src/client/app/common/views/widgets/posts-monitor.vue b/src/client/app/common/views/widgets/posts-monitor.vue
index 09f766696b..18df1241a9 100644
--- a/src/client/app/common/views/widgets/posts-monitor.vue
+++ b/src/client/app/common/views/widgets/posts-monitor.vue
@@ -4,7 +4,7 @@
 		<template slot="header">%fa:chart-line%%i18n:@title%</template>
 		<button slot="func" @click="toggle" title="%i18n:@toggle%">%fa:sort%</button>
 
-		<div class="qpdmibaztplkylerhdbllwcokyrfxeyj" :class="{ dual: props.view == 0 }" :data-darkmode="$store.state.device.darkmode">
+		<div class="qpdmibaztplkylerhdbllwcokyrfxeyj" :class="{ dual: props.view == 0 }">
 			<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`" v-show="props.view != 2">
 				<defs>
 					<linearGradient :id="localGradientId" x1="0" x2="0" y1="1" y2="0">
diff --git a/src/client/app/desktop/views/components/received-follow-requests-window.vue b/src/client/app/desktop/views/components/received-follow-requests-window.vue
index d8a94f6cbe..8ade6a7210 100644
--- a/src/client/app/desktop/views/components/received-follow-requests-window.vue
+++ b/src/client/app/desktop/views/components/received-follow-requests-window.vue
@@ -2,7 +2,7 @@
 <mk-window ref="window" is-modal width="450px" height="500px" @closed="destroyDom">
 	<span slot="header">%fa:envelope R% %i18n:@title%</span>
 
-	<div class="slpqaxdoxhvglersgjukmvizkqbmbokc" :data-darkmode="$store.state.device.darkmode">
+	<div class="slpqaxdoxhvglersgjukmvizkqbmbokc">
 		<div v-for="req in requests">
 			<router-link :key="req.id" :to="req.follower | userPage">{{ req.follower | userName }}</router-link>
 			<span>
diff --git a/src/client/app/desktop/views/components/user-lists-window.vue b/src/client/app/desktop/views/components/user-lists-window.vue
index 75253e0788..4f944981a5 100644
--- a/src/client/app/desktop/views/components/user-lists-window.vue
+++ b/src/client/app/desktop/views/components/user-lists-window.vue
@@ -2,7 +2,7 @@
 <mk-window ref="window" is-modal width="450px" height="500px" @closed="destroyDom">
 	<span slot="header">%fa:list% %i18n:@title%</span>
 
-	<div class="xkxvokkjlptzyewouewmceqcxhpgzprp" :data-darkmode="$store.state.device.darkmode">
+	<div class="xkxvokkjlptzyewouewmceqcxhpgzprp">
 		<button class="ui" @click="add">%i18n:@create-list%</button>
 		<a v-for="list in lists" :key="list.id" @click="choice(list)">{{ list.title }}</a>
 	</div>
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 48c80c82c4..cd3336079b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui :class="$style.root">
-	<div class="qlvquzbjribqcaozciifydkngcwtyzje" :data-darkmode="$store.state.device.darkmode" :style="style">
+	<div class="qlvquzbjribqcaozciifydkngcwtyzje" :style="style">
 		<template v-for="ids in layout">
 			<div v-if="ids.length > 1" class="folder">
 				<template v-for="id, i in ids">
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index 9b466053f7..36ae360248 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -40,7 +40,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.hozptpaliadatkehcmcayizwzwwctpbc
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -53,7 +53,7 @@ root(isDark)
 		line-height 42px
 		font-size 0.9em
 		font-weight bold
-		background isDark ? #313543 : inherit
+		background var(--faceHeader)
 		color var(--faceHeaderText)
 		box-shadow 0 1px rgba(#000, 0.07)
 
@@ -72,7 +72,7 @@ root(isDark)
 
 	> .user
 		padding 16px
-		border-bottom solid 1px isDark ? #21242f : #eee
+		border-bottom solid 1px var(--faceDivider)
 
 		&:last-child
 			border-bottom none
@@ -98,24 +98,19 @@ root(isDark)
 				margin 0
 				font-size 16px
 				line-height 24px
-				color isDark ? #ccc : #555
+				color var(--text)
 
 			> .username
 				display block
 				margin 0
 				font-size 15px
 				line-height 16px
-				color isDark ? #555 : #ccc
+				color var(--text)
+				opacity 0.7
 
 		> .mk-follow-button
 			position absolute
 			top 16px
 			right 16px
 
-.hozptpaliadatkehcmcayizwzwwctpbc[data-darkmode]
-	root(true)
-
-.hozptpaliadatkehcmcayizwzwwctpbc:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index ec46e955b5..76eb8f9e1c 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -100,9 +100,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.header
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -182,12 +180,12 @@ root(isDark)
 
 	> .body
 		padding 16px 16px 16px 154px
-		color isDark ? #c5ced6 : #555
+		color var(--text)
 
 		> .status
 			margin-top 16px
 			padding-top 16px
-			border-top solid 1px rgba(#000, isDark ? 0.2 : 0.1)
+			border-top solid 1px var(--faceDivider)
 			font-size 80%
 
 			> *
@@ -196,13 +194,13 @@ root(isDark)
 				margin-right 16px
 
 				&:not(:last-child)
-					border-right solid 1px rgba(#000, isDark ? 0.2 : 0.1)
+					border-right solid 1px var(--faceDivider)
 
 				&.clickable
 					cursor pointer
 
 					&:hover
-						color isDark ? #fff : #000
+						color var(--faceTextButtonHover)
 
 				> b
 					margin-right 4px
@@ -210,10 +208,4 @@ root(isDark)
 					font-weight bold
 					color var(--primary)
 
-.header[data-darkmode]
-	root(true)
-
-.header:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.photos.vue b/src/client/app/desktop/views/pages/user/user.photos.vue
index 6e9d09e79f..628d5b6d95 100644
--- a/src/client/app/desktop/views/pages/user/user.photos.vue
+++ b/src/client/app/desktop/views/pages/user/user.photos.vue
@@ -39,7 +39,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.dzsuvbsrrrwobdxifudxuefculdfiaxd
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -52,7 +52,7 @@ root(isDark)
 		line-height 42px
 		font-size 0.9em
 		font-weight bold
-		background: isDark ? #313543 : inherit
+		background var(--faceHeader)
 		color var(--faceHeaderText)
 		box-shadow 0 1px rgba(#000, 0.07)
 
@@ -87,10 +87,4 @@ root(isDark)
 		> i
 			margin-right 4px
 
-.dzsuvbsrrrwobdxifudxuefculdfiaxd[data-darkmode]
-	root(true)
-
-.dzsuvbsrrrwobdxifudxuefculdfiaxd:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue
index e5ea8d1cc9..fe10b54378 100644
--- a/src/client/app/desktop/views/pages/user/user.profile.vue
+++ b/src/client/app/desktop/views/pages/user/user.profile.vue
@@ -85,7 +85,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.profile
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -96,7 +96,7 @@ root(isDark)
 	> .friend-form
 		padding 16px
 		text-align center
-		border-bottom solid 1px isDark ? #21242f : #eee
+		border-bottom solid 1px var(--faceDivider)
 
 		> .followed
 			margin 12px 0 0 0
@@ -114,7 +114,7 @@ root(isDark)
 	> .action-form
 		padding 16px
 		text-align center
-		border-bottom solid 1px isDark ? #21242f : #eee
+		border-bottom solid 1px var(--faceDivider)
 
 		> *
 			width 100%
@@ -122,10 +122,4 @@ root(isDark)
 			&:not(:last-child)
 				margin-bottom 12px
 
-.profile[data-darkmode]
-	root(true)
-
-.profile:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.timeline.vue b/src/client/app/desktop/views/pages/user/user.timeline.vue
index fe3ca9154b..608c12b7e2 100644
--- a/src/client/app/desktop/views/pages/user/user.timeline.vue
+++ b/src/client/app/desktop/views/pages/user/user.timeline.vue
@@ -112,9 +112,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.oh5y2r7l5lx8j6jj791ykeiwgihheguk
 	background var(--face)
 	border-radius var(--round)
 	overflow hidden
@@ -123,7 +121,7 @@ root(isDark)
 		padding 0 8px
 		z-index 10
 		background var(--faceHeader)
-		box-shadow 0 1px isDark ? rgba(#000, 0.15) : rgba(#000, 0.08)
+		box-shadow 0 1px var(--desktopTimelineHeaderShadow)
 
 		> span
 			display inline-block
@@ -148,11 +146,11 @@ root(isDark)
 					background var(--primary)
 
 			&:not([data-active])
-				color isDark ? #9aa2a7 : #6f7477
+				color var(--desktopTimelineSrc)
 				cursor pointer
 
 				&:hover
-					color isDark ? #d9dcde : #525a5f
+					color var(--desktopTimelineSrcHover)
 
 	> .loading
 		padding 64px 0
@@ -171,10 +169,4 @@ root(isDark)
 			font-size 3em
 			color #ccc
 
-.oh5y2r7l5lx8j6jj791ykeiwgihheguk[data-darkmode]
-	root(true)
-
-.oh5y2r7l5lx8j6jj791ykeiwgihheguk:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index a7065af5e7..a8da890936 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -1,6 +1,6 @@
 <template>
 <mk-ui>
-	<div class="xygkxeaeontfaokvqmiblezmhvhostak" v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
+	<div class="xygkxeaeontfaokvqmiblezmhvhostak" v-if="!fetching">
 		<div class="is-suspended" v-if="user.isSuspended">%fa:exclamation-triangle% %i18n:@is-suspended%</div>
 		<div class="is-remote" v-if="user.host != null">%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></div>
 		<main>
@@ -79,7 +79,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.xygkxeaeontfaokvqmiblezmhvhostak
 	width 980px
 	padding 16px
 	margin 0 auto
@@ -93,12 +93,12 @@ root(isDark)
 		border-radius var(--round)
 
 		&.is-suspended
-			color isDark ? #ffb4b4 : #570808
-			background isDark ? #611d1d : #ffdbdb
+			color var(--suspendedInfoFg)
+			background var(--suspendedInfoBg)
 
 		&.is-remote
-			color isDark ? #ffbd3e : #573c08
-			background isDark ? #42321c : #fff0db
+			color var(--remoteInfoFg)
+			background var(--remoteInfoBg)
 
 		> a
 			font-weight bold
@@ -139,21 +139,15 @@ root(isDark)
 			> .nav
 				padding 16px
 				font-size 12px
-				color #aaa
-				background isDark ? #21242f : #fff
+				color var(--text)
+				background var(--face)
 				box-shadow var(--shadow)
 				border-radius var(--round)
 
 				a
-					color #999
+					color var(--text)99
 
 				i
-					color #ccc
-
-.xygkxeaeontfaokvqmiblezmhvhostak[data-darkmode]
-	root(true)
-
-.xygkxeaeontfaokvqmiblezmhvhostak:not([data-darkmode])
-	root(false)
+					color var(--text)
 
 </style>
diff --git a/src/client/app/desktop/views/widgets/polls.vue b/src/client/app/desktop/views/widgets/polls.vue
index 8ff0bb5d0d..c10ac1ca17 100644
--- a/src/client/app/desktop/views/widgets/polls.vue
+++ b/src/client/app/desktop/views/widgets/polls.vue
@@ -4,7 +4,7 @@
 		<template slot="header">%fa:chart-pie%%i18n:@title%</template>
 		<button slot="func" title="%i18n:@refresh%" @click="fetch">%fa:sync%</button>
 
-		<div class="mkw-polls--body" :data-darkmode="$store.state.device.darkmode">
+		<div class="mkw-polls--body">
 			<div class="poll" v-if="!fetching && poll != null">
 				<p v-if="poll.text"><router-link :to="poll | notePage">{{ poll.text }}</router-link></p>
 				<p v-if="!poll.text"><router-link :to="poll | notePage">%fa:link%</router-link></p>
@@ -64,11 +64,11 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mkw-polls--body
 	> .poll
 		padding 16px
 		font-size 12px
-		color isDark ? #9ea4ad : #555
+		color var(--text)
 
 		> p
 			margin 0 0 8px 0
@@ -91,10 +91,4 @@ root(isDark)
 		> [data-fa]
 			margin-right 4px
 
-.mkw-polls--body[data-darkmode]
-	root(true)
-
-.mkw-polls--body:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/widgets/profile.vue b/src/client/app/desktop/views/widgets/profile.vue
index aea0c90e34..fa35138c31 100644
--- a/src/client/app/desktop/views/widgets/profile.vue
+++ b/src/client/app/desktop/views/widgets/profile.vue
@@ -46,8 +46,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-
+.egwyvoaaryotefqhqtmiyawwefemjfsd-body
 	&[data-compact]
 		> .banner:before
 			content ""
@@ -88,7 +87,7 @@ root(isDark)
 
 	> .banner
 		height 100px
-		background-color isDark ? #303e4a : #f5f5f5
+		background-color var(--primaryDarken10)
 		background-size cover
 		background-position center
 		cursor pointer
@@ -109,19 +108,14 @@ root(isDark)
 		margin 10px 0 0 84px
 		line-height 16px
 		font-weight bold
-		color isDark ? #fff : #555
+		color var(--text)
 
 	> .username
 		display block
 		margin 4px 0 8px 84px
 		line-height 16px
 		font-size 0.9em
-		color isDark ? #606984 : #999
-
-.egwyvoaaryotefqhqtmiyawwefemjfsd-body[data-darkmode]
-	root(true)
-
-.egwyvoaaryotefqhqtmiyawwefemjfsd-body:not([data-darkmode])
-	root(false)
+		color var(--text)
+		opacity 0.7
 
 </style>
diff --git a/src/client/app/desktop/views/widgets/users.vue b/src/client/app/desktop/views/widgets/users.vue
index 328fa56697..28c6372b6f 100644
--- a/src/client/app/desktop/views/widgets/users.vue
+++ b/src/client/app/desktop/views/widgets/users.vue
@@ -73,11 +73,11 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mkw-users
 	.mkw-users--body
 		> .user
 			padding 16px
-			border-bottom solid 1px isDark ? #1c2023 : #eee
+			border-bottom solid 1px var(--faceDivider)
 
 			&:last-child
 				border-bottom none
@@ -103,14 +103,15 @@ root(isDark)
 					margin 0
 					font-size 16px
 					line-height 24px
-					color isDark ? #fff : #555
+					color var(--text)
 
 				> .username
 					display block
 					margin 0
 					font-size 15px
 					line-height 16px
-					color isDark ? #606984 : #ccc
+					color var(--text)
+					opacity 0.7
 
 			> .mk-follow-button
 				position absolute
@@ -132,10 +133,4 @@ root(isDark)
 			> [data-fa]
 				margin-right 4px
 
-.mkw-users[data-darkmode]
-	root(true)
-
-.mkw-users:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/drive-file-chooser.vue b/src/client/app/mobile/views/components/drive-file-chooser.vue
index 6d3fc2343a..5fca19939e 100644
--- a/src/client/app/mobile/views/components/drive-file-chooser.vue
+++ b/src/client/app/mobile/views/components/drive-file-chooser.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.cdxzvcfawjxdyxsekbxbfgtplebnoneb
 	position fixed
 	z-index 20000
 	top 0
@@ -59,11 +59,11 @@ root(isDark)
 	> .body
 		width 100%
 		height 100%
-		background var(--face)
+		background var(--faceHeader)
 
 		> header
-			border-bottom solid 1px isDark ? #1b1f29 : #eee
-			color isDark ? #fff : #111
+			border-bottom solid 1px var(--faceDivider)
+			color var(--text)
 
 			> h1
 				margin 0
@@ -96,10 +96,4 @@ root(isDark)
 			overflow scroll
 			-webkit-overflow-scrolling touch
 
-.cdxzvcfawjxdyxsekbxbfgtplebnoneb[data-darkmode]
-	root(true)
-
-.cdxzvcfawjxdyxsekbxbfgtplebnoneb:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index 616a3aee1b..edba8585bd 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -22,7 +22,7 @@
 		<button @click="fn">%fa:pencil-alt%</button>
 	</template>
 
-	<main :data-darkmode="$store.state.device.darkmode">
+	<main>
 		<div class="nav" v-if="showNav">
 			<div class="bg" @click="showNav = false"></div>
 			<div class="pointer"></div>
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index a3b508e37e..b83eaf6d33 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -1,7 +1,7 @@
 <template>
 <mk-ui>
 	<span slot="header"><span style="margin-right:4px;">%fa:cog%</span>%i18n:@settings%</span>
-	<main :data-darkmode="$store.state.device.darkmode">
+	<main>
 		<div class="signin-as" v-html="'%i18n:@signed-in-as%'.replace('{}', `<b>${name}</b>`)"></div>
 
 		<div>
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index d7edda1a74..a2a6bd7a83 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -1,7 +1,7 @@
 <template>
 <mk-ui>
 	<template slot="header" v-if="!fetching"><img :src="user.avatarUrl" alt="">{{ user | userName }}</template>
-	<main v-if="!fetching" :data-darkmode="$store.state.device.darkmode">
+	<main v-if="!fetching">
 		<div class="is-suspended" v-if="user.isSuspended"><p>%fa:exclamation-triangle% %i18n:@is-suspended%</p></div>
 		<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div>
 		<header>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index f8b3420e7c..462999a64f 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -106,6 +106,11 @@
 	"mfmQuote": ":alpha<0.7<$text",
 	"mfmQuoteLine": ":alpha<0.6<$text",
 
+	"suspendedInfoBg": "#611d1d",
+	"suspendedInfoFg": "#ffb4b4",
+	"remoteInfoBg": "#42321c",
+	"remoteInfoFg": "#ffbd3e",
+
 	"messagingRoomBg": "@bg",
 	"messagingRoomInfo": "#fff",
 	"messagingRoomDateDividerLine": "rgba(255, 255, 255, 0.1)",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 7652c6027d..60824e0a84 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -106,6 +106,11 @@
 	"mfmQuote": ":alpha<0.6<$text",
 	"mfmQuoteLine": ":alpha<0.5<$text",
 
+	"suspendedInfoBg": "#ffdbdb",
+	"suspendedInfoFg": "#570808",
+	"remoteInfoBg": "#fff0db",
+	"remoteInfoFg": "#573c08",
+
 	"messagingRoomBg": "#fff",
 	"messagingRoomInfo": "#000",
 	"messagingRoomDateDividerLine": "rgba(0, 0, 0, 0.1)",

From 13f258308ea5dc158a61f7e89b634450171d30ad Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 15:34:34 +0900
Subject: [PATCH 431/539] wip

---
 src/client/app/desktop/script.ts              |   2 -
 .../received-follow-requests-window.vue       |  11 +-
 .../desktop/views/components/renote-form.vue  |  13 +-
 .../views/components/ui-notification.vue      |  14 +-
 .../views/components/user-lists-window.vue    |  11 +-
 .../desktop/views/components/user-preview.vue |  21 +--
 .../desktop/views/pages/deck/deck.column.vue  |  14 +-
 .../desktop/views/pages/deck/deck.note.vue    |  20 +--
 .../desktop/views/pages/deck/deck.notes.vue   |  14 +-
 .../views/pages/deck/deck.notification.vue    |   2 +-
 .../app/desktop/views/pages/deck/deck.vue     |  16 +--
 .../views/pages/deck/deck.widgets-column.vue  |  13 +-
 .../desktop/views/pages/user-list.users.vue   | 125 ------------------
 .../app/desktop/views/pages/user-list.vue     |  71 ----------
 src/client/theme/dark.json                    |   6 +
 src/client/theme/light.json                   |   8 +-
 16 files changed, 45 insertions(+), 316 deletions(-)
 delete mode 100644 src/client/app/desktop/views/pages/user-list.users.vue
 delete mode 100644 src/client/app/desktop/views/pages/user-list.vue

diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts
index 8b184a4aae..05aa928fa3 100644
--- a/src/client/app/desktop/script.ts
+++ b/src/client/app/desktop/script.ts
@@ -29,7 +29,6 @@ import MkUser from './views/pages/user/user.vue';
 import MkFavorites from './views/pages/favorites.vue';
 import MkSelectDrive from './views/pages/selectdrive.vue';
 import MkDrive from './views/pages/drive.vue';
-import MkUserList from './views/pages/user-list.vue';
 import MkHomeCustomize from './views/pages/home-customize.vue';
 import MkMessagingRoom from './views/pages/messaging-room.vue';
 import MkNote from './views/pages/note.vue';
@@ -63,7 +62,6 @@ init(async (launch) => {
 			{ path: '/i/messaging/:user', component: MkMessagingRoom },
 			{ path: '/i/drive', component: MkDrive },
 			{ path: '/i/drive/folder/:folder', component: MkDrive },
-			{ path: '/i/lists/:list', component: MkUserList },
 			{ path: '/selectdrive', component: MkSelectDrive },
 			{ path: '/search', component: MkSearch },
 			{ path: '/tags/:tag', component: MkTag },
diff --git a/src/client/app/desktop/views/components/received-follow-requests-window.vue b/src/client/app/desktop/views/components/received-follow-requests-window.vue
index 8ade6a7210..3df1329c48 100644
--- a/src/client/app/desktop/views/components/received-follow-requests-window.vue
+++ b/src/client/app/desktop/views/components/received-follow-requests-window.vue
@@ -47,8 +47,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-root(isDark)
+.slpqaxdoxhvglersgjukmvizkqbmbokc
 	padding 16px
 
 	> button
@@ -57,16 +56,10 @@ root(isDark)
 	> div
 		display flex
 		padding 16px
-		border solid 1px isDark ? #1c2023 : #eee
+		border solid 1px var(--faceDivider)
 		border-radius 4px
 
 		> span
 			margin 0 0 0 auto
 
-.slpqaxdoxhvglersgjukmvizkqbmbokc[data-darkmode]
-	root(true)
-
-.slpqaxdoxhvglersgjukmvizkqbmbokc:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/renote-form.vue b/src/client/app/desktop/views/components/renote-form.vue
index ad23740f13..6717ced3b1 100644
--- a/src/client/app/desktop/views/components/renote-form.vue
+++ b/src/client/app/desktop/views/components/renote-form.vue
@@ -57,16 +57,13 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-
+.mk-renote-form
 	> .preview
 		margin 16px 22px
 
 	> footer
 		height 72px
-		background isDark ? #313543 : var(--primaryLighten95)
+		background var(--desktopRenoteFormFooter)
 
 		> .quote
 			position absolute
@@ -87,10 +84,4 @@ root(isDark)
 			&.ok
 				right 16px
 
-.mk-renote-form[data-darkmode]
-	root(true)
-
-.mk-renote-form:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/ui-notification.vue b/src/client/app/desktop/views/components/ui-notification.vue
index 883a880e5d..dafede4c36 100644
--- a/src/client/app/desktop/views/components/ui-notification.vue
+++ b/src/client/app/desktop/views/components/ui-notification.vue
@@ -36,7 +36,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-ui-notification
 	display block
 	position fixed
 	z-index 10000
@@ -46,10 +46,10 @@ root(isDark)
 	margin 0 auto
 	padding 128px 0 0 0
 	width 500px
-	color rgba(isDark ? #fff : #000, 0.6)
-	//background rgba(var(--face), 0.9)
+	color var(--desktopNotificationFg)
+	background var(--desktopNotificationBg)
 	border-radius 0 0 8px 8px
-	box-shadow 0 2px 4px rgba(#000, isDark ? 0.4 : 0.2)
+	box-shadow 0 2px 4px var(--desktopNotificationShadow)
 	transform translateY(-64px)
 	opacity 0
 
@@ -58,10 +58,4 @@ root(isDark)
 		line-height 64px
 		text-align center
 
-.mk-ui-notification[data-darkmode]
-	root(true)
-
-.mk-ui-notification:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/user-lists-window.vue b/src/client/app/desktop/views/components/user-lists-window.vue
index 4f944981a5..9c384314cf 100644
--- a/src/client/app/desktop/views/components/user-lists-window.vue
+++ b/src/client/app/desktop/views/components/user-lists-window.vue
@@ -47,8 +47,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-root(isDark)
+.xkxvokkjlptzyewouewmceqcxhpgzprp
 	padding 16px
 
 	> button
@@ -57,13 +56,7 @@ root(isDark)
 	> a
 		display block
 		padding 16px
-		border solid 1px isDark ? #1c2023 : #eee
+		border solid 1px var(--faceDivider)
 		border-radius 4px
 
-.xkxvokkjlptzyewouewmceqcxhpgzprp[data-darkmode]
-	root(true)
-
-.xkxvokkjlptzyewouewmceqcxhpgzprp:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index 01b6cdbdc5..7f5e79eae1 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -83,9 +83,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-user-preview
 	position absolute
 	z-index 2048
 	margin-top -8px
@@ -99,7 +97,7 @@ root(isDark)
 
 	> .banner
 		height 84px
-		background-color isDark ? #1c1e26 : #f5f5f5
+		background-color rgba(0, 0, 0, 0.1)
 		background-size cover
 		background-position center
 
@@ -123,19 +121,20 @@ root(isDark)
 			margin 0
 			font-weight bold
 			line-height 16px
-			color isDark ? #fff : #656565
+			color var(--text)
 
 		> .username
 			display block
 			margin 0
 			line-height 16px
 			font-size 0.8em
-			color isDark ? #606984 : #999
+			color var(--text)
+			opacity 0.7
 
 	> .description
 		padding 0 16px
 		font-size 0.7em
-		color isDark ? #9ea4ad : #555
+		color var(--text)
 
 	> .status
 		padding 8px 16px
@@ -147,7 +146,7 @@ root(isDark)
 			> p
 				margin 0
 				font-size 0.7em
-				color #aaa
+				color var(--text)
 
 			> span
 				font-size 1em
@@ -158,10 +157,4 @@ root(isDark)
 		top 92px
 		right 8px
 
-.mk-user-preview[data-darkmode]
-	root(true)
-
-.mk-user-preview:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 2dba7d2522..1b939f2f58 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -269,9 +269,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.dnpfarvgbnfmyzbdquhhzyxcmstpdqzs
 	$header-height = 42px
 
 	width 330px
@@ -301,7 +299,7 @@ root(isDark)
 		min-width 285px
 
 	&.naked
-		background rgba(#000, isDark ? 0.25 : 0.1)
+		background var(--deckAcrylicColumnBg)
 
 		> header
 			background transparent
@@ -350,7 +348,7 @@ root(isDark)
 				color var(--faceTextButtonHover)
 
 			&:active
-				color isDark ? #b2c1d5 : #999
+				color var(--faceTextButtonActive)
 
 		> .toggleActive
 			margin-left -16px
@@ -364,10 +362,4 @@ root(isDark)
 		overflow auto
 		overflow-x hidden
 
-.dnpfarvgbnfmyzbdquhhzyxcmstpdqzs[data-darkmode]
-	root(true)
-
-.dnpfarvgbnfmyzbdquhhzyxcmstpdqzs:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index 2555c6f7e0..eac0e78f0f 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -214,9 +214,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-mediaRoot(isDark)
+.srwrkujossgfuhrbnvqkybtzxpblgchi
 	font-size 13px
 	margin 4px 12px
 
@@ -226,7 +224,7 @@ mediaRoot(isDark)
 	&:last-child
 		margin-bottom 12px
 
-root(isDark)
+.zyjjkidcqjnlegkqebitfviomuqmseqk
 	font-size 13px
 	border-bottom solid 1px var(--faceDivider)
 
@@ -409,7 +407,7 @@ root(isDark)
 						margin-right 28px
 
 					&:hover
-						color isDark ? #9198af : #666
+						color var(--noteActionsHover)
 
 					> .count
 						display inline
@@ -419,16 +417,4 @@ root(isDark)
 					&.reacted
 						color var(--primary)
 
-.zyjjkidcqjnlegkqebitfviomuqmseqk[data-darkmode]
-	root(true)
-
-.zyjjkidcqjnlegkqebitfviomuqmseqk:not([data-darkmode])
-	root(false)
-
-.srwrkujossgfuhrbnvqkybtzxpblgchi[data-darkmode]
-	mediaRoot(true)
-
-.srwrkujossgfuhrbnvqkybtzxpblgchi:not([data-darkmode])
-	mediaRoot(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index 7e171a2397..884be3a841 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -195,9 +195,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.eamppglmnmimdhrlzhplwpvyeaqmmhxu
 	.transition
 		.mk-notes-enter
 		.mk-notes-leave-to
@@ -238,15 +236,9 @@ root(isDark)
 			border-bottom-right-radius 6px
 
 			&:hover
-				background isDark ? #2e3440 : #f5f5f5
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
 			&:active
-				background isDark ? #21242b : #eee
-
-.eamppglmnmimdhrlzhplwpvyeaqmmhxu[data-darkmode]
-	root(true)
-
-.eamppglmnmimdhrlzhplwpvyeaqmmhxu:not([data-darkmode])
-	root(false)
+				box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.notification.vue b/src/client/app/desktop/views/pages/deck/deck.notification.vue
index ff10ac2aa6..b318579b3e 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notification.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notification.vue
@@ -142,7 +142,7 @@ root(isDark)
 
 				> .mk-time
 					margin-left auto
-					color isDark ? #606984 : #c0c0c0
+					color var(--noteHeaderInfo)
 					font-size 0.9em
 
 			> .note-preview
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index cd3336079b..22b4c50bb4 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -221,9 +221,7 @@ export default Vue.extend({
 </style>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.qlvquzbjribqcaozciifydkngcwtyzje
 	display flex
 	flex 1
 	padding 16px 0 16px 16px
@@ -251,18 +249,12 @@ root(isDark)
 
 	> button
 		padding 0 16px
-		color isDark ? #93a0a5 : #888
+		color var(--faceTextButton)
 
 		&:hover
-			color isDark ? #b8c5ca : #777
+			color var(--faceTextButtonHover)
 
 		&:active
-			color isDark ? #fff : #555
-
-.qlvquzbjribqcaozciifydkngcwtyzje[data-darkmode]
-	root(true)
-
-.qlvquzbjribqcaozciifydkngcwtyzje:not([data-darkmode])
-	root(false)
+			color var(--faceTextButtonActive)
 
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue b/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
index fe190bf892..e1fecc98bc 100644
--- a/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.widgets-column.vue
@@ -135,9 +135,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.wtdtxvecapixsepjtcupubtsmometobz
 	.gqpwvtwtprsbmnssnbicggtwqhmylhnq
 		> header
 			padding 16px
@@ -169,14 +167,5 @@ root(isDark)
 				background rgba(#000, 0.7)
 				border-radius 4px
 
-		> header
-			color isDark ? #fff : #000
-
-.wtdtxvecapixsepjtcupubtsmometobz[data-darkmode]
-	root(true)
-
-.wtdtxvecapixsepjtcupubtsmometobz:not([data-darkmode])
-	root(false)
-
 </style>
 
diff --git a/src/client/app/desktop/views/pages/user-list.users.vue b/src/client/app/desktop/views/pages/user-list.users.vue
deleted file mode 100644
index 7d9a4606a1..0000000000
--- a/src/client/app/desktop/views/pages/user-list.users.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-<div>
-	<mk-widget-container>
-		<template slot="header">%fa:users% %i18n:@users%</template>
-		<button slot="func" title="%i18n:@add-user%" @click="add">%fa:plus%</button>
-
-		<div data-id="d0b63759-a822-4556-a5ce-373ab966e08a">
-			<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw% %i18n:common.loading%<mk-ellipsis/></p>
-			<template v-else-if="users.length != 0">
-				<div class="user" v-for="_user in users">
-					<mk-avatar class="avatar" :user="_user"/>
-					<div class="body">
-						<router-link class="name" :to="_user | userPage" v-user-preview="_user.id">{{ _user | userName }}</router-link>
-						<p class="username">@{{ _user | acct }}</p>
-					</div>
-				</div>
-			</template>
-			<p class="empty" v-else>%i18n:@no-one%</p>
-		</div>
-	</mk-widget-container>
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-
-export default Vue.extend({
-	props: {
-		list: {
-			type: Object,
-			required: true
-		}
-	},
-	data() {
-		return {
-			fetching: true,
-			users: []
-		};
-	},
-	mounted() {
-		(this as any).api('users/show', {
-			userIds: this.list.userIds
-		}).then(users => {
-			this.users = users;
-			this.fetching = false;
-		});
-	},
-	methods: {
-		add() {
-			(this as any).apis.input({
-				title: '%i18n:@username%',
-			}).then(async (username: string) => {
-				if (username.startsWith('@')) username = username.slice(1);
-				const user = await (this as any).api('users/show', {
-					username
-				});
-
-				(this as any).api('users/lists/push', {
-					listId: this.list.id,
-					userId: user.id
-				});
-			});
-		}
-	}
-});
-</script>
-
-<style lang="stylus" scoped>
-root(isDark)
-	> .user
-		padding 16px
-		border-bottom solid 1px isDark ? #1c2023 : #eee
-
-		&:last-child
-			border-bottom none
-
-		&:after
-			content ""
-			display block
-			clear both
-
-		> .avatar
-			display block
-			float left
-			margin 0 12px 0 0
-			width 42px
-			height 42px
-			border-radius 8px
-
-		> .body
-			float left
-			width calc(100% - 54px)
-
-			> .name
-				margin 0
-				font-size 16px
-				line-height 24px
-				color isDark ? #fff : #555
-
-			> .username
-				display block
-				margin 0
-				font-size 15px
-				line-height 16px
-				color isDark ? #606984 : #ccc
-
-	> .empty
-		margin 0
-		padding 16px
-		text-align center
-		color #aaa
-
-	> .fetching
-		margin 0
-		padding 16px
-		text-align center
-		color #aaa
-
-[data-id="d0b63759-a822-4556-a5ce-373ab966e08a"][data-darkmode]
-	root(true)
-
-[data-id="d0b63759-a822-4556-a5ce-373ab966e08a"]:not([data-darkmode])
-	root(false)
-
-</style>
diff --git a/src/client/app/desktop/views/pages/user-list.vue b/src/client/app/desktop/views/pages/user-list.vue
deleted file mode 100644
index 2241b84e5e..0000000000
--- a/src/client/app/desktop/views/pages/user-list.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-<mk-ui>
-	<div v-if="!fetching" data-id="02010e15-cc48-4245-8636-16078a9b623c">
-		<div>
-			<div><h1>{{ list.title }}</h1></div>
-			<x-users :list="list"/>
-		</div>
-		<main>
-			<mk-user-list-timeline :list="list"/>
-		</main>
-	</div>
-</mk-ui>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-import XUsers from './user-list.users.vue';
-
-export default Vue.extend({
-	components: {
-		XUsers
-	},
-	data() {
-		return {
-			fetching: true,
-			list: null
-		};
-	},
-	watch: {
-		$route: 'fetch'
-	},
-	mounted() {
-		this.fetch();
-	},
-	methods: {
-		fetch() {
-			this.fetching = true;
-
-			(this as any).api('users/lists/show', {
-				listId: this.$route.params.list
-			}).then(list => {
-				this.list = list;
-				this.fetching = false;
-			});
-		}
-	}
-});
-</script>
-
-<style lang="stylus" scoped>
-[data-id="02010e15-cc48-4245-8636-16078a9b623c"]
-	display flex
-	justify-content center
-	margin 0 auto
-	max-width 1200px
-
-	> main
-	> div > div
-		> *:not(:last-child)
-			margin-bottom 16px
-
-	> main
-		padding 16px
-		width calc(100% - 275px * 2)
-
-	> div
-		width 275px
-		margin 0
-		padding 16px 0 16px 16px
-
-</style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 462999a64f..97ec96827a 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -126,9 +126,13 @@
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
 	"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
 	"desktopHeaderSearchFg": "#fff",
+	"desktopNotificationBg": ":alpha<0.9<$secondary",
+	"desktopNotificationFg": ":alpha<0.7<$text",
+	"desktopNotificationShadow": "rgba(0, 0, 0, 0.4)",
 	"desktopPostFormBg": "@face",
 	"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
 	"desktopPostFormTextareaFg": "#fff",
+	"desktopRenoteFormFooter": ":lighten<5<$secondary",
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
 	"desktopTimelineSrc": "@faceTextButton",
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
@@ -136,6 +140,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
+	"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.25)",
+
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 60824e0a84..52822bc5fe 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -126,9 +126,13 @@
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
 	"desktopHeaderSearchHoverBg": "rgba(0, 0, 0, 0.08)",
 	"desktopHeaderSearchFg": "#000",
-	"desktopPostFormBg": "#fff6f6",
+	"desktopNotificationBg": ":alpha<0.9<$secondary",
+	"desktopNotificationFg": ":alpha<0.7<$text",
+	"desktopNotificationShadow": "rgba(0, 0, 0, 0.2)",
+	"desktopPostFormBg": ":lighten<33<$primary",
 	"desktopPostFormTextareaBg": "#fff",
 	"desktopPostFormTextareaFg": "#333",
+	"desktopRenoteFormFooter": ":lighten<33<$primary",
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
 	"desktopTimelineSrc": "#6f7477",
 	"desktopTimelineSrcHover": "#525a5f",
@@ -136,6 +140,8 @@
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 
+	"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.1)",
+
 	"mobileHeaderBg": ":lighten<5<$secondary",
 	"mobileHeaderFg": "$text",
 	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",

From 0343de95b8843124adcbec1f1665369cdb185718 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 15:56:50 +0900
Subject: [PATCH 432/539] wip

---
 .../app/desktop/views/components/post-form.vue     | 14 ++++----------
 src/client/theme/dark.json                         |  3 +++
 src/client/theme/light.json                        |  3 +++
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index 5dd40c9ba5..b2a6fed8e8 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -434,7 +434,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-post-form
 	display block
 	padding 16px
 	background var(--desktopPostFormBg)
@@ -677,7 +677,7 @@ root(isDark)
 		width 40px
 		height 40px
 		font-size 1em
-		color isDark ? var(--primary) : var(--primaryAlpha05)
+		color var(--desktopPostFormTransparentButtonFg)
 		background transparent
 		outline none
 		border solid 1px transparent
@@ -685,11 +685,11 @@ root(isDark)
 
 		&:hover
 			background transparent
-			border-color isDark ? var(--primaryAlpha05) : var(--primaryAlpha03)
+			border-color var(--primaryAlpha03)
 
 		&:active
 			color var(--primaryAlpha06)
-			background isDark ? transparent : linear-gradient(to bottom, var(--primaryLighten80) 0%, var(--primaryLighten90) 100%)
+			background linear-gradient(to bottom, var(--desktopPostFormTransparentButtonActiveGradientStart) 0%, var(--desktopPostFormTransparentButtonActiveGradientEnd) 100%)
 			border-color var(--primaryAlpha05)
 			box-shadow 0 2px 4px rgba(#000, 0.15) inset
 
@@ -714,10 +714,4 @@ root(isDark)
 		border dashed 2px var(--primaryAlpha05)
 		pointer-events none
 
-.mk-post-form[data-darkmode]
-	root(true)
-
-.mk-post-form:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 97ec96827a..ee5e1fb42c 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -132,6 +132,9 @@
 	"desktopPostFormBg": "@face",
 	"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
 	"desktopPostFormTextareaFg": "#fff",
+	"desktopPostFormTransparentButtonFg": "$primary",
+	"desktopPostFormTransparentButtonActiveGradientStart": ":darken<8<$secondary",
+	"desktopPostFormTransparentButtonActiveGradientEnd": ":darken<3<$secondary",
 	"desktopRenoteFormFooter": ":lighten<5<$secondary",
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
 	"desktopTimelineSrc": "@faceTextButton",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 52822bc5fe..4cfba2c1f6 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -132,6 +132,9 @@
 	"desktopPostFormBg": ":lighten<33<$primary",
 	"desktopPostFormTextareaBg": "#fff",
 	"desktopPostFormTextareaFg": "#333",
+	"desktopPostFormTransparentButtonFg": ":alpha<0.5<$primary",
+	"desktopPostFormTransparentButtonActiveGradientStart": ":lighten<30<$primary",
+	"desktopPostFormTransparentButtonActiveGradientEnd": ":lighten<33<$primary",
 	"desktopRenoteFormFooter": ":lighten<33<$primary",
 	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
 	"desktopTimelineSrc": "#6f7477",

From 99a2c5b3fa552f2abe449cb3f5b3d40270be5478 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 15:58:23 +0900
Subject: [PATCH 433/539] wip

---
 src/client/app/desktop/views/components/home.vue | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index a07af02ea6..bdaf2ddf47 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -247,9 +247,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-home
 	display block
 
 	&[data-customize]
@@ -279,7 +277,7 @@ root(isDark)
 		left 0
 		width 100%
 		height 48px
-		color isDark ? #fff : #000
+		color var(--text)
 		background var(--desktopHeaderBg)
 		box-shadow 0 1px 1px rgba(#000, 0.075)
 
@@ -320,7 +318,7 @@ root(isDark)
 						line-height 48px
 
 				&.trash
-					border-left solid 1px isDark ? #1c2023 : #ddd
+					border-left solid 1px var(--faceDivider)
 
 					> div
 						width 100%
@@ -395,10 +393,4 @@ root(isDark)
 				max-width 700px
 				margin 0 auto
 
-.mk-home[data-darkmode]
-	root(true)
-
-.mk-home:not([data-darkmode])
-	root(false)
-
 </style>

From 671c7cf06b4f7f6248f9a961f79af1cc78a7b598 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 16:08:09 +0900
Subject: [PATCH 434/539] wip

---
 .../views/components/follow-button.vue        | 33 +++++++------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/src/client/app/desktop/views/components/follow-button.vue b/src/client/app/desktop/views/components/follow-button.vue
index 014b536f59..45e63ad928 100644
--- a/src/client/app/desktop/views/components/follow-button.vue
+++ b/src/client/app/desktop/views/components/follow-button.vue
@@ -101,9 +101,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-follow-button
 	display block
 	cursor pointer
 	padding 0
@@ -130,33 +128,30 @@ root(isDark)
 			border-radius 8px
 
 	&:not(.active)
-		color isDark ? #fff : #888
-		background isDark ? linear-gradient(to bottom, #313543 0%, #282c37 100%) : linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
-		border solid 1px isDark ? #1c2023 : #e2e2e2
+		color var(--primary)
+		border solid 1px var(--primary)
 
 		&:hover
-			background isDark ? linear-gradient(to bottom, #2c2f3c 0%, #22262f 100%) : linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
-			border-color isDark ? #151a1d : #dcdcdc
+			background var(--primaryAlpha03)
 
 		&:active
-			background isDark ? #22262f : #ececec
-			border-color isDark ? #151a1d : #dcdcdc
+			background var(--primaryAlpha05)
 
 	&.active
 		color var(--primaryForeground)
-		background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
-		border solid 1px var(--primaryLighten15)
+		background var(--primary)
+		border solid 1px var(--primary)
 
 		&:not(:disabled)
 			font-weight bold
 
 		&:hover:not(:disabled)
-			background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
-			border-color var(--primary)
+			background var(--primaryLighten5)
+			border-color var(--primaryLighten5)
 
 		&:active:not(:disabled)
-			background var(--primary)
-			border-color var(--primary)
+			background var(--primaryDarken5)
+			border-color var(--primaryDarken5)
 
 	&.wait
 		cursor wait !important
@@ -167,10 +162,4 @@ root(isDark)
 		height 38px
 		line-height 38px
 
-.mk-follow-button[data-darkmode]
-	root(true)
-
-.mk-follow-button:not([data-darkmode])
-	root(false)
-
 </style>

From e0d3fd17ce5df8ac7e2adc5c4434cd8b050e5a86 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 16:13:47 +0900
Subject: [PATCH 435/539] wio

---
 src/client/app/desktop/views/components/drive.vue | 15 +++------------
 src/client/theme/dark.json                        |  1 +
 src/client/theme/light.json                       |  1 +
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index a1748963aa..f9b7eea64e 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -585,17 +585,14 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-
+.mk-drive
 	> nav
 		display block
 		z-index 2
 		width 100%
 		overflow auto
 		font-size 0.9em
-		color isDark ? #d2d9dc : #555
+		color var(--text)
 		background var(--face)
 		box-shadow 0 1px 0 rgba(#000, 0.05)
 
@@ -674,7 +671,7 @@ root(isDark)
 		padding 8px
 		height calc(100% - 38px)
 		overflow auto
-		background isDark ? #191b22 : #fff
+		background var(--desktopDriveBg)
 
 		&, *
 			user-select none
@@ -780,10 +777,4 @@ root(isDark)
 	> input
 		display none
 
-.mk-drive[data-darkmode]
-	root(true)
-
-.mk-drive:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index ee5e1fb42c..151001350d 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -140,6 +140,7 @@
 	"desktopTimelineSrc": "@faceTextButton",
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
 	"desktopWindowTitle": "@faceHeaderText",
+	"desktopDriveBg": "@bg",
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4cfba2c1f6..0f26f8b165 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -140,6 +140,7 @@
 	"desktopTimelineSrc": "#6f7477",
 	"desktopTimelineSrcHover": "#525a5f",
 	"desktopWindowTitle": "#666",
+	"desktopDriveBg": "#fff",
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 

From 3f4de3b1cc9b33f741c28aa7c3f92ffdb5fbcd17 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 17:49:37 +0900
Subject: [PATCH 436/539] wip

---
 .../desktop/views/components/drive.folder.vue | 20 ++++++-------------
 src/client/theme/dark.json                    |  4 ++++
 src/client/theme/light.json                   |  4 ++++
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/client/app/desktop/views/components/drive.folder.vue b/src/client/app/desktop/views/components/drive.folder.vue
index cb49215cbb..cfc2b64ff4 100644
--- a/src/client/app/desktop/views/components/drive.folder.vue
+++ b/src/client/app/desktop/views/components/drive.folder.vue
@@ -214,12 +214,10 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.ynntpczxvnusfwdyxsfuhvcmuypqopdd
 	padding 8px
 	height 64px
-	background isDark ? var(--primaryAlpha02) : var(--primaryLighten95)
+	background var(--desktopDriveFolderBg)
 	border-radius 4px
 
 	&, *
@@ -229,10 +227,10 @@ root(isDark)
 		pointer-events none
 
 	&:hover
-		//background isDark ? rgba(var(--primaryLighten10), 0.2) : var(--primaryLighten90)
+		background var(--desktopDriveFolderHoverBg)
 
 	&:active
-		//background isDark ? rgba(var(--primaryDarken10), 0.2) : var(--primaryLighten85)
+		background var(--desktopDriveFolderActiveBg)
 
 	&[data-is-contextmenu-showing]
 	&[data-draghover]
@@ -248,22 +246,16 @@ root(isDark)
 			border-radius 4px
 
 	&[data-draghover]
-		//background isDark ? rgba(var(--primaryDarken10), 0.2) : var(--primaryLighten90)
+		background var(--desktopDriveFolderActiveBg)
 
 	> .name
 		margin 0
 		font-size 0.9em
-		color isDark ? #fff : var(--primaryDarken30)
+		color var(--desktopDriveFolderFg)
 
 		> [data-fa]
 			margin-right 4px
 			margin-left 2px
 			text-align left
 
-.ynntpczxvnusfwdyxsfuhvcmuypqopdd[data-darkmode]
-	root(true)
-
-.ynntpczxvnusfwdyxsfuhvcmuypqopdd:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 151001350d..29d4fc2e5d 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -141,6 +141,10 @@
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
 	"desktopWindowTitle": "@faceHeaderText",
 	"desktopDriveBg": "@bg",
+	"desktopDriveFolderBg": ":alpha<0.2<$primary",
+	"desktopDriveFolderHoverBg": ":alpha<0.3<$primary",
+	"desktopDriveFolderActiveBg": ":alpha<0.3<:darken<10<$primary",
+	"desktopDriveFolderFg": "#fff",
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":lighten<10<$text",
 
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 0f26f8b165..e4116480e2 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -141,6 +141,10 @@
 	"desktopTimelineSrcHover": "#525a5f",
 	"desktopWindowTitle": "#666",
 	"desktopDriveBg": "#fff",
+	"desktopDriveFolderBg": ":lighten<31<$primary",
+	"desktopDriveFolderHoverBg": ":lighten<27<$primary",
+	"desktopDriveFolderActiveBg": ":lighten<25<$primary",
+	"desktopDriveFolderFg": ":darken<10<$primary",
 	"desktopSettingsNavItem": ":alpha<0.8<$text",
 	"desktopSettingsNavItemHover": ":darken<10<$text",
 

From 8e3dd75c8577633acbe2dfefd41119e3991de8a5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 19:59:19 +0900
Subject: [PATCH 437/539] wip

---
 .../components/games/reversi/reversi.game.vue | 22 ++----
 .../games/reversi/reversi.index.vue           | 34 ++++-----
 .../components/games/reversi/reversi.room.vue | 37 ++++------
 .../components/games/reversi/reversi.vue      | 14 +---
 .../views/components/messaging-room.form.vue  | 12 +---
 .../app/common/views/components/poll.vue      | 17 ++---
 .../app/common/views/components/tag-cloud.vue |  8 +--
 .../app/common/views/components/trends.vue    | 15 ++--
 .../app/common/views/components/ui/button.vue | 14 ++--
 .../views/components/ui/form/button.vue       | 20 ++----
 .../common/views/components/ui/form/radio.vue | 12 +---
 .../app/common/views/components/ui/input.vue  | 16 ++---
 .../app/common/views/components/ui/radio.vue  | 10 +--
 .../app/common/views/components/ui/select.vue | 16 ++---
 src/client/app/common/views/pages/follow.vue  | 13 +---
 .../app/common/views/widgets/analog-clock.vue | 10 +--
 .../app/common/views/widgets/calendar.vue     | 15 ++--
 .../app/common/views/widgets/donation.vue     | 72 +++++++------------
 src/client/app/common/views/widgets/memo.vue  | 14 +---
 .../app/common/views/widgets/server.cpu.vue   | 10 +--
 .../app/common/views/widgets/server.disk.vue  | 10 +--
 .../common/views/widgets/server.memory.vue    | 10 +--
 .../app/common/views/widgets/server.pie.vue   | 10 +--
 .../views/components/context-menu.menu.vue    | 16 ++---
 .../desktop/views/components/context-menu.vue | 10 +--
 .../desktop/views/components/drive.file.vue   | 12 +---
 .../desktop/views/components/note-preview.vue |  8 +--
 .../views/components/notes.note.sub.vue       |  8 +--
 .../views/components/post-form-window.vue     | 11 +--
 .../views/components/settings.tags.vue        |  9 +--
 .../desktop/views/components/ui.header.vue    |  8 +--
 .../views/components/widget-container.vue     |  8 +--
 .../app/desktop/views/components/window.vue   | 19 +----
 .../views/pages/admin/admin.cpu-memory.vue    |  8 +--
 .../desktop/views/pages/deck/deck.column.vue  |  5 +-
 .../views/pages/deck/deck.note.sub.vue        |  8 +--
 .../views/pages/deck/deck.notification.vue    |  8 +--
 .../views/pages/deck/deck.notifications.vue   |  9 +--
 .../pages/user/user.followers-you-know.vue    |  8 +--
 .../app/desktop/views/widgets/trends.vue      |  8 +--
 .../mobile/views/components/note-preview.vue  |  8 +--
 .../app/mobile/views/components/notes.vue     | 10 +--
 src/client/app/mobile/views/pages/welcome.vue |  9 +--
 src/client/theme/dark.json                    | 30 +++++++-
 src/client/theme/light.json                   | 30 +++++++-
 45 files changed, 200 insertions(+), 461 deletions(-)

diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index bc230496a6..751abe2ecd 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -304,9 +304,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.xqnhankfuuilcwvhgsopeqncafzsquya
 	text-align center
 
 	> .go-index
@@ -319,7 +317,7 @@ root(isDark)
 
 	> header
 		padding 8px
-		border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
+		border-bottom dashed 1px var(--reversiGameHeaderLine)
 
 		a
 			color inherit
@@ -386,16 +384,16 @@ root(isDark)
 						user-select none
 
 					&.empty
-						border solid 2px isDark ? #51595f : #eee
+						border solid 2px var(--reversiGameEmptyCell)
 
 					&.empty.can
-						background isDark ? #51595f : #eee
+						background var(--reversiGameEmptyCell)
 
 					&.empty.myTurn
-						border-color isDark ? #6a767f : #ddd
+						border-color var(--reversiGameEmptyCellMyTurn)
 
 						&.can
-							background isDark ? #51595f : #eee
+							background var(--reversiGameEmptyCellCanPut)
 							cursor pointer
 
 							&:hover
@@ -409,7 +407,7 @@ root(isDark)
 						box-shadow 0 0 0 4px var(--primaryAlpha07)
 
 					&.isEnded
-						border-color isDark ? #6a767f : #ddd
+						border-color var(--reversiGameEmptyCellMyTurn)
 
 					&.none
 						border-color transparent !important
@@ -458,10 +456,4 @@ root(isDark)
 			margin 0 8px
 			min-width 70px
 
-.xqnhankfuuilcwvhgsopeqncafzsquya[data-darkmode]
-	root(true)
-
-.xqnhankfuuilcwvhgsopeqncafzsquya:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index 44a1262636..3725aa6cb4 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -138,9 +138,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.phgnkghfpyvkrvwiajkiuoxyrdaqpzcx
 	> h1
 		margin 0
 		padding 24px
@@ -148,7 +146,7 @@ root(isDark)
 		text-align center
 		font-weight normal
 		color #fff
-		background linear-gradient(to bottom, isDark ? #45730e : #8bca3e, isDark ? #464300 : #d6cf31)
+		background linear-gradient(to bottom, var(--reversiBannerGradientStart), var(--reversiBannerGradientEnd))
 
 		& + p
 			margin 0
@@ -156,7 +154,7 @@ root(isDark)
 			margin-bottom 12px
 			text-align center
 			font-size 14px
-			border-bottom solid 1px isDark ? #535f65 : #d3d9dc
+			border-bottom solid 1px var(--faceDivider)
 
 	> .play
 		margin 0 auto
@@ -171,14 +169,14 @@ root(isDark)
 				padding 16px
 				font-size 14px
 				text-align left
-				background isDark ? #282c37 : #f5f5f5
+				background var(--reversiDescBg)
 				border-radius 8px
 
 	> section
 		margin 0 auto
 		padding 0 16px 16px 16px
 		max-width 500px
-		border-top solid 1px isDark ? #535f65 : #d3d9dc
+		border-top solid 1px var(--faceDivider)
 
 		> h2
 			margin 0
@@ -189,9 +187,9 @@ root(isDark)
 	.invitation
 		margin 8px 0
 		padding 8px
-		color isDark ? #fff : #677f84
+		color var(--text)
 		background var(--face)
-		box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
+		box-shadow 0 2px 16px var(--reversiListItemShadow)
 		border-radius 6px
 		cursor pointer
 
@@ -203,10 +201,10 @@ root(isDark)
 			border-color var(--primary)
 
 		&:hover
-			background isDark ? #313543 : #f5f5f5
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
 		&:active
-			background isDark ? #1e222b : #eee
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 		> .avatar
 			width 32px
@@ -221,9 +219,9 @@ root(isDark)
 		display block
 		margin 8px 0
 		padding 8px
-		color isDark ? #fff : #677f84
+		color var(--text)
 		background var(--face)
-		box-shadow 0 2px 16px rgba(#000, isDark ? 0.7 : 0.15)
+		box-shadow 0 2px 16px var(--reversiListItemShadow)
 		border-radius 6px
 		cursor pointer
 
@@ -232,10 +230,10 @@ root(isDark)
 			user-select none
 
 		&:hover
-			background isDark ? #313543 : #f5f5f5
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)
 
 		&:active
-			background isDark ? #1e222b : #eee
+			box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.1)
 
 		> .avatar
 			width 32px
@@ -246,10 +244,4 @@ root(isDark)
 			margin 0 8px
 			line-height 32px
 
-.phgnkghfpyvkrvwiajkiuoxyrdaqpzcx[data-darkmode]
-	root(true)
-
-.phgnkghfpyvkrvwiajkiuoxyrdaqpzcx:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index b407046ba9..236141ee28 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -252,11 +252,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.urbixznjwwuukfsckrwzwsqzsxornqij
 	text-align center
-	background isDark ? #191b22 : #f9f9f9
+	background var(--bg)
 
 	> header
 		padding 8px
@@ -274,9 +272,9 @@ root(isDark)
 						width 100%
 						padding 12px 14px
 						background var(--face)
-						border 1px solid isDark ? #6a707d : #dcdfe6
+						border 1px solid var(--reversiMapSelectBorder)
 						border-radius 4px
-						color isDark ? #fff : #606266
+						color var(--text)
 						cursor pointer
 						transition border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)
 						-webkit-appearance none
@@ -284,7 +282,7 @@ root(isDark)
 						appearance none
 
 						&:hover
-							border-color isDark ? #a7aebd : #c0c4cc
+							border-color var(--reversiMapSelectHoverBorder)
 
 						&:focus
 						&:active
@@ -294,7 +292,8 @@ root(isDark)
 					> .random
 						padding 32px 0
 						font-size 64px
-						color isDark ? #4e5961 : #d8d8d8
+						color var(--text)
+						opacity 0.7
 
 					> .board
 						display grid
@@ -302,11 +301,11 @@ root(isDark)
 						width 300px
 						height 300px
 						margin 0 auto
-						color isDark ? #fff : #444
+						color var(--text)
 
 						> div
 							background transparent
-							border solid 2px isDark ? #6a767f : #ddd
+							border solid 2px var(--faceDivider)
 							border-radius 6px
 							overflow hidden
 							cursor pointer
@@ -332,31 +331,25 @@ root(isDark)
 			max-width 400px
 			border-radius 4px
 			background var(--face)
-			color isDark ? #fff : #303133
-			box-shadow 0 2px 12px 0 rgba(#000, isDark ? 0.7 : 0.1)
+			color var(--text)
+			box-shadow 0 2px 12px 0 var(--reversiRoomFormShadow)
 
 			> header
 				padding 18px 20px
-				border-bottom 1px solid isDark ? #1c2023 : #ebeef5
+				border-bottom 1px solid var(--faceDivider)
 
 			> div
 				padding 20px
-				color isDark ? #fff : #606266
+				color var(--text)
 
 	> footer
 		position sticky
 		bottom 0
 		padding 16px
-		background rgba(isDark ? #191b22 : #fff, 0.9)
-		border-top solid 1px isDark ? #606266 : #c4cdd4
+		background var(--reversiRoomFooterBg)
+		border-top solid 1px var(--faceDivider)
 
 		> .status
 			margin 0 0 16px 0
 
-.urbixznjwwuukfsckrwzwsqzsxornqij[data-darkmode]
-	root(true)
-
-.urbixznjwwuukfsckrwzwsqzsxornqij:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.vue b/src/client/app/common/views/components/games/reversi/reversi.vue
index 75d7d574c1..6eb9511ce9 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.vue
@@ -156,11 +156,9 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-	color isDark ? #fff : #677f84
-	background isDark ? #191b22 : #fff
+.vchtoekanapleubgzioubdtmlkribzfd
+	color var(--text)
+	background var(--bg)
 
 	> .matching
 		> h1
@@ -177,10 +175,4 @@ root(isDark)
 			text-align center
 			border-top dashed 1px #c4cdd4
 
-.vchtoekanapleubgzioubdtmlkribzfd[data-darkmode]
-	root(true)
-
-.vchtoekanapleubgzioubdtmlkribzfd:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue
index 8e62587c20..c93fd7f78d 100644
--- a/src/client/app/common/views/components/messaging-room.form.vue
+++ b/src/client/app/common/views/components/messaging-room.form.vue
@@ -195,9 +195,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-messaging-form
 	> textarea
 		cursor auto
 		display block
@@ -212,7 +210,7 @@ root(isDark)
 		color var(--inputText)
 		outline none
 		border none
-		border-top solid 1px isDark ? #4b5056 : #eee
+		border-top solid 1px var(--faceDivider)
 		border-radius 0
 		box-shadow none
 		background transparent
@@ -302,10 +300,4 @@ root(isDark)
 	input[type=file]
 		display none
 
-.mk-messaging-form[data-darkmode]
-	root(true)
-
-.mk-messaging-form:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue
index 0e60932796..0dc2622f9b 100644
--- a/src/client/app/common/views/components/poll.vue
+++ b/src/client/app/common/views/components/poll.vue
@@ -67,10 +67,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
-
+.mk-poll
 	> ul
 		display block
 		margin 0
@@ -82,8 +79,8 @@ root(isDark)
 			margin 4px 0
 			padding 4px 8px
 			width 100%
-			color isDark ? #fff : #000
-			border solid 1px isDark ? #5e636f : #eee
+			color var(--pollChoiceText)
+			border solid 1px var(--pollChoiceBorder)
 			border-radius 4px
 			overflow hidden
 			cursor pointer
@@ -110,7 +107,7 @@ root(isDark)
 					margin-left 4px
 
 	> p
-		color isDark ? #a3aebf : #000
+		color var(--text)
 
 		a
 			color inherit
@@ -125,10 +122,4 @@ root(isDark)
 			&:active
 				background transparent
 
-.mk-poll[data-darkmode]
-	root(true)
-
-.mk-poll:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue
index 5f2cc5276a..5cc828082f 100644
--- a/src/client/app/common/views/components/tag-cloud.vue
+++ b/src/client/app/common/views/components/tag-cloud.vue
@@ -63,7 +63,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.jtivnzhfwquxpsfidertopbmwmchmnmo
 	height 100%
 	width 100%
 
@@ -81,10 +81,4 @@ root(isDark)
 		height 100%
 		width 100%
 
-.jtivnzhfwquxpsfidertopbmwmchmnmo[data-darkmode]
-	root(true)
-
-.jtivnzhfwquxpsfidertopbmwmchmnmo:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/trends.vue b/src/client/app/common/views/components/trends.vue
index 0042dbe853..3d36d7449c 100644
--- a/src/client/app/common/views/components/trends.vue
+++ b/src/client/app/common/views/components/trends.vue
@@ -49,13 +49,14 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.csqvmxybqbycalfhkxvyfrgbrdalkaoc
 	> .fetching
 	> .empty
 		margin 0
 		padding 16px
 		text-align center
-		color #aaa
+		color var(--text)
+		opacity 0.7
 
 		> [data-fa]
 			margin-right 4px
@@ -70,13 +71,13 @@ root(isDark)
 			padding 14px 16px
 
 			&:not(:last-child)
-				border-bottom solid 1px isDark ? #393f4f : #eee
+				border-bottom solid 1px var(--faceDivider)
 
 			> .tag
 				flex 1
 				overflow hidden
 				font-size 14px
-				color isDark ? #9baec8 : #65727b
+				color var(--text)
 
 				> a
 					display block
@@ -94,10 +95,4 @@ root(isDark)
 			> .chart
 				height 30px
 
-.csqvmxybqbycalfhkxvyfrgbrdalkaoc[data-darkmode]
-	root(true)
-
-.csqvmxybqbycalfhkxvyfrgbrdalkaoc:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index c411f0f5c9..4934a1bdfa 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -32,7 +32,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark, fill)
+root(fill)
 	> button
 		display block
 		width 100%
@@ -65,16 +65,10 @@ root(isDark, fill)
 			&:active
 				background var(--primaryAlpha03)
 
-.ui-button[data-darkmode]
+.ui-button
 	&.fill
-		root(true, true)
+		root(true)
 	&:not(.fill)
-		root(true, false)
-
-.ui-button:not([data-darkmode])
-	&.fill
-		root(false, true)
-	&:not(.fill)
-		root(false, false)
+		root(false)
 
 </style>
diff --git a/src/client/app/common/views/components/ui/form/button.vue b/src/client/app/common/views/components/ui/form/button.vue
index bccf36e52f..3fd7b47629 100644
--- a/src/client/app/common/views/components/ui/form/button.vue
+++ b/src/client/app/common/views/components/ui/form/button.vue
@@ -25,9 +25,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg
 	display inline-block
 
 	& + .nvemkhtwcnnpkdrwfcbzuwhfulejhmzg
@@ -38,11 +36,11 @@ root(isDark)
 		margin 0
 		padding 12px 20px
 		font-size 14px
-		border 1px solid isDark ? #6d727d : #dcdfe6
+		border 1px solid var(--formButtonBorder)
 		border-radius 4px
 		outline none
 		box-shadow none
-		color isDark ? #fff : #606266
+		color var(--text)
 		transition 0.1s
 
 		*
@@ -51,12 +49,12 @@ root(isDark)
 		&:hover
 		&:focus
 			color var(--primary)
-			//background rgba(var(--primary-r), var(--primary-g), var(--primary-b), isDark ? 0.2 : 0.12)
-			//border-color rgba(var(--primary-r), var(--primary-g), var(--primary-b), isDark ? 0.5 : 0.3)
+			background var(--formButtonHoverBg)
+			border-color var(--formButtonHoverBorder)
 
 		&:active
 			color var(--primaryDarken20)
-			//background rgba(var(--primary-r), var(--primary-g), var(--primary-b), 0.12)
+			background var(--formButtonActiveBg)
 			border-color var(--primary)
 			transition all 0s
 
@@ -80,10 +78,4 @@ root(isDark)
 		> button
 			border-radius 64px
 
-.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg[data-darkmode]
-	root(true)
-
-.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/ui/form/radio.vue b/src/client/app/common/views/components/ui/form/radio.vue
index 5728a8171b..396b2997e5 100644
--- a/src/client/app/common/views/components/ui/form/radio.vue
+++ b/src/client/app/common/views/components/ui/form/radio.vue
@@ -49,9 +49,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.uywduthvrdnlpsvsjkqigicixgyfctto
 	display inline-flex
 	margin 0 16px 0 0
 	cursor pointer
@@ -93,7 +91,7 @@ root(isDark)
 		width 20px
 		height 20px
 		background none
-		border solid 2px isDark ? rgba(#fff, 0.6) : rgba(#000, 0.4)
+		border solid 2px var(--radioBorder)
 		border-radius 100%
 		transition inherit
 
@@ -117,10 +115,4 @@ root(isDark)
 		line-height 20px
 		cursor pointer
 
-.uywduthvrdnlpsvsjkqigicixgyfctto[data-darkmode]
-	root(true)
-
-.uywduthvrdnlpsvsjkqigicixgyfctto:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/ui/input.vue b/src/client/app/common/views/components/ui/input.vue
index d7b83d81cd..d7e72409f0 100644
--- a/src/client/app/common/views/components/ui/input.vue
+++ b/src/client/app/common/views/components/ui/input.vue
@@ -155,9 +155,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark, fill)
+root(fill)
 	margin 32px 0
 
 	> .icon
@@ -335,16 +333,10 @@ root(isDark, fill)
 				left 0 !important
 				transform scale(0.75)
 
-.ui-input[data-darkmode]
+.ui-input
 	&.fill
-		root(true, true)
+		root(true)
 	&:not(.fill)
-		root(true, false)
-
-.ui-input:not([data-darkmode])
-	&.fill
-		root(false, true)
-	&:not(.fill)
-		root(false, false)
+		root(false)
 
 </style>
diff --git a/src/client/app/common/views/components/ui/radio.vue b/src/client/app/common/views/components/ui/radio.vue
index 3a4407abc0..868a339aa4 100644
--- a/src/client/app/common/views/components/ui/radio.vue
+++ b/src/client/app/common/views/components/ui/radio.vue
@@ -51,9 +51,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.ui-radio
 	display inline-block
 	margin 0 32px 0 0
 	cursor pointer
@@ -111,10 +109,4 @@ root(isDark)
 		line-height 20px
 		cursor pointer
 
-.ui-radio[data-darkmode]
-	root(true)
-
-.ui-radio:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/components/ui/select.vue b/src/client/app/common/views/components/ui/select.vue
index bdb730fea9..8c1b8c0269 100644
--- a/src/client/app/common/views/components/ui/select.vue
+++ b/src/client/app/common/views/components/ui/select.vue
@@ -70,9 +70,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark, fill)
+root(fill)
 	margin 32px 0
 
 	> .icon
@@ -200,16 +198,10 @@ root(isDark, fill)
 				left 0 !important
 				transform scale(0.75)
 
-.ui-select[data-darkmode]
+.ui-select
 	&.fill
-		root(true, true)
+		root(true)
 	&:not(.fill)
-		root(true, false)
-
-.ui-select:not([data-darkmode])
-	&.fill
-		root(false, true)
-	&:not(.fill)
-		root(false, false)
+		root(false)
 
 </style>
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index ef7ee111e2..cb4785f468 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -107,14 +107,12 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.syxhndwprovvuqhmyvveewmbqayniwkv
 	padding 32px
 	max-width 500px
 	margin 0 auto
 	text-align center
-	color isDark ? #9baec8 : #868c8c
+	color var(--text)
 
 	$bg = var(--face)
 
@@ -124,7 +122,6 @@ root(isDark)
 	> .signed-in-as
 		margin-bottom 16px
 		font-size 14px
-		color isDark ? #9baec8 : #9daab3
 
 	> main
 		margin-bottom 16px
@@ -204,10 +201,4 @@ root(isDark)
 		*
 			pointer-events none
 
-.syxhndwprovvuqhmyvveewmbqayniwkv[data-darkmode]
-	root(true)
-
-.syxhndwprovvuqhmyvveewmbqayniwkv:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/analog-clock.vue b/src/client/app/common/views/widgets/analog-clock.vue
index 1725c2f1af..cfcdd5a1b6 100644
--- a/src/client/app/common/views/widgets/analog-clock.vue
+++ b/src/client/app/common/views/widgets/analog-clock.vue
@@ -26,16 +26,8 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mkw-analog-clock
 	.mkw-analog-clock--body
 		padding 8px
 
-.mkw-analog-clock[data-darkmode]
-	root(true)
-
-.mkw-analog-clock:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/calendar.vue b/src/client/app/common/views/widgets/calendar.vue
index 238b493a61..308d73bad8 100644
--- a/src/client/app/common/views/widgets/calendar.vue
+++ b/src/client/app/common/views/widgets/calendar.vue
@@ -116,9 +116,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mkw-calendar
 	&[data-special='on-new-years-day']
 		border-color #ef95a0
 
@@ -169,7 +167,8 @@ root(isDark)
 					margin 0 0 2px 0
 					font-size 12px
 					line-height 18px
-					color isDark ? #7a8692 : #888
+					color var(--text)
+					opacity 0.8
 
 					> b
 						margin-left 2px
@@ -177,7 +176,7 @@ root(isDark)
 				> .meter
 					width 100%
 					overflow hidden
-					background isDark ? #1c1f25 : #eee
+					background var(--materBg)
 					border-radius 8px
 
 					> .val
@@ -197,10 +196,4 @@ root(isDark)
 					> .meter > .val
 						background #41ddde
 
-.mkw-calendar[data-darkmode]
-	root(true)
-
-.mkw-calendar:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/donation.vue b/src/client/app/common/views/widgets/donation.vue
index a91aa8e749..b025b41e7d 100644
--- a/src/client/app/common/views/widgets/donation.vue
+++ b/src/client/app/common/views/widgets/donation.vue
@@ -1,13 +1,15 @@
 <template>
-<div class="mkw-donation" :data-mobile="platform == 'mobile'">
-	<article>
-		<h1>%fa:heart%%i18n:@title%</h1>
-		<p v-if="meta">
-			{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
-			<a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
-			{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
-		</p>
-	</article>
+<div>
+	<mk-widget-container :show-header="false">
+		<article class="dolfvtibguprpxxhfndqaosjitixjohx">
+			<h1>%fa:heart%%i18n:@title%</h1>
+			<p v-if="meta">
+				{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
+				<a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
+				{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
+			</p>
+		</article>
+	</mk-widget-container>
 </div>
 </template>
 
@@ -30,46 +32,22 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-	background var(--face)
-	border solid 1px isDark ? #c3831c : #ead8bb
-	border-radius 6px
+.dolfvtibguprpxxhfndqaosjitixjohx
+	padding 20px
+	background var(--donationBg)
+	color var(--donationFg)
 
-	> article
-		padding 20px
+	> h1
+		margin 0 0 5px 0
+		font-size 1em
 
-		> h1
-			margin 0 0 5px 0
-			font-size 1em
-			color isDark ? #b2bac1 : #888
+		> [data-fa]
+			margin-right 0.25em
 
-			> [data-fa]
-				margin-right 0.25em
-
-		> p
-			display block
-			z-index 1
-			margin 0
-			font-size 0.8em
-			color isDark ? #a1a6ab : #999
-
-	&[data-mobile]
-		border none
-		background #ead8bb
-		border-radius 8px
-		box-shadow 0 0 0 1px rgba(#000, 0.2)
-
-		> article
-			> h1
-				color #7b8871
-
-			> p
-				color #777d71
-
-.mkw-donation[data-darkmode]
-	root(true)
-
-.mkw-donation:not([data-darkmode])
-	root(false)
+	> p
+		display block
+		z-index 1
+		margin 0
+		font-size 0.8em
 
 </style>
diff --git a/src/client/app/common/views/widgets/memo.vue b/src/client/app/common/views/widgets/memo.vue
index 42df683883..be8b18a4e9 100644
--- a/src/client/app/common/views/widgets/memo.vue
+++ b/src/client/app/common/views/widgets/memo.vue
@@ -57,9 +57,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mkw-memo
 	.mkw-memo--body
 		padding-bottom 28px + 16px
 
@@ -69,10 +67,10 @@ root(isDark)
 			max-width 100%
 			min-width 100%
 			padding 16px
-			color isDark ? #fff : #222
+			color var(--inputText)
 			background var(--face)
 			border none
-			border-bottom solid 1px isDark ? #1c2023 : #eee
+			border-bottom solid 1px var(--faceDivider)
 			border-radius 0
 
 		> button
@@ -102,10 +100,4 @@ root(isDark)
 				opacity 0.7
 				cursor default
 
-.mkw-memo[data-darkmode]
-	root(true)
-
-.mkw-memo:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/server.cpu.vue b/src/client/app/common/views/widgets/server.cpu.vue
index b9748bdf7c..2034aee0eb 100644
--- a/src/client/app/common/views/widgets/server.cpu.vue
+++ b/src/client/app/common/views/widgets/server.cpu.vue
@@ -38,7 +38,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.cpu
 	> .pie
 		padding 10px
 		height 100px
@@ -52,7 +52,7 @@ root(isDark)
 		> p
 			margin 0
 			font-size 12px
-			color isDark ? #a8b4bd : #505050
+			color var(--chartCaption)
 
 			&:first-child
 				font-weight bold
@@ -65,10 +65,4 @@ root(isDark)
 		display block
 		clear both
 
-.cpu[data-darkmode]
-	root(true)
-
-.cpu:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/server.disk.vue b/src/client/app/common/views/widgets/server.disk.vue
index 99ce624051..667576ab76 100644
--- a/src/client/app/common/views/widgets/server.disk.vue
+++ b/src/client/app/common/views/widgets/server.disk.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.disk
 	> .pie
 		padding 10px
 		height 100px
@@ -60,7 +60,7 @@ root(isDark)
 		> p
 			margin 0
 			font-size 12px
-			color isDark ? #a8b4bd : #505050
+			color var(--chartCaption)
 
 			&:first-child
 				font-weight bold
@@ -73,10 +73,4 @@ root(isDark)
 		display block
 		clear both
 
-.disk[data-darkmode]
-	root(true)
-
-.disk:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/server.memory.vue b/src/client/app/common/views/widgets/server.memory.vue
index 8a60621343..9e12884cf9 100644
--- a/src/client/app/common/views/widgets/server.memory.vue
+++ b/src/client/app/common/views/widgets/server.memory.vue
@@ -46,7 +46,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.memory
 	> .pie
 		padding 10px
 		height 100px
@@ -60,7 +60,7 @@ root(isDark)
 		> p
 			margin 0
 			font-size 12px
-			color isDark ? #a8b4bd : #505050
+			color var(--chartCaption)
 
 			&:first-child
 				font-weight bold
@@ -73,10 +73,4 @@ root(isDark)
 		display block
 		clear both
 
-.memory[data-darkmode]
-	root(true)
-
-.memory:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/common/views/widgets/server.pie.vue b/src/client/app/common/views/widgets/server.pie.vue
index d557c52ea5..ce342fd41b 100644
--- a/src/client/app/common/views/widgets/server.pie.vue
+++ b/src/client/app/common/views/widgets/server.pie.vue
@@ -45,7 +45,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+svg
 	display block
 	height 100%
 
@@ -56,12 +56,6 @@ root(isDark)
 
 	> text
 		font-size 0.15px
-		fill isDark ? rgba(#fff, 0.6) : rgba(#000, 0.6)
-
-svg[data-darkmode]
-	root(true)
-
-svg:not([data-darkmode])
-	root(false)
+		fill var(--chartCaption)
 
 </style>
diff --git a/src/client/app/desktop/views/components/context-menu.menu.vue b/src/client/app/desktop/views/components/context-menu.menu.vue
index b65a8e1dea..9e4541a752 100644
--- a/src/client/app/desktop/views/components/context-menu.menu.vue
+++ b/src/client/app/desktop/views/components/context-menu.menu.vue
@@ -31,9 +31,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.menu
 	$width = 240px
 	$item-height = 38px
 	$padding = 10px
@@ -48,7 +46,7 @@ root(isDark)
 		&.divider
 			margin-top $padding
 			padding-top $padding
-			border-top solid 1px isDark ? #1c2023 : #eee
+			border-top solid 1px var(--faceDivider)
 
 		&.nest
 			> p
@@ -77,7 +75,7 @@ root(isDark)
 			margin 0
 			padding 0 32px 0 38px
 			line-height $item-height
-			color isDark ? #c8cece : #868C8C
+			color var(--text)
 			text-decoration none
 			cursor pointer
 
@@ -106,17 +104,11 @@ root(isDark)
 		left $width
 		margin-top -($padding)
 		width $width
-		background isDark ? #282c37 :#fff
+		background var(--popupBg)
 		border-radius 0 4px 4px 4px
 		box-shadow 2px 2px 8px rgba(#000, 0.2)
 		transition visibility 0s linear 0.2s
 
-.menu[data-darkmode]
-	root(true)
-
-.menu:not([data-darkmode])
-	root(false)
-
 </style>
 
 <style lang="stylus" module>
diff --git a/src/client/app/desktop/views/components/context-menu.vue b/src/client/app/desktop/views/components/context-menu.vue
index 170dcf55a1..b0a34866cd 100644
--- a/src/client/app/desktop/views/components/context-menu.vue
+++ b/src/client/app/desktop/views/components/context-menu.vue
@@ -71,7 +71,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.context-menu
 	$width = 240px
 	$item-height = 38px
 	$padding = 10px
@@ -82,15 +82,9 @@ root(isDark)
 	z-index 4096
 	width $width
 	font-size 0.8em
-	background var(--face)
+	background var(--popupBg)
 	border-radius 0 4px 4px 4px
 	box-shadow 2px 2px 8px rgba(#000, 0.2)
 	opacity 0
 
-.context-menu[data-darkmode]
-	root(true)
-
-.context-menu:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/drive.file.vue b/src/client/app/desktop/views/components/drive.file.vue
index 225130baf7..d7e24cfe71 100644
--- a/src/client/app/desktop/views/components/drive.file.vue
+++ b/src/client/app/desktop/views/components/drive.file.vue
@@ -200,9 +200,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.gvfdktuvdgwhmztnuekzkswkjygptfcv
 	padding 8px 0 0 0
 	height 180px
 	border-radius 4px
@@ -337,16 +335,10 @@ root(isDark)
 		font-size 0.8em
 		text-align center
 		word-break break-all
-		color isDark ? #fff : #444
+		color var(--text)
 		overflow hidden
 
 		> .ext
 			opacity 0.5
 
-.gvfdktuvdgwhmztnuekzkswkjygptfcv[data-darkmode]
-	root(true)
-
-.gvfdktuvdgwhmztnuekzkswkjygptfcv:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/note-preview.vue b/src/client/app/desktop/views/components/note-preview.vue
index 7e5a1db8d4..4c1c7e7b2d 100644
--- a/src/client/app/desktop/views/components/note-preview.vue
+++ b/src/client/app/desktop/views/components/note-preview.vue
@@ -47,7 +47,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.qiziqtywpuaucsgarwajitwaakggnisj
 	display flex
 	font-size 0.9em
 
@@ -83,10 +83,4 @@ root(isDark)
 					padding 0
 					color var(--subNoteText)
 
-.qiziqtywpuaucsgarwajitwaakggnisj[data-darkmode]
-	root(true)
-
-.qiziqtywpuaucsgarwajitwaakggnisj:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/notes.note.sub.vue b/src/client/app/desktop/views/components/notes.note.sub.vue
index a0c4cc2fad..ee52670f8f 100644
--- a/src/client/app/desktop/views/components/notes.note.sub.vue
+++ b/src/client/app/desktop/views/components/notes.note.sub.vue
@@ -42,7 +42,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.tkfdzaxtkdeianobciwadajxzbddorql
 	display flex
 	margin 0
 	padding 16px 32px
@@ -88,10 +88,4 @@ root(isDark)
 						max-height 120px
 						font-size 80%
 
-.tkfdzaxtkdeianobciwadajxzbddorql[data-darkmode]
-	root(true)
-
-.tkfdzaxtkdeianobciwadajxzbddorql:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/post-form-window.vue b/src/client/app/desktop/views/components/post-form-window.vue
index 466d5e1fd8..a5d191f2f3 100644
--- a/src/client/app/desktop/views/components/post-form-window.vue
+++ b/src/client/app/desktop/views/components/post-form-window.vue
@@ -77,7 +77,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-post-form-window
 	.mk-post-form-window--header
 		.icon
 			margin-right 8px
@@ -94,15 +94,6 @@ root(isDark)
 
 	.mk-post-form-window--body
 		.notePreview
-			if isDark
-				margin 16px 22px 0 22px
-			else
 				margin 16px 22px
 
-.mk-post-form-window[data-darkmode]
-	root(true)
-
-.mk-post-form-window:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/settings.tags.vue b/src/client/app/desktop/views/components/settings.tags.vue
index a7234f7d87..dfc69a387e 100644
--- a/src/client/app/desktop/views/components/settings.tags.vue
+++ b/src/client/app/desktop/views/components/settings.tags.vue
@@ -47,8 +47,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-root(isDark)
+.vfcitkilproprqtbnpoertpsziierwzi
 	> .timeline
 		padding-bottom 16px
 		border-bottom solid 1px rgba(#000, 0.1)
@@ -56,10 +55,4 @@ root(isDark)
 	> .add
 		margin-top 16px
 
-.vfcitkilproprqtbnpoertpsziierwzi[data-darkmode]
-	root(true)
-
-.vfcitkilproprqtbnpoertpsziierwzi:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index 5089232b06..1b96e06486 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -77,7 +77,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.header
 	position fixed
 	top 0
 	z-index 1000
@@ -151,10 +151,4 @@ root(isDark)
 						> .mk-ui-header-search
 							display none
 
-.header[data-darkmode]
-	root(true)
-
-.header:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/widget-container.vue b/src/client/app/desktop/views/components/widget-container.vue
index cfcb2785c5..a506357039 100644
--- a/src/client/app/desktop/views/components/widget-container.vue
+++ b/src/client/app/desktop/views/components/widget-container.vue
@@ -25,7 +25,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-widget-container
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -71,10 +71,4 @@ root(isDark)
 			&:active
 				color var(--faceTextButtonActive)
 
-.mk-widget-container[data-darkmode]
-	root(true)
-
-.mk-widget-container:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/components/window.vue b/src/client/app/desktop/views/components/window.vue
index 5547445537..a1893ffd6b 100644
--- a/src/client/app/desktop/views/components/window.vue
+++ b/src/client/app/desktop/views/components/window.vue
@@ -462,7 +462,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mk-window
 	display block
 
 	> .bg
@@ -490,10 +490,7 @@ root(isDark)
 		&:focus
 			&:not([data-is-modal])
 				> .body
-					if isDark
-						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 12px 0 rgba(#000, 0.5)
-					else
-						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 6px 0 rgba(#000, 0.2)
+						box-shadow 0 0 0px 1px var(--primaryAlpha05), 0 2px 12px 0 var(--desktopWindowShadow)
 
 		> .handle
 			$size = 8px
@@ -561,11 +558,7 @@ root(isDark)
 			overflow hidden
 			background var(--face)
 			border-radius 6px
-
-			if isDark
-				box-shadow 0 2px 12px 0 rgba(#000, 0.5)
-			else
-				box-shadow 0 2px 6px 0 rgba(#000, 0.2)
+			box-shadow 0 2px 12px 0 rgba(#000, 0.5)
 
 			> header
 				$header-height = 40px
@@ -632,10 +625,4 @@ root(isDark)
 		> .main > .body > .content
 			height calc(100% - 40px)
 
-.mk-window[data-darkmode]
-	root(true)
-
-.mk-window:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue b/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
index ebaa11478d..63b24cea47 100644
--- a/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.cpu-memory.vue
@@ -111,7 +111,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.zyknedwtlthezamcjlolyusmipqmjgxz
 	> svg
 		display block
 		width 50%
@@ -135,10 +135,4 @@ root(isDark)
 		display block
 		clear both
 
-.zyknedwtlthezamcjlolyusmipqmjgxz[data-darkmode]
-	root(true)
-
-.zyknedwtlthezamcjlolyusmipqmjgxz:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index 1b939f2f58..c372ef490e 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -305,9 +305,8 @@ export default Vue.extend({
 			background transparent
 			box-shadow none
 
-			if !isDark
-				> button
-					color #bbb
+			> button
+				color var(--text)
 
 	> header
 		display flex
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
index 0b6a13beaf..445bf7e365 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.sub.vue
@@ -29,7 +29,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.fnlfosztlhtptnongximhlbykxblytcq
 	display flex
 	padding 16px
 	font-size 10px
@@ -68,10 +68,4 @@ root(isDark)
 					max-height 120px
 					font-size 80%
 
-.fnlfosztlhtptnongximhlbykxblytcq[data-darkmode]
-	root(true)
-
-.fnlfosztlhtptnongximhlbykxblytcq:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.notification.vue b/src/client/app/desktop/views/pages/deck/deck.notification.vue
index b318579b3e..149bd10293 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notification.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notification.vue
@@ -109,7 +109,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.dsfykdcjpuwfvpefwufddclpjhzktmpw
 	> .notification
 		padding 16px
 		font-size 13px
@@ -170,10 +170,4 @@ root(isDark)
 			> div > header i
 				color #888
 
-.dsfykdcjpuwfvpefwufddclpjhzktmpw[data-darkmode]
-	root(true)
-
-.dsfykdcjpuwfvpefwufddclpjhzktmpw:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index aa48571a5b..1417cc3ee8 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -155,8 +155,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
-
+.oxynyeqmfvracxnglgulyqfgqxnxmehl
 	.transition
 		.mk-notifications-enter
 		.mk-notifications-leave-to
@@ -221,10 +220,4 @@ root(isDark)
 		> [data-fa]
 			margin-right 4px
 
-.oxynyeqmfvracxnglgulyqfgqxnxmehl[data-darkmode]
-	root(true)
-
-.oxynyeqmfvracxnglgulyqfgqxnxmehl:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index b90d0a831e..cf05006c00 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -36,7 +36,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.vahgrswmbzfdlmomxnqftuueyvwaafth
 	background var(--face)
 	box-shadow var(--shadow)
 	border-radius var(--round)
@@ -77,10 +77,4 @@ root(isDark)
 		> i
 			margin-right 4px
 
-.vahgrswmbzfdlmomxnqftuueyvwaafth[data-darkmode]
-	root(true)
-
-.vahgrswmbzfdlmomxnqftuueyvwaafth:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/desktop/views/widgets/trends.vue b/src/client/app/desktop/views/widgets/trends.vue
index aeaab63ac4..a886796132 100644
--- a/src/client/app/desktop/views/widgets/trends.vue
+++ b/src/client/app/desktop/views/widgets/trends.vue
@@ -67,7 +67,7 @@ export default define({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.mkw-trends
 	.mkw-trends--body
 		> .note
 			padding 16px
@@ -98,10 +98,4 @@ root(isDark)
 			> [data-fa]
 				margin-right 4px
 
-.mkw-trends[data-darkmode]
-	root(true)
-
-.mkw-trends:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/note-preview.vue b/src/client/app/mobile/views/components/note-preview.vue
index 1c73779251..525f54998e 100644
--- a/src/client/app/mobile/views/components/note-preview.vue
+++ b/src/client/app/mobile/views/components/note-preview.vue
@@ -36,7 +36,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.yohlumlkhizgfkvvscwfcrcggkotpvry
 	display flex
 	margin 0
 	padding 0
@@ -100,10 +100,4 @@ root(isDark)
 					padding 0
 					color var(--subNoteText)
 
-.yohlumlkhizgfkvvscwfcrcggkotpvry[data-darkmode]
-	root(true)
-
-.yohlumlkhizgfkvvscwfcrcggkotpvry:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 9153b1d551..8f0a1ef196 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -217,9 +217,7 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
-root(isDark)
+.mk-notes
 	overflow hidden
 	background var(--face)
 	border-radius 8px
@@ -293,10 +291,4 @@ root(isDark)
 			&:disabled
 				opacity 0.7
 
-.mk-notes[data-darkmode]
-	root(true)
-
-.mk-notes:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 4e24f70ffc..32f74bfe3a 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -122,9 +122,8 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(isDark)
+.wgwfgvvimdjvhjfwxropcwksnzftjqes
 	text-align center
-	//background #fff
 
 	> .banner
 		position absolute
@@ -317,10 +316,4 @@ root(isDark)
 				margin 16px 0 0 0
 				opacity 0.7
 
-.wgwfgvvimdjvhjfwxropcwksnzftjqes[data-darkmode]
-	root(true)
-
-.wgwfgvvimdjvhjfwxropcwksnzftjqes:not([data-darkmode])
-	root(false)
-
 </style>
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 29d4fc2e5d..72aedbce99 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -62,6 +62,7 @@
 	"dateDividerFg": ":alpha<0.7<$text",
 
 	"switchTrack": "rgba(255, 255, 255, 0.15)",
+	"radioBorder": "rgba(255, 255, 255, 0.6)",
 	"inputBorder": "rgba(255, 255, 255, 0.7)",
 	"inputLabel": "rgba(255, 255, 255, 0.7)",
 	"inputText": "#fff",
@@ -80,6 +81,9 @@
 
 	"pollEditorInputBg": "rgba(0, 0, 0, 0.25)",
 
+	"pollChoiceText": "#fff",
+	"pollChoiceBorder": "rgba(255, 255, 255, 0.1)",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
 	"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
 	"urlPreviewTitle": "$text",
@@ -90,12 +94,17 @@
 	"calendarSaturdayOrSunday": "#ff6679",
 	"calendarDay": "#c5ced6",
 
+	"materBg": "rgba(0, 0, 0, 0.3)",
+
 	"chartCaption": ":alpha<0.6<$text",
 
 	"announcementsBg": "#253a50",
 	"announcementsTitle": "#539eff",
 	"announcementsText": "#fff",
 
+	"donationBg": "#5d5242",
+	"donationFg": "#e4dbce",
+
 	"googleSearchBg": "rgba(0, 0, 0, 0.2)",
 	"googleSearchFg": "#dee4e8",
 	"googleSearchBorder": "rgba(255, 255, 255, 0.2)",
@@ -119,6 +128,11 @@
 	"messagingRoomMessageBg": "$secondary",
 	"messagingRoomMessageFg": "#fff",
 
+	"formButtonBorder": "rgba(255, 255, 255, 0.1)",
+	"formButtonHoverBg": ":alpha<0.2<$primary",
+	"formButtonHoverBorder": ":alpha<0.5<$primary",
+	"formButtonActiveBg": ":alpha<0.12<$primary",
+
 	"desktopHeaderBg": ":lighten<5<$secondary",
 	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#fff",
@@ -140,6 +154,7 @@
 	"desktopTimelineSrc": "@faceTextButton",
 	"desktopTimelineSrcHover": "@faceTextButtonHover",
 	"desktopWindowTitle": "@faceHeaderText",
+	"desktopWindowShadow": "rgba(0, 0, 0, 0.5)",
 	"desktopDriveBg": "@bg",
 	"desktopDriveFolderBg": ":alpha<0.2<$primary",
 	"desktopDriveFolderHoverBg": ":alpha<0.3<$primary",
@@ -169,5 +184,18 @@
 	"mobileSignedInAsBg": "#273c34",
 	"mobileSignedInAsFg": "#49ab63",
 	"mobileSignoutBg": "#652222",
-	"mobileSignoutFg": "#ff5f56"
+	"mobileSignoutFg": "#ff5f56",
+
+	"reversiBannerGradientStart": "#45730e",
+	"reversiBannerGradientEnd": "#464300",
+	"reversiDescBg": "rgba(255, 255, 255, 0.1)",
+	"reversiListItemShadow": "rgba(0, 0, 0, 0.7)",
+	"reversiMapSelectBorder": "rgba(255, 255, 255, 0.1)",
+	"reversiMapSelectHoverBorder": "rgba(255, 255, 255, 0.2)",
+	"reversiRoomFormShadow": "rgba(0, 0, 0, 0.7)",
+	"reversiRoomFooterBg": ":alpha<0.9<$secondary",
+	"reversiGameHeaderLine": ":alpha<0.5<$secondary",
+	"reversiGameEmptyCell": ":lighten<2<$secondary",
+	"reversiGameEmptyCellMyTurn": ":lighten<5<$secondary",
+	"reversiGameEmptyCellCanPut": ":lighten<4<$secondary"
 }
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index e4116480e2..4690054cbf 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -62,6 +62,7 @@
 	"dateDividerFg": ":alpha<0.7<$text",
 
 	"switchTrack": "rgba(0, 0, 0, 0.25)",
+	"radioBorder": "rgba(0, 0, 0, 0.4)",
 	"inputBorder": "rgba(0, 0, 0, 0.42)",
 	"inputLabel": "rgba(0, 0, 0, 0.54)",
 	"inputText": "#000",
@@ -80,6 +81,9 @@
 
 	"pollEditorInputBg": "#fff",
 
+	"pollChoiceText": "#000",
+	"pollChoiceBorder": "rgba(0, 0, 0, 0.1)",
+
 	"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
 	"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
 	"urlPreviewTitle": "$text",
@@ -90,12 +94,17 @@
 	"calendarSaturdayOrSunday": "#ef95a0",
 	"calendarDay": "#777",
 
+	"materBg": "rgba(0, 0, 0, 0.1)",
+
 	"chartCaption": ":alpha<0.6<$text",
 
 	"announcementsBg": "#f3f9ff",
 	"announcementsTitle": "#4078c0",
 	"announcementsText": "#57616f",
 
+	"donationBg": "#fbead4",
+	"donationFg": "#777d71",
+
 	"googleSearchBg": "#fff",
 	"googleSearchFg": "#55595c",
 	"googleSearchBorder": "rgba(0, 0, 0, 0.2)",
@@ -119,6 +128,11 @@
 	"messagingRoomMessageBg": "#eee",
 	"messagingRoomMessageFg": "#333",
 
+	"formButtonBorder": "rgba(0, 0, 0, 0.1)",
+	"formButtonHoverBg": ":alpha<0.12<$primary",
+	"formButtonHoverBorder": ":alpha<0.3<$primary",
+	"formButtonActiveBg": ":alpha<0.12<$primary",
+
 	"desktopHeaderBg": ":lighten<5<$secondary",
 	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#7b8c88",
@@ -140,6 +154,7 @@
 	"desktopTimelineSrc": "#6f7477",
 	"desktopTimelineSrcHover": "#525a5f",
 	"desktopWindowTitle": "#666",
+	"desktopWindowShadow": "rgba(0, 0, 0, 0.2)",
 	"desktopDriveBg": "#fff",
 	"desktopDriveFolderBg": ":lighten<31<$primary",
 	"desktopDriveFolderHoverBg": ":lighten<27<$primary",
@@ -169,5 +184,18 @@
 	"mobileSignedInAsBg": "#fcfff5",
 	"mobileSignedInAsFg": "#2c662d",
 	"mobileSignoutBg": "#fff6f5",
-	"mobileSignoutFg": "#cc2727"
+	"mobileSignoutFg": "#cc2727",
+
+	"reversiBannerGradientStart": "#8bca3e",
+	"reversiBannerGradientEnd": "#d6cf31",
+	"reversiDescBg": "rgba(0, 0, 0, 0.1)",
+	"reversiListItemShadow": "rgba(0, 0, 0, 0.15)",
+	"reversiMapSelectBorder": "rgba(0, 0, 0, 0.1)",
+	"reversiMapSelectHoverBorder": "rgba(0, 0, 0, 0.2)",
+	"reversiRoomFormShadow": "rgba(0, 0, 0, 0.1)",
+	"reversiRoomFooterBg": ":alpha<0.9<$secondary",
+	"reversiGameHeaderLine": "#c4cdd4",
+	"reversiGameEmptyCell": "rgba(0, 0, 0, 0.06)",
+	"reversiGameEmptyCellMyTurn": "rgba(0, 0, 0, 0.12)",
+	"reversiGameEmptyCellCanPut": "rgba(0, 0, 0, 0.9)"
 }

From ec652dd0ace7ccf57d4d32d8855192748cbbb0b3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 20:03:14 +0900
Subject: [PATCH 438/539] wip

---
 .../app/desktop/assets/header-icon.light.svg  | 150 ------------------
 .../{header-icon.dark.svg => header-icon.svg} |   8 +-
 .../desktop/views/components/ui.header.vue    |  11 +-
 src/client/theme/dark.json                    |   1 -
 src/client/theme/light.json                   |   1 -
 5 files changed, 10 insertions(+), 161 deletions(-)
 delete mode 100644 src/client/app/desktop/assets/header-icon.light.svg
 rename src/client/app/desktop/assets/{header-icon.dark.svg => header-icon.svg} (94%)

diff --git a/src/client/app/desktop/assets/header-icon.light.svg b/src/client/app/desktop/assets/header-icon.light.svg
deleted file mode 100644
index 61e2026243..0000000000
--- a/src/client/app/desktop/assets/header-icon.light.svg
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="512"
-   height="512"
-   viewBox="0 0 135.46667 135.46667"
-   version="1.1"
-   id="svg8"
-   inkscape:version="0.92.1 r15371"
-   sodipodi:docname="header-icon.light.svg"
-   inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\32.png"
-   inkscape:export-xdpi="6"
-   inkscape:export-ydpi="6">
-  <defs
-     id="defs2">
-    <inkscape:path-effect
-       effect="simplify"
-       id="path-effect5115"
-       is_visible="true"
-       steps="1"
-       threshold="0.000408163"
-       smooth_angles="360"
-       helper_size="0"
-       simplify_individual_paths="false"
-       simplify_just_coalesce="false"
-       simplifyindividualpaths="false"
-       simplifyJustCoalesce="false" />
-    <inkscape:path-effect
-       effect="simplify"
-       id="path-effect5111"
-       is_visible="true"
-       steps="1"
-       threshold="0.000408163"
-       smooth_angles="360"
-       helper_size="0"
-       simplify_individual_paths="false"
-       simplify_just_coalesce="false"
-       simplifyindividualpaths="false"
-       simplifyJustCoalesce="false" />
-    <inkscape:path-effect
-       effect="simplify"
-       id="path-effect5104"
-       is_visible="true"
-       steps="1"
-       threshold="0.000408163"
-       smooth_angles="360"
-       helper_size="0"
-       simplify_individual_paths="false"
-       simplify_just_coalesce="false"
-       simplifyindividualpaths="false"
-       simplifyJustCoalesce="false" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.4142136"
-     inkscape:cx="114.309"
-     inkscape:cy="251.50613"
-     inkscape:document-units="px"
-     inkscape:current-layer="g4502"
-     showgrid="true"
-     units="px"
-     inkscape:snap-bbox="true"
-     inkscape:bbox-nodes="true"
-     inkscape:snap-bbox-edge-midpoints="false"
-     inkscape:snap-smooth-nodes="true"
-     inkscape:snap-center="true"
-     inkscape:snap-page="true"
-     inkscape:window-width="1920"
-     inkscape:window-height="1027"
-     inkscape:window-x="-8"
-     inkscape:window-y="1072"
-     inkscape:window-maximized="1"
-     inkscape:snap-object-midpoints="true"
-     inkscape:snap-midpoints="true"
-     inkscape:object-paths="true"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     objecttolerance="1"
-     guidetolerance="1"
-     inkscape:snap-nodes="false"
-     inkscape:snap-others="false">
-    <inkscape:grid
-       type="xygrid"
-       id="grid4504"
-       spacingx="4.2333334"
-       spacingy="4.2333334"
-       empcolor="#ff3fff"
-       empopacity="0.25098039"
-       empspacing="4" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="レイヤー 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-30.809093,-111.78601)">
-    <g
-       id="g4502"
-       transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
-      <g
-         style="fill:#000000;fill-opacity:1"
-         transform="translate(-1.3333333e-6,-1.3439941e-6)"
-         id="g5125">
-        <g
-           transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
-           id="text4489"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           aria-label="Mi">
-          <path
-             sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
-             inkscape:connector-curvature="0"
-             id="path5210"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:0.28950602px"
-             d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
-          <path
-             inkscape:connector-curvature="0"
-             id="path5212"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:0.28950602px"
-             d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/src/client/app/desktop/assets/header-icon.dark.svg b/src/client/app/desktop/assets/header-icon.svg
similarity index 94%
rename from src/client/app/desktop/assets/header-icon.dark.svg
rename to src/client/app/desktop/assets/header-icon.svg
index fa42856fa5..d677d2d163 100644
--- a/src/client/app/desktop/assets/header-icon.dark.svg
+++ b/src/client/app/desktop/assets/header-icon.svg
@@ -124,24 +124,24 @@
        id="g4502"
        transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
       <g
-         style="fill:#ffffff;fill-opacity:1"
+         style="fill-opacity:1"
          transform="translate(-1.3333333e-6,-1.3439941e-6)"
          id="g5125">
         <g
            transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
            id="text4489"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
            aria-label="Mi">
           <path
              sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
              inkscape:connector-curvature="0"
              id="path5210"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill-opacity:1;stroke-width:0.28950602px"
              d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
           <path
              inkscape:connector-curvature="0"
              id="path5212"
-             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill-opacity:1;stroke-width:0.28950602px"
              d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
         </g>
       </g>
diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index 1b96e06486..d38aebec8b 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -10,7 +10,9 @@
 					<x-nav/>
 				</div>
 				<div class="center">
-					<div class="icon" @click="goToTop"></div>
+					<div class="icon" @click="goToTop">
+						<img svg-inline src="../../assets/header-icon.svg"/>
+					</div>
 				</div>
 				<div class="right">
 					<x-search/>
@@ -129,13 +131,12 @@ export default Vue.extend({
 						display block
 						width 48px
 						height 48px
-						background-image var(--desktopHeaderIcon)
-						background-size 24px
-						background-position center
-						background-repeat no-repeat
 						opacity 0.3
 						cursor pointer
 
+						> svg
+							fill currentColor
+
 				> .left,
 				> .center
 					left 0
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 72aedbce99..c43de3024e 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -136,7 +136,6 @@
 	"desktopHeaderBg": ":lighten<5<$secondary",
 	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#fff",
-	"desktopHeaderIcon": "url('/assets/desktop/header-icon.dark.svg')",
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
 	"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
 	"desktopHeaderSearchFg": "#fff",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 4690054cbf..2e4f4b8cc9 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -136,7 +136,6 @@
 	"desktopHeaderBg": ":lighten<5<$secondary",
 	"desktopHeaderFg": "$text",
 	"desktopHeaderHoverFg": "#7b8c88",
-	"desktopHeaderIcon": "url('/assets/desktop/header-icon.light.svg')",
 	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
 	"desktopHeaderSearchHoverBg": "rgba(0, 0, 0, 0.08)",
 	"desktopHeaderSearchFg": "#000",

From 8317a219a54f5ea85daa500f891ff480a0156f5b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 20:11:11 +0900
Subject: [PATCH 439/539] wip

---
 src/client/app/desktop/views/components/ui.header.vue | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/components/ui.header.vue b/src/client/app/desktop/views/components/ui.header.vue
index d38aebec8b..4cfcda0f1a 100644
--- a/src/client/app/desktop/views/components/ui.header.vue
+++ b/src/client/app/desktop/views/components/ui.header.vue
@@ -130,12 +130,15 @@ export default Vue.extend({
 						margin auto
 						display block
 						width 48px
-						height 48px
-						opacity 0.3
+						text-align center
 						cursor pointer
+						opacity 0.5
 
 						> svg
-							fill currentColor
+							width 24px
+							height 48px
+							vertical-align top
+							fill var(--desktopHeaderFg)
 
 				> .left,
 				> .center

From 0c63ec8157f0c54d780faf69aad63f4bcd7fd683 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 20:39:32 +0900
Subject: [PATCH 440/539] wip

---
 .../app/common/views/components/ui/button.vue |  82 ++++----
 .../app/common/views/widgets/broadcast.vue    |   1 -
 src/client/app/desktop/style.styl             |   2 -
 src/client/app/desktop/ui.styl                | 179 ------------------
 .../desktop/views/components/post-form.vue    |  10 +-
 .../desktop/views/components/renote-form.vue  |   6 +-
 .../app/desktop/views/widgets/profile.vue     |   1 -
 src/client/app/init.css                       |   6 +-
 src/client/theme/dark.json                    |   4 +
 src/client/theme/light.json                   |   4 +
 10 files changed, 66 insertions(+), 229 deletions(-)
 delete mode 100644 src/client/app/desktop/ui.styl

diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index 4934a1bdfa..a165d100a4 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -1,9 +1,7 @@
 <template>
-<div class="ui-button" :class="[styl]">
-	<button :type="type" @click="$emit('click')">
-		<slot></slot>
-	</button>
-</div>
+<button class="dmtdnykelhudezerjlfpbhgovrgnqqgr" :class="[styl, { inline, primary }]" :type="type" @click="$emit('click')">
+	<slot></slot>
+</button>
 </template>
 
 <script lang="ts">
@@ -13,6 +11,16 @@ export default Vue.extend({
 		type: {
 			type: String,
 			required: false
+		},
+		primary: {
+			type: Boolean,
+			required: false,
+			default: false
+		},
+		inline: {
+			type: Boolean,
+			required: false,
+			default: false
 		}
 	},
 	data() {
@@ -32,21 +40,36 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-root(fill)
-	> button
-		display block
-		width 100%
-		margin 0
-		padding 0
-		font-weight bold
-		font-size 16px
-		line-height 44px
-		border none
-		border-radius 6px
-		outline none
-		box-shadow none
+.dmtdnykelhudezerjlfpbhgovrgnqqgr
+	display block
+	width 100%
+	margin 0
+	padding 0
+	font-weight normal
+	font-size 16px
+	border none
+	border-radius 6px
+	outline none
+	box-shadow none
 
-		if fill
+	&.inline
+		display inline-block
+		width auto
+
+	&.primary
+		font-weight bold
+
+	&.fill
+		color var(--text)
+		background var(--buttonBg)
+
+		&:hover
+			background var(--buttonHoverBg)
+
+		&:active
+			background var(--buttonActiveBg)
+
+		&.primary
 			color var(--primaryForeground)
 			background var(--primary)
 
@@ -55,20 +78,15 @@ root(fill)
 
 			&:active
 				background var(--primaryDarken5)
-		else
-			color var(--primary)
-			background none
 
-			&:hover
-				color var(--primaryDarken5)
-
-			&:active
-				background var(--primaryAlpha03)
-
-.ui-button
-	&.fill
-		root(true)
 	&:not(.fill)
-		root(false)
+		color var(--primary)
+		background none
+
+		&:hover
+			color var(--primaryDarken5)
+
+		&:active
+			background var(--primaryAlpha03)
 
 </style>
diff --git a/src/client/app/common/views/widgets/broadcast.vue b/src/client/app/common/views/widgets/broadcast.vue
index 65e37bfc69..620b09ff0e 100644
--- a/src/client/app/common/views/widgets/broadcast.vue
+++ b/src/client/app/common/views/widgets/broadcast.vue
@@ -5,7 +5,6 @@
 			:data-found="announcements && announcements.length != 0"
 			:data-melt="props.design == 1"
 			:data-mobile="platform == 'mobile'"
-			:data-darkmode="$store.state.device.darkmode"
 		>
 			<div class="icon">
 				<svg height="32" version="1.1" viewBox="0 0 32 32" width="32">
diff --git a/src/client/app/desktop/style.styl b/src/client/app/desktop/style.styl
index 626671fd25..96481a9808 100644
--- a/src/client/app/desktop/style.styl
+++ b/src/client/app/desktop/style.styl
@@ -1,8 +1,6 @@
 @import "../app"
 @import "../reset"
 
-@import "./ui"
-
 *::input-placeholder
 	color #D8CBC5
 
diff --git a/src/client/app/desktop/ui.styl b/src/client/app/desktop/ui.styl
deleted file mode 100644
index 3ab5d79c5d..0000000000
--- a/src/client/app/desktop/ui.styl
+++ /dev/null
@@ -1,179 +0,0 @@
-button
-	font-family sans-serif
-
-	*
-		pointer-events none
-
-button.ui
-.button.ui
-	display inline-block
-	cursor pointer
-	padding 0 14px
-	margin 0
-	min-width 100px
-	line-height 38px
-	font-size 14px
-	color #888
-	text-decoration none
-	background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
-	border solid 1px #e2e2e2
-	border-radius 4px
-	outline none
-
-	&.block
-		display block
-
-	&:focus
-		&:after
-			content ""
-			pointer-events none
-			position absolute
-			top -5px
-			right -5px
-			bottom -5px
-			left -5px
-			border 2px solid var(--primaryAlpha03)
-			border-radius 8px
-
-	&:disabled
-		opacity 0.7
-		cursor default
-
-	&:hover
-		background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
-		border-color #dcdcdc
-
-	&:active
-		background #ececec
-		border-color #dcdcdc
-
-	&.primary
-		color var(--primaryForeground)
-		//background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
-		border solid 1px var(--primaryLighten15)
-
-		&:not(:disabled)
-			font-weight bold
-
-		&:hover:not(:disabled)
-			//background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
-			border-color var(--primary)
-
-		&:active:not(:disabled)
-			background var(--primary)
-			border-color var(--primary)
-
-input:not([type]).ui
-input[type='text'].ui
-input[type='password'].ui
-input[type='email'].ui
-input[type='date'].ui
-input[type='number'].ui
-textarea.ui
-	display block
-	padding 10px
-	width 100%
-	height 40px
-	font-family sans-serif
-	font-size 16px
-	color #55595c
-	border solid 1px #dadada
-	border-radius 4px
-
-	&:hover
-		border-color #b0b0b0
-
-	&:focus
-		border-color var(--primary)
-
-textarea.ui
-	min-width 100%
-	max-width 100%
-	min-height 64px
-
-.ui.info
-	display block
-	margin 1em 0
-	padding 0 1em
-	font-size 90%
-	color rgba(#000, 0.87)
-	background #f8f8f9
-	border solid 1px rgba(34, 36, 38, 0.22)
-	border-radius 4px
-
-	> p
-		opacity 0.8
-
-		> [data-fa]:first-child
-			margin-right 0.25em
-
-	&.warn
-		color #573a08
-		background #FFFAF3
-		border-color #C9BA9B
-
-.ui.from.group
-	display block
-	margin 16px 0
-
-	> p:first-child
-		margin 0 0 6px 0
-		font-size 90%
-		font-weight bold
-		color rgba(#373a3c, 0.9)
-
-html[data-darkmode]
-	button.ui
-	.button.ui
-		color #fff
-		background linear-gradient(to bottom, #313543 0%, #282c37 100%)
-		border-color #1c2023
-
-		&:hover
-			background linear-gradient(to bottom, #2c2f3c 0%, #22262f 100%)
-			border-color #151a1d
-
-		&:active
-			background #22262f
-			border-color #151a1d
-
-		&.primary
-			color var(--primaryForeground)
-			//background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
-			border solid 1px var(--primaryLighten15)
-
-			&:hover:not(:disabled)
-				//background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
-				border-color var(--primary)
-
-			&:active:not(:disabled)
-				background var(--primary)
-				border-color var(--primary)
-
-	input:not([type]).ui
-	input[type='text'].ui
-	input[type='password'].ui
-	input[type='email'].ui
-	input[type='date'].ui
-	input[type='number'].ui
-	textarea.ui
-		display block
-		padding 10px
-		width 100%
-		height 40px
-		font-family sans-serif
-		font-size 16px
-		color #dee4e8
-		background #191b22
-		border solid 1px #495156
-		border-radius 4px
-
-		&:hover
-			border-color #b0b0b0
-
-		&:focus
-			border-color var(--primary)
-
-	.ui.from.group
-		> p:first-child
-			color #c0c7cc
diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index b2a6fed8e8..6cb73ebc43 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -599,21 +599,19 @@ export default Vue.extend({
 		height 40px
 		font-size 1em
 		color var(--primaryForeground)
-		background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
+		background var(--primary)
 		outline none
-		border solid 1px var(--primaryLighten15)
+		border none
 		border-radius 4px
 
 		&:not(:disabled)
 			font-weight bold
 
 		&:hover:not(:disabled)
-			background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
-			border-color var(--primary)
+			background var(--primaryLighten5)
 
 		&:active:not(:disabled)
-			background var(--primary)
-			border-color var(--primary)
+			background var(--primaryDarken5)
 
 		&:focus
 			&:after
diff --git a/src/client/app/desktop/views/components/renote-form.vue b/src/client/app/desktop/views/components/renote-form.vue
index 6717ced3b1..68d485bada 100644
--- a/src/client/app/desktop/views/components/renote-form.vue
+++ b/src/client/app/desktop/views/components/renote-form.vue
@@ -4,8 +4,8 @@
 	<template v-if="!quote">
 		<footer>
 			<a class="quote" v-if="!quote" @click="onQuote">%i18n:@quote%</a>
-			<button class="ui cancel" @click="cancel">%i18n:@cancel%</button>
-			<button class="ui primary ok" @click="ok" :disabled="wait">{{ wait ? '%i18n:@reposting%' : '%i18n:@renote%' }}</button>
+			<ui-button class="button cancel" inline @click="cancel">%i18n:@cancel%</ui-button>
+			<ui-button class="button ok" inline primary @click="ok" :disabled="wait">{{ wait ? '%i18n:@reposting%' : '%i18n:@renote%' }}</ui-button>
 		</footer>
 	</template>
 	<template v-if="quote">
@@ -71,7 +71,7 @@ export default Vue.extend({
 			left 28px
 			line-height 40px
 
-		button
+		> .button
 			display block
 			position absolute
 			bottom 16px
diff --git a/src/client/app/desktop/views/widgets/profile.vue b/src/client/app/desktop/views/widgets/profile.vue
index fa35138c31..91354324ce 100644
--- a/src/client/app/desktop/views/widgets/profile.vue
+++ b/src/client/app/desktop/views/widgets/profile.vue
@@ -4,7 +4,6 @@
 		<div class="egwyvoaaryotefqhqtmiyawwefemjfsd-body"
 			:data-compact="props.design == 1 || props.design == 2"
 			:data-melt="props.design == 2"
-			:data-darkmode="$store.state.device.darkmode"
 		>
 			<div class="banner"
 				:style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl})` : ''"
diff --git a/src/client/app/init.css b/src/client/app/init.css
index 6ee25d64e2..92bb1d8cf4 100644
--- a/src/client/app/init.css
+++ b/src/client/app/init.css
@@ -32,7 +32,7 @@ body > noscript {
 	left: 0;
 	width: 100%;
 	height: 100%;
-	background: #fff;
+	background: var(--bg);
 	cursor: wait;
 }
 	#ini > svg {
@@ -47,10 +47,6 @@ body > noscript {
 		animation: ini 0.6s infinite linear;
 	}
 
-html[data-darkmode] #ini {
-	background: #191b22;
-}
-
 @keyframes ini {
 	from {
 		transform: rotate(0deg);
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index c43de3024e..015225ddab 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -67,6 +67,10 @@
 	"inputLabel": "rgba(255, 255, 255, 0.7)",
 	"inputText": "#fff",
 
+	"buttonBg": "rgba(255, 255, 255, 0.05)",
+	"buttonHoverBg": "rgba(255, 255, 255, 0.1)",
+	"buttonActiveBg": "rgba(255, 255, 255, 0.15)",
+
 	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
 	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
 	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 2e4f4b8cc9..3d131f066a 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -67,6 +67,10 @@
 	"inputLabel": "rgba(0, 0, 0, 0.54)",
 	"inputText": "#000",
 
+	"buttonBg": "rgba(0, 0, 0, 0.05)",
+	"buttonHoverBg": "rgba(0, 0, 0, 0.1)",
+	"buttonActiveBg": "rgba(0, 0, 0, 0.15)",
+
 	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
 	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
 	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",

From d5818214f3237d4f9445446b8a38b8e9d41cac4a Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Fri, 28 Sep 2018 20:54:14 +0900
Subject: [PATCH 441/539] Fix 'URL is not defined' in MFM (#2782)

---
 src/mfm/html-to-mfm.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mfm/html-to-mfm.ts b/src/mfm/html-to-mfm.ts
index 6da1dbdad3..aa887c5560 100644
--- a/src/mfm/html-to-mfm.ts
+++ b/src/mfm/html-to-mfm.ts
@@ -1,4 +1,5 @@
 const parse5 = require('parse5');
+import { URL } from 'url';
 
 export default function(html: string): string {
 	if (html == null) return null;

From 1fa4d0d3f8552c9e82f763f8a086cb916d0e9250 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 28 Sep 2018 21:48:53 +0900
Subject: [PATCH 442/539] wip

---
 locales/ja-JP.yml                             |  1 -
 .../components/games/reversi/reversi.room.vue |  2 +-
 .../app/common/views/components/ui/switch.vue |  2 +-
 .../app/desktop/views/components/settings.vue | 60 ++++++++++---------
 4 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index f5d0a180d8..0f83ba8419 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -792,7 +792,6 @@ desktop/views/components/settings.vue:
   show-renoted-my-notes: "自分の投稿のRenoteをタイムラインに表示する"
   show-local-renotes: "ローカルの投稿のRenoteをタイムラインに表示する"
   show-maps: "マップの自動展開"
-  show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
 
   sound: "サウンド"
   enable-sounds: "サウンドを有効にする"
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index 236141ee28..9f0d9c23fb 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -60,7 +60,7 @@
 
 			<div>
 				<template v-for="item in form">
-					<mk-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</mk-switch>
+					<ui-switch v-if="item.type == 'switch'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm(item)">{{ item.desc || '' }}</ui-switch>
 
 					<div class="card" v-if="item.type == 'radio'" :key="item.id">
 						<header>
diff --git a/src/client/app/common/views/components/ui/switch.vue b/src/client/app/common/views/components/ui/switch.vue
index 2ee787cb76..935f219833 100644
--- a/src/client/app/common/views/components/ui/switch.vue
+++ b/src/client/app/common/views/components/ui/switch.vue
@@ -19,7 +19,7 @@
 	<span class="label">
 		<span :aria-hidden="!checked"><slot></slot></span>
 		<p :aria-hidden="!checked">
-			<slot name="text"></slot>
+			<slot name="desc"></slot>
 		</p>
 	</span>
 </div>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 4d839f1dc9..c7d82590ea 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -21,12 +21,14 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@behaviour%</h1>
-			<mk-switch v-model="fetchOnScroll" text="%i18n:@fetch-on-scroll%">
-				<span>%i18n:@fetch-on-scroll-desc%</span>
-			</mk-switch>
-			<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
-				<span>%i18n:@auto-popout-desc%</span>
-			</mk-switch>
+			<ui-switch v-model="fetchOnScroll">
+				%i18n:@fetch-on-scroll%
+				<span slot="desc">%i18n:@fetch-on-scroll-desc%</span>
+			</ui-switch>
+			<ui-switch v-model="autoPopout">
+				%i18n:@auto-popout%
+				<span slot="desc">%i18n:@auto-popout-desc%</span>
+			</ui-switch>
 
 			<section>
 				<header>%i18n:@note-visibility%</header>
@@ -45,9 +47,10 @@
 
 			<details>
 				<summary>%i18n:@advanced%</summary>
-				<mk-switch v-model="apiViaStream" text="%i18n:@api-via-stream%">
-					<span>%i18n:@api-via-stream-desc%</span>
-				</mk-switch>
+				<ui-switch v-model="apiViaStream">
+					%i18n:@api-via-stream%
+					<span slot="desc">%i18n:@api-via-stream-desc%</span>
+				</ui-switch>
 			</details>
 		</section>
 
@@ -76,9 +79,7 @@
 			<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
 			<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
 			<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
-			<mk-switch v-model="showMaps" text="%i18n:@show-maps%">
-				<span>%i18n:@show-maps-desc%</span>
-			</mk-switch>
+			<ui-switch v-model="showMaps">%i18n:@show-maps%</ui-switch>
 			<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
 			<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
 			<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
@@ -86,9 +87,10 @@
 
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@sound%</h1>
-			<mk-switch v-model="enableSounds" text="%i18n:@enable-sounds%">
-				<span>%i18n:@enable-sounds-desc%</span>
-			</mk-switch>
+			<ui-switch v-model="enableSounds">
+				%i18n:@enable-sounds%
+				<span slot="desc">%i18n:@enable-sounds-desc%</span>
+			</ui-switch>
 			<label>%i18n:@volume%</label>
 			<input type="range"
 				v-model="soundVolume"
@@ -130,9 +132,10 @@
 
 		<section class="notification" v-show="page == 'notification'">
 			<h1>%i18n:@notification%</h1>
-			<mk-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch" text="%i18n:@auto-watch%">
-				<span>%i18n:@auto-watch-desc%</span>
-			</mk-switch>
+			<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
+				%i18n:@auto-watch%
+				<span slot="desc">%i18n:@auto-watch-desc%</span>
+			</ui-switch>
 		</section>
 
 		<section class="drive" v-show="page == 'drive'">
@@ -200,20 +203,23 @@
 			</button>
 			<details>
 				<summary>%i18n:@update-settings%</summary>
-				<mk-switch v-model="preventUpdate" text="%i18n:@prevent-update%">
-					<span>%i18n:@prevent-update-desc%</span>
-				</mk-switch>
+				<ui-switch v-model="preventUpdate">
+					%i18n:@prevent-update%
+					<span slot="desc">%i18n:@prevent-update-desc%</span>
+				</ui-switch>
 			</details>
 		</section>
 
 		<section class="other" v-show="page == 'other'">
 			<h1>%i18n:@advanced-settings%</h1>
-			<mk-switch v-model="debug" text="%i18n:@debug-mode%">
-				<span>%i18n:@debug-mode-desc%</span>
-			</mk-switch>
-			<mk-switch v-model="enableExperimentalFeatures" text="%i18n:@experimental%">
-				<span>%i18n:@experimental-desc%</span>
-			</mk-switch>
+			<ui-switch v-model="debug">
+				%i18n:@debug-mode%
+				<span slot="desc">%i18n:@debug-mode-desc%</span>
+			</ui-switch>
+			<ui-switch v-model="enableExperimentalFeatures">
+				%i18n:@experimental%
+				<span slot="desc">%i18n:@experimental-desc%</span>
+			</ui-switch>
 		</section>
 	</div>
 </div>

From 6a82e94c5489d4879cbbf86091cd15c7d144f284 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:01:11 +0900
Subject: [PATCH 443/539] wip

---
 locales/ja-JP.yml                             |  24 +++
 package.json                                  |   1 +
 src/client/app/app.vue                        |  12 +-
 .../app/common/views/components/avatar.vue    |   4 +-
 .../app/common/views/components/index.ts      |   2 +
 .../app/common/views/components/theme.vue     | 179 ++++++++++++++++++
 .../app/common/views/components/ui/button.vue |  12 +-
 .../app/desktop/views/components/settings.vue |   5 +
 src/client/app/init.ts                        |  35 +++-
 .../app/mobile/views/pages/settings.vue       |   7 +
 src/client/app/store.ts                       |   3 +
 src/client/app/{common/scripts => }/theme.ts  |  27 ++-
 src/client/theme/dark.json                    |   2 +-
 src/client/theme/halloween.json               |   3 +-
 src/client/theme/light.json                   |   2 +-
 15 files changed, 287 insertions(+), 31 deletions(-)
 create mode 100644 src/client/app/common/views/components/theme.vue
 rename src/client/app/{common/scripts => }/theme.ts (74%)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 0f83ba8419..46dea949d2 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -285,6 +285,28 @@ common/views/components/media-banner.vue:
   sensitive: "閲覧注意"
   click-to-show: "クリックして表示"
 
+common/views/components/theme.vue:
+  light-theme: "非ダークモード時に使用するテーマ"
+  dark-theme: "ダークモード時に使用するテーマ"
+  install-a-theme: "テーマのインストール"
+  theme-code: "テーマコード"
+  install: "インストール"
+  create-a-theme: "テーマの作成"
+  save-created-theme: "テーマを保存"
+  primary-color: "プライマリ カラー"
+  secondary-color: "セカンダリ カラー"
+  text-color: "文字色"
+  base-theme: "ベーステーマ"
+  base-theme-light: "Light"
+  base-theme-dark: "Dark"
+  theme-name: "テーマ名"
+  preview-created-theme: "プレビュー"
+  invalid-theme: "テーマが正しくありません。"
+  already-installed: "既にそのテーマはインストールされています。"
+  saved: "保存しました"
+  installed-themes: "インストールされたテーマ"
+  select-theme: "テーマを選択してください"
+
 common/views/components/cw-button.vue:
   hide: "隠す"
   show: "もっと見る"
@@ -762,6 +784,7 @@ desktop/views/components/settings.vue:
   2fa: "二段階認証"
   other: "その他"
   license: "ライセンス"
+  theme: "テーマ"
 
   behaviour: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
@@ -1417,6 +1440,7 @@ mobile/views/pages/settings.vue:
   notification-position: "通知の表示"
   notification-position-bottom: "下"
   notification-position-top: "上"
+  theme: "テーマ"
   behavior: "動作"
   fetch-on-scroll: "スクロールで自動読み込み"
   note-visibility: "投稿の公開範囲"
diff --git a/package.json b/package.json
index 347e9d0c24..e19283cf64 100644
--- a/package.json
+++ b/package.json
@@ -208,6 +208,7 @@
 		"v-animate-css": "0.0.2",
 		"vue": "2.5.17",
 		"vue-chartjs": "3.4.0",
+		"vue-color": "2.6.0",
 		"vue-cropperjs": "2.2.2",
 		"vue-js-modal": "1.3.26",
 		"vue-json-tree-view": "2.1.4",
diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 9b6af27ece..778e9f29cf 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -14,8 +14,7 @@ export default Vue.extend({
 		keymap(): any {
 			return {
 				'h|slash': this.help,
-				'd': this.dark,
-				'x': this.test
+				'd': this.dark
 			};
 		}
 	},
@@ -26,11 +25,10 @@ export default Vue.extend({
 		},
 
 		dark() {
-			applyTheme(darkTheme);
-		},
-
-		test() {
-			applyTheme(halloweenTheme);
+			this.$store.commit('device/set', {
+				key: 'darkmode',
+				value: !this.$store.state.device.darkmode
+			});
 		}
 	}
 });
diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue
index ca09af87de..ac018abcfc 100644
--- a/src/client/app/common/views/components/avatar.vue
+++ b/src/client/app/common/views/components/avatar.vue
@@ -59,7 +59,9 @@ export default Vue.extend({
 		}
 	},
 	mounted() {
-		this.$el.style.color = `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`;
+		if (this.user.avatarColor) {
+			this.$el.style.color = `rgb(${this.user.avatarColor.slice(0, 3).join(',')})`;
+		}
 	},
 	methods: {
 		onClick(e) {
diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts
index 4c1c0afa80..0dea38a7a1 100644
--- a/src/client/app/common/views/components/index.ts
+++ b/src/client/app/common/views/components/index.ts
@@ -1,5 +1,6 @@
 import Vue from 'vue';
 
+import theme from './theme.vue';
 import instance from './instance.vue';
 import cwButton from './cw-button.vue';
 import tagCloud from './tag-cloud.vue';
@@ -43,6 +44,7 @@ import uiSelect from './ui/select.vue';
 import formButton from './ui/form/button.vue';
 import formRadio from './ui/form/radio.vue';
 
+Vue.component('mk-theme', theme);
 Vue.component('mk-instance', instance);
 Vue.component('mk-cw-button', cwButton);
 Vue.component('mk-tag-cloud', tagCloud);
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
new file mode 100644
index 0000000000..27888d1e85
--- /dev/null
+++ b/src/client/app/common/views/components/theme.vue
@@ -0,0 +1,179 @@
+<template>
+<div class="nicnklzforebnpfgasiypmpdaaglujqm">
+	<label>
+		<span>%i18n:@light-theme%</span>
+		<ui-select v-model="light" placeholder="%i18n:@light-theme%">
+			<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+		</ui-select>
+	</label>
+
+	<label>
+		<span>%i18n:@dark-theme%</span>
+		<ui-select v-model="dark" placeholder="%i18n:@dark-theme%">
+			<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+		</ui-select>
+	</label>
+
+	<details class="creator">
+		<summary>%i18n:@create-a-theme%</summary>
+		<div>
+			<span>%i18n:@base-theme%:</span>
+			<ui-radio v-model="myThemeBase" value="light">%i18n:@base-theme-light%</ui-radio>
+			<ui-radio v-model="myThemeBase" value="dark">%i18n:@base-theme-dark%</ui-radio>
+		</div>
+		<div>
+			<ui-input v-model="myThemeName">
+				<span>%i18n:@theme-name%</span>
+			</ui-input>
+		</div>
+		<div>
+			<div style="padding-bottom:8px;">%i18n:@primary-color%:</div>
+			<color-picker v-model="myThemePrimary"/>
+		</div>
+		<div>
+			<div style="padding-bottom:8px;">%i18n:@secondary-color%:</div>
+			<color-picker v-model="myThemeSecondary"/>
+		</div>
+		<div>
+			<div style="padding-bottom:8px;">%i18n:@text-color%:</div>
+			<color-picker v-model="myThemeText"/>
+		</div>
+		<ui-button @click="preview()">%i18n:@preview-created-theme%</ui-button>
+		<ui-button primary @click="gen()">%i18n:@save-created-theme%</ui-button>
+	</details>
+
+	<details>
+		<summary>%i18n:@install-a-theme%</summary>
+		<ui-textarea v-model="installThemeCode">
+			<span>%i18n:@theme-code%</span>
+		</ui-textarea>
+		<ui-button @click="install()">%i18n:@install%</ui-button>
+	</details>
+
+	<details>
+		<summary>%i18n:@installed-themes%</summary>
+		<ui-select v-model="selectedInstalledTheme" placeholder="%i18n:@select-theme%">
+			<option v-for="x in installedThemes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+		</ui-select>
+		<ui-textarea readonly :value="selectedInstalledThemeCode">
+			<span>%i18n:@theme-code%</span>
+		</ui-textarea>
+	</details>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import { apiUrl, docsUrl } from '../../../config';
+import { lightTheme, darkTheme, builtinThemes, applyTheme } from '../../../theme';
+import { Chrome } from 'vue-color';
+import * as uuid from 'uuid';
+import * as tinycolor from 'tinycolor2';
+
+export default Vue.extend({
+	components: {
+		ColorPicker: Chrome
+	},
+
+	data() {
+		return {
+			installThemeCode: null,
+			selectedInstalledTheme: null,
+			myThemeBase: 'light',
+			myThemeName: '',
+			myThemePrimary: lightTheme.meta.vars.primary,
+			myThemeSecondary: lightTheme.meta.vars.secondary,
+			myThemeText: lightTheme.meta.vars.text
+		};
+	},
+
+	computed: {
+		themes(): any {
+			return this.$store.state.device.themes.concat(builtinThemes);
+		},
+
+		installedThemes(): any {
+			return this.$store.state.device.themes;
+		},
+
+		light: {
+			get() { return this.$store.state.device.lightTheme; },
+			set(value) { this.$store.commit('device/set', { key: 'lightTheme', value }); }
+		},
+
+		dark: {
+			get() { return this.$store.state.device.darkTheme; },
+			set(value) { this.$store.commit('device/set', { key: 'darkTheme', value }); }
+		},
+
+		selectedInstalledThemeCode() {
+			if (this.selectedInstalledTheme == null) return null;
+			return JSON.stringify(this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme));
+		},
+
+		myTheme(): any {
+			return {
+				meta: {
+					name: this.myThemeName,
+					author: this.$store.state.i.name,
+					base: this.myThemeBase,
+					vars: {
+						primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
+						secondary: tinycolor(typeof this.myThemeSecondary == 'string' ? this.myThemeSecondary : this.myThemeSecondary.rgba).toRgbString(),
+						text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
+					}
+				}
+			};
+		}
+	},
+
+	watch: {
+		myThemeBase(v) {
+			const theme = v == 'light' ? lightTheme : darkTheme;
+			this.myThemePrimary = theme.meta.vars.primary;
+			this.myThemeSecondary = theme.meta.vars.secondary;
+			this.myThemeText = theme.meta.vars.text;
+		}
+	},
+
+	methods: {
+		install() {
+			const theme = JSON.parse(this.installThemeCode);
+			if (theme.meta == null || theme.meta.id == null) {
+				alert('%i18n:@invalid-theme%');
+				return;
+			}
+			if (this.$store.state.device.themes.some(t => t.meta.id == theme.meta.id)) {
+				alert('%i18n:@already-installed%');
+				return;
+			}
+			const themes = this.$store.state.device.themes.concat(theme);
+			this.$store.commit('device/set', {
+				key: 'themes', value: themes
+			});
+		},
+
+		preview() {
+			applyTheme(this.myTheme, false);
+		},
+
+		gen() {
+			const theme = this.myTheme;
+			theme.meta.id = uuid();
+			const themes = this.$store.state.device.themes.concat(theme);
+			this.$store.commit('device/set', {
+				key: 'themes', value: themes
+			});
+			alert('%i18n:@saved%');
+		}
+	}
+});
+</script>
+
+<style lang="stylus" scoped>
+.nicnklzforebnpfgasiypmpdaaglujqm
+	> .creator
+		> div
+			padding 16px 0
+			border-bottom solid 1px var(--faceDivider)
+</style>
diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index a165d100a4..47644b32b5 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -27,14 +27,6 @@ export default Vue.extend({
 		return {
 			styl: 'fill'
 		};
-	},
-	inject: {
-		isCardChild: { default: false }
-	},
-	created() {
-		if (this.isCardChild) {
-			this.styl = 'line';
-		}
 	}
 });
 </script>
@@ -43,6 +35,7 @@ export default Vue.extend({
 .dmtdnykelhudezerjlfpbhgovrgnqqgr
 	display block
 	width 100%
+	min-height 40px
 	margin 0
 	padding 0
 	font-weight normal
@@ -52,6 +45,9 @@ export default Vue.extend({
 	outline none
 	box-shadow none
 
+	&:not(.inline) + .dmtdnykelhudezerjlfpbhgovrgnqqgr
+		margin-top 16px
+
 	&.inline
 		display inline-block
 		width auto
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index c7d82590ea..1cb8d4d4c8 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -19,6 +19,11 @@
 			<x-profile/>
 		</section>
 
+		<section class="web" v-show="page == 'web'">
+			<h1>%i18n:@theme%</h1>
+			<mk-theme/>
+		</section>
+
 		<section class="web" v-show="page == 'web'">
 			<h1>%i18n:@behaviour%</h1>
 			<ui-switch v-model="fetchOnScroll">
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 8d430ad7ff..802f7b42eb 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -14,11 +14,11 @@ import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
 import MiOS, { API } from './mios';
 import { version, codename, lang } from './config';
-import applyTheme from './common/scripts/theme';
-const defaultTheme = require('../theme/light.json');
+import { builtinThemes, applyTheme } from './theme';
+const lightTheme = require('../theme/light.json');
 
 if (localStorage.getItem('theme') == null) {
-	applyTheme(defaultTheme);
+	applyTheme(lightTheme);
 }
 
 Vue.use(Vuex);
@@ -92,6 +92,35 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
 		const launch = (router: VueRouter, api?: (os: MiOS) => API) => {
 			os.apis = api ? api(os) : null;
 
+			//#region theme
+			os.store.watch(s => {
+				return s.device.darkmode;
+			}, v => {
+				const themes = os.store.state.device.themes.concat(builtinThemes);
+				const dark = themes.find(t => t.meta.id == os.store.state.device.darkTheme);
+				const light = themes.find(t => t.meta.id == os.store.state.device.lightTheme);
+				applyTheme(v ? dark : light);
+			});
+			os.store.watch(s => {
+				return s.device.lightTheme;
+			}, v => {
+				const themes = os.store.state.device.themes.concat(builtinThemes);
+				const theme = themes.find(t => t.meta.id == v);
+				if (!os.store.state.device.darkmode) {
+					applyTheme(theme);
+				}
+			});
+			os.store.watch(s => {
+				return s.device.darkTheme;
+			}, v => {
+				const themes = os.store.state.device.themes.concat(builtinThemes);
+				const theme = themes.find(t => t.meta.id == v);
+				if (os.store.state.device.darkmode) {
+					applyTheme(theme);
+				}
+			});
+			//#endregion
+
 			//#region shadow
 			const shadow = '0 3px 8px rgba(0, 0, 0, 0.2)';
 			if (os.store.state.settings.useShadow) document.documentElement.style.setProperty('--shadow', shadow);
diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue
index b83eaf6d33..94fa38cec9 100644
--- a/src/client/app/mobile/views/pages/settings.vue
+++ b/src/client/app/mobile/views/pages/settings.vue
@@ -23,6 +23,13 @@
 					<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
 				</section>
 
+				<section>
+					<header>%i18n:@theme%</header>
+					<div>
+						<mk-theme/>
+					</div>
+				</section>
+
 				<section>
 					<header>%i18n:@timeline%</header>
 					<div>
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index fbcc53d7be..545261225a 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -44,6 +44,9 @@ const defaultDeviceSettings = {
 	apiViaStream: true,
 	autoPopout: false,
 	darkmode: false,
+	darkTheme: 'dark',
+	lightTheme: 'light',
+	themes: [],
 	enableSounds: true,
 	soundVolume: 0.5,
 	lang: null,
diff --git a/src/client/app/common/scripts/theme.ts b/src/client/app/theme.ts
similarity index 74%
rename from src/client/app/common/scripts/theme.ts
rename to src/client/app/theme.ts
index 7a1c6abb76..1147ff300d 100644
--- a/src/client/app/common/scripts/theme.ts
+++ b/src/client/app/theme.ts
@@ -1,22 +1,21 @@
 import * as tinycolor from 'tinycolor2';
-const lightTheme = require('../../../theme/light');
-const darkTheme = require('../../../theme/dark');
 
 type Theme = {
 	meta: {
 		id: string;
 		name: string;
-		inherit: string;
+		author: string;
+		base?: string;
 		vars: any;
 	};
 } & {
 	[key: string]: string;
 };
 
-export default function(theme: Theme) {
-	if (theme.meta.inherit) {
-		const inherit = [lightTheme, darkTheme].find(x => x.meta.id == theme.meta.inherit);
-		theme = Object.assign({}, inherit, theme);
+export function applyTheme(theme: Theme, persisted = true) {
+	if (theme.meta.base) {
+		const base = [lightTheme, darkTheme].find(x => x.meta.id == theme.meta.base);
+		theme = Object.assign({}, base, theme);
 	}
 
 	const props = compile(theme);
@@ -26,7 +25,9 @@ export default function(theme: Theme) {
 		document.documentElement.style.setProperty(`--${k}`, v.toString());
 	});
 
-	localStorage.setItem('theme', JSON.stringify(props));
+	if (persisted) {
+		localStorage.setItem('theme', JSON.stringify(props));
+	}
 }
 
 function compile(theme: Theme): { [key: string]: string } {
@@ -87,3 +88,13 @@ function compile(theme: Theme): { [key: string]: string } {
 function genValue(c: tinycolor.Instance): string {
 	return c.toRgbString();
 }
+
+export const lightTheme = require('../theme/light.json');
+export const darkTheme = require('../theme/dark.json');
+export const halloweenTheme = require('../theme/halloween.json');
+
+export const builtinThemes = [
+	lightTheme,
+	darkTheme,
+	halloweenTheme
+];
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
index 015225ddab..74447b8f2f 100644
--- a/src/client/theme/dark.json
+++ b/src/client/theme/dark.json
@@ -1,6 +1,6 @@
 {
 	"meta": {
-		"id": "9978f7f9-5616-44fd-a704-cc5985efdd63",
+		"id": "dark",
 		"name": "Dark",
 		"author": "syuilo",
 		"vars": {
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
index 6e92db95ff..fb34db57a8 100644
--- a/src/client/theme/halloween.json
+++ b/src/client/theme/halloween.json
@@ -3,10 +3,9 @@
 		"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
 		"name": "Halloween",
 		"author": "syuilo",
-		"inherit": "9978f7f9-5616-44fd-a704-cc5985efdd63",
+		"base": "dark",
 		"vars": {
 			"primary": "#d67036",
-			"primaryForeground": "#fff",
 			"secondary": "#1f1d30",
 			"text": "#b1bee3"
 		}
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 3d131f066a..1b6604e642 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -1,6 +1,6 @@
 {
 	"meta": {
-		"id": "406cfea3-a4e7-486c-9057-30ede1353c3f",
+		"id": "light",
 		"name": "Light",
 		"author": "syuilo",
 		"vars": {

From 7b426532710c69e5b08407e33f21fa592f976e99 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:03:28 +0900
Subject: [PATCH 444/539] wip

---
 src/client/theme/light.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index 1b6604e642..b853aa9a26 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -43,7 +43,7 @@
 	"noteHeaderBadgeFg": "#aaa",
 	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
 	"noteHeaderAdminFg": "#f15f71",
-	"noteHeaderAdminBg": "#5d282e",
+	"noteHeaderAdminBg": "#ffdfdf",
 	"noteHeaderAcct": "#ccc",
 	"noteHeaderInfo": "#c0c0c0",
 

From 094d873f2e7dbcc6c250260d21524afb15cca47f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:20:49 +0900
Subject: [PATCH 445/539] wip

---
 src/client/app/common/views/components/ui/button.vue | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index 47644b32b5..b29f8bb1c9 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -45,6 +45,18 @@ export default Vue.extend({
 	outline none
 	box-shadow none
 
+	&:focus
+		&:after
+			content ""
+			pointer-events none
+			position absolute
+			top -5px
+			right -5px
+			bottom -5px
+			left -5px
+			border 2px solid var(--primaryAlpha03)
+			border-radius 10px
+
 	&:not(.inline) + .dmtdnykelhudezerjlfpbhgovrgnqqgr
 		margin-top 16px
 

From 57669c9c0302392c1e12008fd01578cfd1d3f157 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:44:23 +0900
Subject: [PATCH 446/539] wip

---
 src/client/app/theme.ts     |  2 ++
 src/client/theme/light.json | 10 +++++-----
 src/client/theme/pink.json  | 17 +++++++++++++++++
 3 files changed, 24 insertions(+), 5 deletions(-)
 create mode 100644 src/client/theme/pink.json

diff --git a/src/client/app/theme.ts b/src/client/app/theme.ts
index 1147ff300d..555f8411f2 100644
--- a/src/client/app/theme.ts
+++ b/src/client/app/theme.ts
@@ -91,10 +91,12 @@ function genValue(c: tinycolor.Instance): string {
 
 export const lightTheme = require('../theme/light.json');
 export const darkTheme = require('../theme/dark.json');
+export const pinkTheme = require('../theme/pink.json');
 export const halloweenTheme = require('../theme/halloween.json');
 
 export const builtinThemes = [
 	lightTheme,
 	darkTheme,
+	pinkTheme,
 	halloweenTheme
 ];
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
index b853aa9a26..0d50dc5caa 100644
--- a/src/client/theme/light.json
+++ b/src/client/theme/light.json
@@ -39,16 +39,16 @@
 	"renoteText": "#9dbb00",
 	"quoteBorder": "#c0dac6",
 	"noteText": "#717171",
-	"noteHeaderName": "#627079",
+	"noteHeaderName": ":darken<2<$text",
 	"noteHeaderBadgeFg": "#aaa",
 	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
 	"noteHeaderAdminFg": "#f15f71",
 	"noteHeaderAdminBg": "#ffdfdf",
-	"noteHeaderAcct": "#ccc",
-	"noteHeaderInfo": "#c0c0c0",
+	"noteHeaderAcct": ":alpha<0.7<@noteHeaderName",
+	"noteHeaderInfo": ":alpha<0.7<@noteHeaderName",
 
-	"noteActions": "#ddd",
-	"noteActionsHover": "#444",
+	"noteActions": ":alpha<0.3<$text",
+	"noteActionsHover": ":alpha<0.9<$text",
 	"noteActionsReplyHover": "#0af",
 	"noteActionsRenoteHover": "#8d0",
 	"noteActionsReactionHover": "#fa0",
diff --git a/src/client/theme/pink.json b/src/client/theme/pink.json
new file mode 100644
index 0000000000..ddb56b46e1
--- /dev/null
+++ b/src/client/theme/pink.json
@@ -0,0 +1,17 @@
+{
+	"meta": {
+		"id": "e9c8c01d-9c15-48d0-9b5c-3d00843b5b36",
+		"name": "Pink",
+		"author": "syuilo",
+		"base": "light",
+		"vars": {
+			"primary": "rgb(251, 78, 112)",
+			"secondary": "rgb(255, 218, 240)",
+			"text": "rgb(113, 91, 102)"
+		}
+	},
+
+	"renoteGradient": "#ffb1c9",
+	"renoteText": "#ff588d",
+	"quoteBorder": "#ff6c9b"
+}

From f26e64190575c53601fbfccba539a95568813007 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:48:02 +0900
Subject: [PATCH 447/539] wip

---
 .../app/desktop/views/components/settings.profile.vue | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/client/app/desktop/views/components/settings.profile.vue b/src/client/app/desktop/views/components/settings.profile.vue
index 9dd2798557..5f465a52bb 100644
--- a/src/client/app/desktop/views/components/settings.profile.vue
+++ b/src/client/app/desktop/views/components/settings.profile.vue
@@ -6,22 +6,19 @@
 		<button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button>
 	</label>
 	<label class="ui from group">
-		<p>%i18n:@name%</p>
-		<input v-model="name" type="text" class="ui"/>
+		<ui-input v-model="name" type="text">%i18n:@name%</ui-input>
 	</label>
 	<label class="ui from group">
-		<p>%i18n:@location%</p>
-		<input v-model="location" type="text" class="ui"/>
+		<ui-input v-model="location" type="text">%i18n:@location%</ui-input>
 	</label>
 	<label class="ui from group">
-		<p>%i18n:@description%</p>
-		<textarea v-model="description" class="ui"></textarea>
+		<ui-textarea v-model="description">%i18n:@description%</ui-textarea>
 	</label>
 	<label class="ui from group">
 		<p>%i18n:@birthday%</p>
 		<input type="date" v-model="birthday"/>
 	</label>
-	<button class="ui primary" @click="save">%i18n:@save%</button>
+	<ui-button primary @click="save">%i18n:@save%</ui-button>
 	<section>
 		<h2>%i18n:@locked-account%</h2>
 		<ui-switch v-model="$store.state.i.isLocked" @change="onChangeIsLocked">%i18n:@is-locked%</ui-switch>

From b8b4991a464c90dcea82b8ddaf026fee591d44ea Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 00:51:13 +0900
Subject: [PATCH 448/539] 8.63.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index e19283cf64..e827011257 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.62.0",
-	"clientVersion": "1.0.9964",
+	"version": "8.63.0",
+	"clientVersion": "1.0.10040",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 25dd19dd8c931ffabb6137ff92d63bbf67ed7883 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 29 Sep 2018 09:11:06 +0900
Subject: [PATCH 449/539] :art:

---
 .../app/common/views/components/signin.vue       |  6 +++---
 .../app/common/views/components/signup.vue       |  8 ++++----
 .../app/common/views/components/ui/input.vue     | 16 ++++++----------
 .../app/common/views/components/ui/select.vue    | 16 ++++++----------
 src/client/app/mobile/views/pages/drive.vue      |  1 -
 .../app/mobile/views/pages/games/reversi.vue     |  1 -
 6 files changed, 19 insertions(+), 29 deletions(-)

diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index e02af8154c..7025ecea33 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -1,16 +1,16 @@
 <template>
 <form class="mk-signin" :class="{ signing }" @submit.prevent="onSubmit">
 	<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
-	<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @input="onUsernameChange">
+	<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @input="onUsernameChange" styl="fill">
 		<span>%i18n:@username%</span>
 		<span slot="prefix">@</span>
 		<span slot="suffix">@{{ host }}</span>
 	</ui-input>
-	<ui-input v-model="password" type="password" required>
+	<ui-input v-model="password" type="password" required styl="fill">
 		<span>%i18n:@password%</span>
 		<span slot="prefix">%fa:lock%</span>
 	</ui-input>
-	<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/>
+	<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required styl="fill"/>
 	<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
 	<p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p>
 </form>
diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue
index e55d7ee3e3..b817ca729d 100644
--- a/src/client/app/common/views/components/signup.vue
+++ b/src/client/app/common/views/components/signup.vue
@@ -1,12 +1,12 @@
 <template>
 <form class="mk-signup" @submit.prevent="onSubmit" :autocomplete="Math.random()">
 	<template v-if="meta">
-		<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required>
+		<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required styl="fill">
 			<span>%i18n:@invitation-code%</span>
 			<span slot="prefix">%fa:id-card-alt%</span>
 			<p slot="text" v-html="'%i18n:@invitation-info%'.replace('{}', meta.maintainer.url)"></p>
 		</ui-input>
-		<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername">
+		<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername" styl="fill">
 			<span>%i18n:@username%</span>
 			<span slot="prefix">@</span>
 			<span slot="suffix">@{{ host }}</span>
@@ -18,7 +18,7 @@
 			<p slot="text" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-short%</p>
 			<p slot="text" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-long%</p>
 		</ui-input>
-		<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true">
+		<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true" styl="fill">
 			<span>%i18n:@password%</span>
 			<span slot="prefix">%fa:lock%</span>
 			<div slot="text">
@@ -27,7 +27,7 @@
 				<p slot="text" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw% %i18n:@strong-password%</p>
 			</div>
 		</ui-input>
-		<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype">
+		<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype" styl="fill">
 			<span>%i18n:@password% (%i18n:@retype%)</span>
 			<span slot="prefix">%fa:lock%</span>
 			<div slot="text">
diff --git a/src/client/app/common/views/components/ui/input.vue b/src/client/app/common/views/components/ui/input.vue
index d7e72409f0..abbd5a2feb 100644
--- a/src/client/app/common/views/components/ui/input.vue
+++ b/src/client/app/common/views/components/ui/input.vue
@@ -71,14 +71,18 @@ export default Vue.extend({
 			type: Boolean,
 			required: false,
 			default: false
+		},
+		styl: {
+			type: String,
+			required: false,
+			default: 'line'
 		}
 	},
 	data() {
 		return {
 			v: this.value,
 			focused: false,
-			passwordStrength: '',
-			styl: 'fill'
+			passwordStrength: ''
 		};
 	},
 	computed: {
@@ -117,14 +121,6 @@ export default Vue.extend({
 			}
 		}
 	},
-	inject: {
-		isCardChild: { default: false }
-	},
-	created() {
-		if (this.isCardChild) {
-			this.styl = 'line';
-		}
-	},
 	mounted() {
 		if (this.$refs.prefix) {
 			this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
diff --git a/src/client/app/common/views/components/ui/select.vue b/src/client/app/common/views/components/ui/select.vue
index 8c1b8c0269..da6f9696b5 100644
--- a/src/client/app/common/views/components/ui/select.vue
+++ b/src/client/app/common/views/components/ui/select.vue
@@ -29,13 +29,17 @@ export default Vue.extend({
 		required: {
 			type: Boolean,
 			required: false
+		},
+		styl: {
+			type: String,
+			required: false,
+			default: 'line'
 		}
 	},
 	data() {
 		return {
 			v: this.value,
-			focused: false,
-			styl: 'fill'
+			focused: false
 		};
 	},
 	computed: {
@@ -48,14 +52,6 @@ export default Vue.extend({
 			this.v = v;
 		}
 	},
-	inject: {
-		isCardChild: { default: false }
-	},
-	created() {
-		if (this.isCardChild) {
-			this.styl = 'line';
-		}
-	},
 	mounted() {
 		if (this.$refs.prefix) {
 			this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue
index c0fc7b48dc..bf02adca9d 100644
--- a/src/client/app/mobile/views/pages/drive.vue
+++ b/src/client/app/mobile/views/pages/drive.vue
@@ -44,7 +44,6 @@ export default Vue.extend({
 	},
 	mounted() {
 		document.title = `${(this as any).os.instanceName} Drive`;
-		document.documentElement.style.background = '#fff';
 	},
 	beforeDestroy() {
 		window.removeEventListener('popstate', this.onPopState);
diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue
index f3bba586de..7f8f919005 100644
--- a/src/client/app/mobile/views/pages/games/reversi.vue
+++ b/src/client/app/mobile/views/pages/games/reversi.vue
@@ -11,7 +11,6 @@ import Vue from 'vue';
 export default Vue.extend({
 	mounted() {
 		document.title = `${(this as any).os.instanceName} %i18n:@reversi%`;
-		document.documentElement.style.background = '#fff';
 	},
 	methods: {
 		nav(game, actualNav) {

From 1e2b484929410d3c1cf37a0809b84952ee3ad1cd Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sat, 29 Sep 2018 16:52:58 +0900
Subject: [PATCH 450/539] =?UTF-8?q?profile=20banner=20=E3=81=8C=E6=BF=83?=
 =?UTF-8?q?=E3=81=99=E3=81=8E=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?=
 =?UTF-8?q?=20(#2783)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/desktop/views/widgets/profile.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/desktop/views/widgets/profile.vue b/src/client/app/desktop/views/widgets/profile.vue
index 91354324ce..30b7b95d35 100644
--- a/src/client/app/desktop/views/widgets/profile.vue
+++ b/src/client/app/desktop/views/widgets/profile.vue
@@ -86,7 +86,7 @@ export default define({
 
 	> .banner
 		height 100px
-		background-color var(--primaryDarken10)
+		background-color var(--primaryAlpha01)
 		background-size cover
 		background-position center
 		cursor pointer

From 579b61a8063acfbba0bf1ea6429857b6b2c13800 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 30 Sep 2018 14:46:18 +0900
Subject: [PATCH 451/539] Update tests

---
 test/mfm.ts | 51 ++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 13 deletions(-)

diff --git a/test/mfm.ts b/test/mfm.ts
index b0c793e44b..dc0947e5e9 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -54,20 +54,45 @@ describe('Text', () => {
 			], tokens2);
 		});
 
-		it('mention', () => {
-			const tokens = analyze('@himawari お腹ペコい');
-			assert.deepEqual([
-				{ type: 'mention', content: '@himawari', username: 'himawari', host: null },
-				{ type: 'text', content: ' お腹ペコい' }
-			], tokens);
-		});
+		describe('mention', () => {
+			it('local', () => {
+				const tokens = analyze('@himawari お腹ペコい');
+				assert.deepEqual([
+					{ type: 'mention', content: '@himawari', username: 'himawari', host: null },
+					{ type: 'text', content: ' お腹ペコい' }
+				], tokens);
+			});
 
-		it('remote mention', () => {
-			const tokens = analyze('@hima_sub@namori.net お腹ペコい');
-			assert.deepEqual([
-				{ type: 'mention', content: '@hima_sub@namori.net', username: 'hima_sub', host: 'namori.net' },
-				{ type: 'text', content: ' お腹ペコい' }
-			], tokens);
+			it('remote', () => {
+				const tokens = analyze('@hima_sub@namori.net お腹ペコい');
+				assert.deepEqual([
+					{ type: 'mention', content: '@hima_sub@namori.net', username: 'hima_sub', host: 'namori.net' },
+					{ type: 'text', content: ' お腹ペコい' }
+				], tokens);
+			});
+/*
+			it('ignore', () => {
+				const tokens = analyze('idolm@ster');
+				assert.deepEqual([
+					{ type: 'text', content: 'idolm@ster' }
+				], tokens);
+
+				const tokens2 = analyze('@a\n@b\n@c');
+				assert.deepEqual([
+					{ type: 'mention', content: '@a', username: 'a', host: null },
+					{ type: 'text', content: '\n' },
+					{ type: 'mention', content: '@b', username: 'b', host: null },
+					{ type: 'text', content: '\n' },
+					{ type: 'mention', content: '@c', username: 'c', host: null }
+				], tokens2);
+
+				const tokens3 = analyze('**x**@a');
+				assert.deepEqual([
+					{ type: 'bold', content: '**x**', bold: 'x' },
+					{ type: 'mention', content: '@a', username: 'a', host: null }
+				], tokens3);
+			});
+*/
 		});
 
 		it('hashtag', () => {

From 1b9b8912aef0bce4346fb0f11a3a1e9c3bd1cf50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Sun, 30 Sep 2018 22:45:24 +0900
Subject: [PATCH 452/539] Update post-form.vue (#2790)

---
 src/client/app/desktop/views/components/post-form.vue | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/client/app/desktop/views/components/post-form.vue b/src/client/app/desktop/views/components/post-form.vue
index f50dfaf8fb..e25cc33579 100644
--- a/src/client/app/desktop/views/components/post-form.vue
+++ b/src/client/app/desktop/views/components/post-form.vue
@@ -450,6 +450,7 @@ export default Vue.extend({
 	display block
 	padding 16px
 	background var(--desktopPostFormBg)
+	overflow hidden
 
 	&:after
 		content ""

From ff76c815b15a4bb3ceda0ef3cf6d5adb73f535e2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 30 Sep 2018 23:03:21 +0900
Subject: [PATCH 453/539] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E3=82=A4?=
 =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E6=99=82=E3=81=AE?=
 =?UTF-8?q?=E5=8B=95=E4=BD=9C=E3=82=92=E3=82=8F=E3=81=8B=E3=82=8A=E3=82=84?=
 =?UTF-8?q?=E3=81=99=E3=81=8F=E3=81=97=E3=81=9F=E3=82=8A=E3=83=86=E3=83=BC?=
 =?UTF-8?q?=E3=83=9E=E3=82=92=E3=82=A2=E3=83=B3=E3=82=A4=E3=83=B3=E3=82=B9?=
 =?UTF-8?q?=E3=83=88=E3=83=BC=E3=83=AB=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?=
 =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=82=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                |  3 +++
 src/client/app/common/views/components/theme.vue | 12 +++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 46dea949d2..366c4a33cd 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -291,6 +291,7 @@ common/views/components/theme.vue:
   install-a-theme: "テーマのインストール"
   theme-code: "テーマコード"
   install: "インストール"
+  installed: "「{}」をインストールしました"
   create-a-theme: "テーマの作成"
   save-created-theme: "テーマを保存"
   primary-color: "プライマリ カラー"
@@ -306,6 +307,8 @@ common/views/components/theme.vue:
   saved: "保存しました"
   installed-themes: "インストールされたテーマ"
   select-theme: "テーマを選択してください"
+  uninstall: "アンインストール"
+  uninstalled: "「{}」をアンインストールしました"
 
 common/views/components/cw-button.vue:
   hide: "隠す"
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 27888d1e85..56b07da498 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -58,13 +58,13 @@
 		<ui-textarea readonly :value="selectedInstalledThemeCode">
 			<span>%i18n:@theme-code%</span>
 		</ui-textarea>
+		<ui-button @click="uninstall()">%i18n:@uninstall%</ui-button>
 	</details>
 </div>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
-import { apiUrl, docsUrl } from '../../../config';
 import { lightTheme, darkTheme, builtinThemes, applyTheme } from '../../../theme';
 import { Chrome } from 'vue-color';
 import * as uuid from 'uuid';
@@ -151,6 +151,16 @@ export default Vue.extend({
 			this.$store.commit('device/set', {
 				key: 'themes', value: themes
 			});
+			alert('%i18n:@installed%'.replace('{}', theme.meta.name));
+		},
+
+		uninstall() {
+			const theme = this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme);
+			const themes = this.$store.state.device.themes.filter(t => t.meta.id != theme.meta.id);
+			this.$store.commit('device/set', {
+				key: 'themes', value: themes
+			});
+			alert('%i18n:@uninstalled%'.replace('{}', theme.meta.name));
 		},
 
 		preview() {

From 110aadd65c01b7dd7b539bf994acd71d526500f2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 1 Oct 2018 00:15:17 +0900
Subject: [PATCH 454/539] 8.64.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index e827011257..1c45fc7aff 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.63.0",
-	"clientVersion": "1.0.10040",
+	"version": "8.64.0",
+	"clientVersion": "1.0.10046",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From cd0b9a8e3f539ac0f31a57800e7745ed585ccc3a Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Mon, 1 Oct 2018 19:28:24 +0900
Subject: [PATCH 455/539] =?UTF-8?q?=E9=9D=9E=E6=89=BF=E8=AA=8D=E5=88=B6?=
 =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=AE=E3=83=AA?=
 =?UTF-8?q?=E3=83=A2=E3=83=BC=E3=83=88=E3=83=95=E3=82=A9=E3=83=AD=E3=83=BC?=
 =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=83=95=E3=82=A9=E3=83=AD=E3=83=BC=E8=A8=B1?=
 =?UTF-8?q?=E5=8F=AF=E5=BE=85=E3=81=A1=E3=81=A8=E8=A1=A8=E7=A4=BA=E3=81=97?=
 =?UTF-8?q?=E3=81=AA=E3=81=84=20(#2796)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/en-US.yml                                         | 3 +++
 locales/ja-JP.yml                                         | 3 +++
 src/client/app/common/views/pages/follow.vue              | 3 ++-
 src/client/app/desktop/views/components/follow-button.vue | 3 ++-
 src/client/app/mobile/views/components/follow-button.vue  | 3 ++-
 5 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/locales/en-US.yml b/locales/en-US.yml
index 9b4ae5c381..50c489726d 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -439,6 +439,7 @@ common/views/pages/follow.vue:
   following: "Following"
   follow: "Follow"
   request-pending: "Pending follow request"
+  follow-processing: "Processing follow"
   follow-request: "Follow request"
 desktop:
   banner-crop-title: "Crop the part that appears as a banner"
@@ -565,6 +566,7 @@ desktop/views/components/follow-button.vue:
   following: "Following"
   follow: "Follow"
   request-pending: "Pending follow request"
+  follow-processing: "Processing follow"
   follow-request: "Follow request"
 desktop/views/components/followers-window.vue:
   followers: "{}'s followers"
@@ -1044,6 +1046,7 @@ mobile/views/components/follow-button.vue:
   following: "Following"
   follow: "Follow"
   request-pending: "Pending follow request"
+  follow-processing: "Processing follow"
   follow-request: "Follow request"
 mobile/views/components/friends-maker.vue:
   title: "Let's follow them"
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 366c4a33cd..08d3c51733 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -514,6 +514,7 @@ common/views/pages/follow.vue:
   following: "フォロー中"
   follow: "フォロー"
   request-pending: "フォロー許可待ち"
+  follow-processing: "フォロー処理中"
   follow-request: "フォロー申請"
 
 desktop:
@@ -656,6 +657,7 @@ desktop/views/components/follow-button.vue:
   following: "フォロー中"
   follow: "フォロー"
   request-pending: "フォロー許可待ち"
+  follow-processing: "フォロー処理中"
   follow-request: "フォロー申請"
 
 desktop/views/components/followers-window.vue:
@@ -1232,6 +1234,7 @@ mobile/views/components/follow-button.vue:
   following: "フォロー中"
   follow: "フォロー"
   request-pending: "フォロー許可待ち"
+  follow-processing: "フォロー処理中"
   follow-request: "フォロー申請"
 
 mobile/views/components/friends-maker.vue:
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index cb4785f468..92f24fb538 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -19,7 +19,8 @@
 			@click="onClick"
 			:disabled="followWait">
 		<template v-if="!followWait">
-			<template v-if="user.hasPendingFollowRequestFromYou">%fa:hourglass-half% %i18n:@request-pending%</template>
+			<template v-if="user.hasPendingFollowRequestFromYou && user.isLocked">%fa:hourglass-half% %i18n:@request-pending%</template>
+			<template v-else-if="user.hasPendingFollowRequestFromYou && !user.isLocked">%fa:hourglass-start% %i18n:@follow-processing%</template>
 			<template v-else-if="user.isFollowing">%fa:minus% %i18n:@following%</template>
 			<template v-else-if="!user.isFollowing && user.isLocked">%fa:plus% %i18n:@follow-request%</template>
 			<template v-else-if="!user.isFollowing && !user.isLocked">%fa:plus% %i18n:@follow%</template>
diff --git a/src/client/app/desktop/views/components/follow-button.vue b/src/client/app/desktop/views/components/follow-button.vue
index 45e63ad928..4d4bd5cc5a 100644
--- a/src/client/app/desktop/views/components/follow-button.vue
+++ b/src/client/app/desktop/views/components/follow-button.vue
@@ -5,7 +5,8 @@
 	:disabled="wait"
 >
 	<template v-if="!wait">
-		<template v-if="u.hasPendingFollowRequestFromYou">%fa:hourglass-half%<template v-if="size == 'big'"> %i18n:@request-pending%</template></template>
+		<template v-if="u.hasPendingFollowRequestFromYou && u.isLocked">%fa:hourglass-half%<template v-if="size == 'big'"> %i18n:@request-pending%</template></template>
+		<template v-else-if="u.hasPendingFollowRequestFromYou && !u.isLocked">%fa:hourglass-start%<template v-if="size == 'big'"> %i18n:@follow-processing%</template></template>
 		<template v-else-if="u.isFollowing">%fa:minus%<template v-if="size == 'big'"> %i18n:@following%</template></template>
 		<template v-else-if="!u.isFollowing && u.isLocked">%fa:plus%<template v-if="size == 'big'"> %i18n:@follow-request%</template></template>
 		<template v-else-if="!u.isFollowing && !u.isLocked">%fa:plus%<template v-if="size == 'big'"> %i18n:@follow%</template></template>
diff --git a/src/client/app/mobile/views/components/follow-button.vue b/src/client/app/mobile/views/components/follow-button.vue
index cff830d998..aea2d285e4 100644
--- a/src/client/app/mobile/views/components/follow-button.vue
+++ b/src/client/app/mobile/views/components/follow-button.vue
@@ -5,7 +5,8 @@
 	:disabled="wait"
 >
 	<template v-if="!wait">
-		<template v-if="u.hasPendingFollowRequestFromYou">%fa:hourglass-half% %i18n:@request-pending%</template>
+		<template v-if="u.hasPendingFollowRequestFromYou && u.isLocked">%fa:hourglass-half% %i18n:@request-pending%</template>
+		<template v-else-if="u.hasPendingFollowRequestFromYou && !u.isLocked">%fa:hourglass-start% %i18n:@follow-processing%</template>
 		<template v-else-if="u.isFollowing">%fa:minus% %i18n:@following%</template>
 		<template v-else-if="!u.isFollowing && u.isLocked">%fa:plus% %i18n:@follow-request%</template>
 		<template v-else-if="!u.isFollowing && !u.isLocked">%fa:plus% %i18n:@follow%</template>

From 35362ed3c7e8962c9b44eddaf3a5810327c94aad Mon Sep 17 00:00:00 2001
From: Hakaba Hitoyo <tsukadayoshio@gmail.com>
Date: Mon, 1 Oct 2018 19:29:02 +0900
Subject: [PATCH 456/539] Better example settings for TLS certification (#2793)

---
 .config/example.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.config/example.yml b/.config/example.yml
index ecb1dd1934..692833635b 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -101,8 +101,8 @@ drive:
 # TLS
 # https:
 #   # path for certification
-#   key: example-tls-key
-#   cert: example-tls-cert
+#   key: /etc/letsencrypt/live/example.tld/privkey.pem
+#   cert: /etc/letsencrypt/live/example.tld/fullchain.pem
 
 # Elasticsearch
 # elasticsearch:

From f56adce51fd3c6276261747a6ae6dd556b947fab Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 00:34:37 +0900
Subject: [PATCH 457/539] 9.0.0

---
 CHANGELOG.md        |  6 ++++++
 package.json        |  4 ++--
 src/models/note.ts  | 15 ---------------
 src/models/stats.ts |  5 -----
 src/models/user.ts  | 22 ----------------------
 5 files changed, 8 insertions(+), 44 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84cf61f028..c492e43839 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ ChangeLog
 
 This document describes breaking changes only.
 
+9.0.0
+-----
+
+Misskey v8.64.0 を使っている方は、9.0.0に際しては特にすべきことはありません。
+Misskey v8.64.0 に満たないバージョンをお使いの方は、一旦8.64.0にアップデートして(そして起動して)から9.0.0に再度アップデートしてください。
+
 8.0.0
 -----
 
diff --git a/package.json b/package.json
index 1c45fc7aff..17603790f0 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "8.64.0",
-	"clientVersion": "1.0.10046",
+	"version": "9.0.0",
+	"clientVersion": "1.0.10049",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,
diff --git a/src/models/note.ts b/src/models/note.ts
index f67eeaaf6e..0efabc97d8 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -27,21 +27,6 @@ Note.createIndex({
 });
 export default Note;
 
-// 後方互換性のため
-Note.findOne({
-	fileIds: { $exists: true }
-}).then(n => {
-	if (n == null) {
-		Note.update({}, {
-			$rename: {
-				mediaIds: 'fileIds'
-			}
-		}, {
-			multi: true
-		});
-	}
-});
-
 export function isValidText(text: string): boolean {
 	return length(text.trim()) <= 1000 && text.trim() != '';
 }
diff --git a/src/models/stats.ts b/src/models/stats.ts
index c4c838caeb..492784555e 100644
--- a/src/models/stats.ts
+++ b/src/models/stats.ts
@@ -3,11 +3,6 @@ import db from '../db/mongodb';
 
 const Stats = db.get<IStats>('stats');
 
-// 後方互換性のため
-Stats.dropIndex({ date: -1 } as any).catch((e: mongo.MongoError) => {
-	if (e.code !== 27) throw e;
-});
-
 Stats.createIndex({ span: -1, date: -1 }, { unique: true });
 export default Stats;
 
diff --git a/src/models/user.ts b/src/models/user.ts
index bacae485a8..8ff91d3f45 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -35,28 +35,6 @@ User.createIndex('uri', { sparse: true, unique: true });
 
 export default User;
 
-// 後方互換性のため
-User.findOne({
-	pinnedNoteId: { $exists: true }
-}).then(async x => {
-	if (x == null) return;
-
-	const users = await User.find({
-		pinnedNoteId: { $exists: true }
-	});
-
-	users.forEach(u => {
-		User.update({ _id: u._id }, {
-			$set: {
-				pinnedNoteIds: [(u as any).pinnedNoteId]
-			},
-			$unset: {
-				pinnedNoteId: ''
-			}
-		});
-	});
-});
-
 type IUserBase = {
 	_id: mongo.ObjectID;
 	createdAt: Date;

From f2b9863eea4a7fe6e317ff91c1ecd12568b973c9 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 2 Oct 2018 11:59:12 +0900
Subject: [PATCH 458/539] Better deployment option descriptions. (#2800)

---
 .config/example.yml | 68 ++++++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 25 deletions(-)

diff --git a/.config/example.yml b/.config/example.yml
index 692833635b..ebad171839 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -7,27 +7,51 @@ maintainer:
   repository_url: https://github.com/syuilo/misskey # Repository URL
   feedback_url: https://github.com/syuilo/misskey/issues # Feedback URL (e.g. github issue)
 
-# URL and Port settings overview
-# e.g., If you want to realize following structure:
-#
-#               +--- https://example.com:123 ----------+
-# +------+      |+-------------+      +---------------+|
-# | User | ---> || Proxy (123) | ---> | Misskey (456) ||
-# +------+      |+-------------+      +---------------+|
-#               +--------------------------------------+
-#
-# You need to set 'https://example.com:123' to 'url' prop and
-# You need to set 456 to 'port' prop.
-#
-# In other words, the 'url' prop should be the final accessible URL seen by a user.
-# 'port' prop is a port that the Misskey server should actually listen
-# on and it is not necessarily the port that a user accesses.
 
-url: http://localhost/
+# Final accessible URL seen by a user.
+url: https://example.tld/
+
+
+### Port and TLS settings ######################################
+#
+# Misskey supports two deployment options for public.
+#
+
+# Option 1: With Reverse Proxy
+#
+#                 +----- https://example.tld/ ------------+
+#   +------+      |+-------------+      +----------------+|
+#   | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
+#   +------+      |+-------------+      +----------------+|
+#                 +---------------------------------------+
+#
+#   You need to setup reverse proxy. (eg. Nginx)
+#   You do not define 'https' section.
+
+# Option 2: Standalone
+#
+#                 +- https://example.tld/ -+
+#   +------+      |   +---------------+    |
+#   | User | ---> |   | Misskey (443) |    |
+#   +------+      |   +---------------+    |
+#                 +------------------------+
+#
+#   You need to run Misskey as root.
+#   You need to set Certificate in 'https' section.
+
+# To use option 1, uncomment below line.
+# port: 3000    # A port that your Misskey server should listen.
+
+# To use option 2, uncomment below lines.
+# port: 443
+#
+# https:
+#   # path for certification
+#   key: /etc/letsencrypt/live/example.tld/privkey.pem
+#   cert: /etc/letsencrypt/live/example.tld/fullchain.pem
+
+################################################################
 
-# A port that your Misskey server should listen.
-# This value is not a port to use when accessing with a browser.
-port: 80
 
 mongodb:
   host: localhost
@@ -98,12 +122,6 @@ drive:
 # Below settings are optional
 #
 
-# TLS
-# https:
-#   # path for certification
-#   key: /etc/letsencrypt/live/example.tld/privkey.pem
-#   cert: /etc/letsencrypt/live/example.tld/fullchain.pem
-
 # Elasticsearch
 # elasticsearch:
 #   host: localhost

From 6b96bd01854ecfb7b0ee816831ff4634af8af856 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 16:04:31 +0900
Subject: [PATCH 459/539] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E3=81=AB?=
 =?UTF-8?q?=E9=96=A2=E3=81=97=E3=81=A6=E5=BC=B7=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json                                  |   2 +
 src/client/app/app.vue                        |   3 -
 src/client/app/boot.js                        |   1 -
 .../app/common/views/components/theme.vue     | 103 ++++++---
 src/client/app/init.ts                        |  11 +-
 src/client/app/theme.ts                       |  62 +++---
 src/client/theme/dark.json                    | 204 -----------------
 src/client/theme/dark.json5                   | 207 ++++++++++++++++++
 src/client/theme/halloween.json               |  17 --
 src/client/theme/halloween.json5              |  21 ++
 src/client/theme/light.json                   | 204 -----------------
 src/client/theme/light.json5                  | 207 ++++++++++++++++++
 src/client/theme/pink.json                    |  17 --
 src/client/theme/pink.json5                   |  20 ++
 webpack.config.ts                             |   3 +
 15 files changed, 569 insertions(+), 513 deletions(-)
 delete mode 100644 src/client/theme/dark.json
 create mode 100644 src/client/theme/dark.json5
 delete mode 100644 src/client/theme/halloween.json
 create mode 100644 src/client/theme/halloween.json5
 delete mode 100644 src/client/theme/light.json
 create mode 100644 src/client/theme/light.json5
 delete mode 100644 src/client/theme/pink.json
 create mode 100644 src/client/theme/pink.json5

diff --git a/package.json b/package.json
index 17603790f0..c12b8861c6 100644
--- a/package.json
+++ b/package.json
@@ -134,6 +134,8 @@
 		"is-url": "1.2.4",
 		"js-yaml": "3.12.0",
 		"jsdom": "11.12.0",
+		"json5": "2.1.0",
+		"json5-loader": "1.0.1",
 		"koa": "2.5.1",
 		"koa-bodyparser": "4.2.1",
 		"koa-compress": "3.0.0",
diff --git a/src/client/app/app.vue b/src/client/app/app.vue
index 778e9f29cf..e639c9f9ac 100644
--- a/src/client/app/app.vue
+++ b/src/client/app/app.vue
@@ -5,9 +5,6 @@
 <script lang="ts">
 import Vue from 'vue';
 import { url, lang } from './config';
-import applyTheme from './common/scripts/theme';
-const darkTheme = require('../theme/dark');
-const halloweenTheme = require('../theme/halloween');
 
 export default Vue.extend({
 	computed: {
diff --git a/src/client/app/boot.js b/src/client/app/boot.js
index e122e0423a..6e06a88aa3 100644
--- a/src/client/app/boot.js
+++ b/src/client/app/boot.js
@@ -24,7 +24,6 @@
 	const theme = localStorage.getItem('theme');
 	if (theme) {
 		Object.entries(JSON.parse(theme)).forEach(([k, v]) => {
-			if (k == 'meta') return;
 			document.documentElement.style.setProperty(`--${k}`, v.toString());
 		});
 	}
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 56b07da498..293238e542 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -3,14 +3,14 @@
 	<label>
 		<span>%i18n:@light-theme%</span>
 		<ui-select v-model="light" placeholder="%i18n:@light-theme%">
-			<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+			<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
 		</ui-select>
 	</label>
 
 	<label>
 		<span>%i18n:@dark-theme%</span>
 		<ui-select v-model="dark" placeholder="%i18n:@dark-theme%">
-			<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+			<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
 		</ui-select>
 	</label>
 
@@ -53,7 +53,7 @@
 	<details>
 		<summary>%i18n:@installed-themes%</summary>
 		<ui-select v-model="selectedInstalledTheme" placeholder="%i18n:@select-theme%">
-			<option v-for="x in installedThemes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
+			<option v-for="x in installedThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
 		</ui-select>
 		<ui-textarea readonly :value="selectedInstalledThemeCode">
 			<span>%i18n:@theme-code%</span>
@@ -65,10 +65,25 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { lightTheme, darkTheme, builtinThemes, applyTheme } from '../../../theme';
+import { lightTheme, darkTheme, builtinThemes, applyTheme, Theme } from '../../../theme';
 import { Chrome } from 'vue-color';
 import * as uuid from 'uuid';
 import * as tinycolor from 'tinycolor2';
+import * as JSON5 from 'json5';
+
+// 後方互換性のため
+function convertOldThemedefinition(t) {
+	const t2 = {
+		id: t.meta.id,
+		name: t.meta.name,
+		author: t.meta.author,
+		base: t.meta.base,
+		vars: t.meta.vars,
+		props: t
+	};
+	delete t2.props.meta;
+	return t2;
+}
 
 export default Vue.extend({
 	components: {
@@ -81,18 +96,18 @@ export default Vue.extend({
 			selectedInstalledTheme: null,
 			myThemeBase: 'light',
 			myThemeName: '',
-			myThemePrimary: lightTheme.meta.vars.primary,
-			myThemeSecondary: lightTheme.meta.vars.secondary,
-			myThemeText: lightTheme.meta.vars.text
+			myThemePrimary: lightTheme.vars.primary,
+			myThemeSecondary: lightTheme.vars.secondary,
+			myThemeText: lightTheme.vars.text
 		};
 	},
 
 	computed: {
-		themes(): any {
+		themes(): Theme[] {
 			return this.$store.state.device.themes.concat(builtinThemes);
 		},
 
-		installedThemes(): any {
+		installedThemes(): Theme[] {
 			return this.$store.state.device.themes;
 		},
 
@@ -108,20 +123,18 @@ export default Vue.extend({
 
 		selectedInstalledThemeCode() {
 			if (this.selectedInstalledTheme == null) return null;
-			return JSON.stringify(this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme));
+			return JSON5.stringify(this.installedThemes.find(x => x.id == this.selectedInstalledTheme), null, '\t');
 		},
 
 		myTheme(): any {
 			return {
-				meta: {
-					name: this.myThemeName,
-					author: this.$store.state.i.name,
-					base: this.myThemeBase,
-					vars: {
-						primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
-						secondary: tinycolor(typeof this.myThemeSecondary == 'string' ? this.myThemeSecondary : this.myThemeSecondary.rgba).toRgbString(),
-						text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
-					}
+				name: this.myThemeName,
+				author: this.$store.state.i.name,
+				base: this.myThemeBase,
+				vars: {
+					primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
+					secondary: tinycolor(typeof this.myThemeSecondary == 'string' ? this.myThemeSecondary : this.myThemeSecondary.rgba).toRgbString(),
+					text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
 				}
 			};
 		}
@@ -130,37 +143,67 @@ export default Vue.extend({
 	watch: {
 		myThemeBase(v) {
 			const theme = v == 'light' ? lightTheme : darkTheme;
-			this.myThemePrimary = theme.meta.vars.primary;
-			this.myThemeSecondary = theme.meta.vars.secondary;
-			this.myThemeText = theme.meta.vars.text;
+			this.myThemePrimary = theme.vars.primary;
+			this.myThemeSecondary = theme.vars.secondary;
+			this.myThemeText = theme.vars.text;
 		}
 	},
 
+	beforeCreate() {
+		// migrate old theme definitions
+		// 後方互換性のため
+		this.$store.commit('device/set', {
+			key: 'themes', value: this.$store.state.device.themes.map(t => {
+				if (t.id == null) {
+					return convertOldThemedefinition(t);
+				} else {
+					return t;
+				}
+			})
+		});
+	},
+
 	methods: {
 		install() {
-			const theme = JSON.parse(this.installThemeCode);
-			if (theme.meta == null || theme.meta.id == null) {
+			let theme;
+
+			try {
+				theme = JSON5.parse(this.installThemeCode);
+			} catch (e) {
 				alert('%i18n:@invalid-theme%');
 				return;
 			}
-			if (this.$store.state.device.themes.some(t => t.meta.id == theme.meta.id)) {
+
+			// 後方互換性のため
+			if (theme.id == null && theme.meta != null) {
+				theme = convertOldThemedefinition(theme);
+			}
+
+			if (theme.id == null) {
+				alert('%i18n:@invalid-theme%');
+				return;
+			}
+
+			if (this.$store.state.device.themes.some(t => t.id == theme.id)) {
 				alert('%i18n:@already-installed%');
 				return;
 			}
+
 			const themes = this.$store.state.device.themes.concat(theme);
 			this.$store.commit('device/set', {
 				key: 'themes', value: themes
 			});
-			alert('%i18n:@installed%'.replace('{}', theme.meta.name));
+
+			alert('%i18n:@installed%'.replace('{}', theme.name));
 		},
 
 		uninstall() {
-			const theme = this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme);
-			const themes = this.$store.state.device.themes.filter(t => t.meta.id != theme.meta.id);
+			const theme = this.installedThemes.find(x => x.id == this.selectedInstalledTheme);
+			const themes = this.$store.state.device.themes.filter(t => t.id != theme.id);
 			this.$store.commit('device/set', {
 				key: 'themes', value: themes
 			});
-			alert('%i18n:@uninstalled%'.replace('{}', theme.meta.name));
+			alert('%i18n:@uninstalled%'.replace('{}', theme.name));
 		},
 
 		preview() {
@@ -169,7 +212,7 @@ export default Vue.extend({
 
 		gen() {
 			const theme = this.myTheme;
-			theme.meta.id = uuid();
+			theme.id = uuid();
 			const themes = this.$store.state.device.themes.concat(theme);
 			this.$store.commit('device/set', {
 				key: 'themes', value: themes
diff --git a/src/client/app/init.ts b/src/client/app/init.ts
index 802f7b42eb..c2381067da 100644
--- a/src/client/app/init.ts
+++ b/src/client/app/init.ts
@@ -14,8 +14,7 @@ import App from './app.vue';
 import checkForUpdate from './common/scripts/check-for-update';
 import MiOS, { API } from './mios';
 import { version, codename, lang } from './config';
-import { builtinThemes, applyTheme } from './theme';
-const lightTheme = require('../theme/light.json');
+import { builtinThemes, lightTheme, applyTheme } from './theme';
 
 if (localStorage.getItem('theme') == null) {
 	applyTheme(lightTheme);
@@ -97,15 +96,15 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
 				return s.device.darkmode;
 			}, v => {
 				const themes = os.store.state.device.themes.concat(builtinThemes);
-				const dark = themes.find(t => t.meta.id == os.store.state.device.darkTheme);
-				const light = themes.find(t => t.meta.id == os.store.state.device.lightTheme);
+				const dark = themes.find(t => t.id == os.store.state.device.darkTheme);
+				const light = themes.find(t => t.id == os.store.state.device.lightTheme);
 				applyTheme(v ? dark : light);
 			});
 			os.store.watch(s => {
 				return s.device.lightTheme;
 			}, v => {
 				const themes = os.store.state.device.themes.concat(builtinThemes);
-				const theme = themes.find(t => t.meta.id == v);
+				const theme = themes.find(t => t.id == v);
 				if (!os.store.state.device.darkmode) {
 					applyTheme(theme);
 				}
@@ -114,7 +113,7 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
 				return s.device.darkTheme;
 			}, v => {
 				const themes = os.store.state.device.themes.concat(builtinThemes);
-				const theme = themes.find(t => t.meta.id == v);
+				const theme = themes.find(t => t.id == v);
 				if (os.store.state.device.darkmode) {
 					applyTheme(theme);
 				}
diff --git a/src/client/app/theme.ts b/src/client/app/theme.ts
index 555f8411f2..828ce33862 100644
--- a/src/client/app/theme.ts
+++ b/src/client/app/theme.ts
@@ -1,27 +1,40 @@
 import * as tinycolor from 'tinycolor2';
 
-type Theme = {
-	meta: {
-		id: string;
-		name: string;
-		author: string;
-		base?: string;
-		vars: any;
-	};
-} & {
-	[key: string]: string;
+export type Theme = {
+	id: string;
+	name: string;
+	author: string;
+	desc?: string;
+	base?: 'dark' | 'light';
+	vars: { [key: string]: string };
+	props: { [key: string]: string };
 };
 
+export const lightTheme: Theme = require('../theme/light.json5');
+export const darkTheme: Theme = require('../theme/dark.json5');
+export const pinkTheme: Theme = require('../theme/pink.json5');
+export const halloweenTheme: Theme = require('../theme/halloween.json5');
+
+export const builtinThemes = [
+	lightTheme,
+	darkTheme,
+	pinkTheme,
+	halloweenTheme
+];
+
 export function applyTheme(theme: Theme, persisted = true) {
-	if (theme.meta.base) {
-		const base = [lightTheme, darkTheme].find(x => x.meta.id == theme.meta.base);
-		theme = Object.assign({}, base, theme);
+	// Deep copy
+	const _theme = JSON.parse(JSON.stringify(theme));
+
+	if (_theme.base) {
+		const base = [lightTheme, darkTheme].find(x => x.id == _theme.base);
+		_theme.vars = Object.assign({}, base.vars, _theme.vars);
+		_theme.props = Object.assign({}, base.props, _theme.props);
 	}
 
-	const props = compile(theme);
+	const props = compile(_theme);
 
 	Object.entries(props).forEach(([k, v]) => {
-		if (k == 'meta') return;
 		document.documentElement.style.setProperty(`--${k}`, v.toString());
 	});
 
@@ -34,10 +47,10 @@ function compile(theme: Theme): { [key: string]: string } {
 	function getColor(code: string): tinycolor.Instance {
 		// ref
 		if (code[0] == '@') {
-			return getColor(theme[code.substr(1)]);
+			return getColor(theme.props[code.substr(1)]);
 		}
 		if (code[0] == '$') {
-			return getColor(theme.meta.vars[code.substr(1)]);
+			return getColor(theme.vars[code.substr(1)]);
 		}
 
 		// func
@@ -59,8 +72,7 @@ function compile(theme: Theme): { [key: string]: string } {
 
 	const props = {};
 
-	Object.entries(theme).forEach(([k, v]) => {
-		if (k == 'meta') return;
+	Object.entries(theme.props).forEach(([k, v]) => {
 		const c = getColor(v);
 		props[k] = genValue(c);
 	});
@@ -88,15 +100,3 @@ function compile(theme: Theme): { [key: string]: string } {
 function genValue(c: tinycolor.Instance): string {
 	return c.toRgbString();
 }
-
-export const lightTheme = require('../theme/light.json');
-export const darkTheme = require('../theme/dark.json');
-export const pinkTheme = require('../theme/pink.json');
-export const halloweenTheme = require('../theme/halloween.json');
-
-export const builtinThemes = [
-	lightTheme,
-	darkTheme,
-	pinkTheme,
-	halloweenTheme
-];
diff --git a/src/client/theme/dark.json b/src/client/theme/dark.json
deleted file mode 100644
index 74447b8f2f..0000000000
--- a/src/client/theme/dark.json
+++ /dev/null
@@ -1,204 +0,0 @@
-{
-	"meta": {
-		"id": "dark",
-		"name": "Dark",
-		"author": "syuilo",
-		"vars": {
-			"primary": "#fb4e4e",
-			"secondary": "#282C37",
-			"text": "#d6dae0"
-		}
-	},
-
-	"primary": "$primary",
-	"primaryForeground": "#fff",
-	"secondary": "$secondary",
-	"bg": ":darken<8<$secondary",
-	"text": "$text",
-
-	"scrollbarTrack": ":darken<5<$secondary",
-	"scrollbarHandle": ":lighten<5<$secondary",
-	"scrollbarHandleHover": ":lighten<10<$secondary",
-
-	"face": "$secondary",
-	"faceText": "#fff",
-	"faceHeader": ":lighten<5<$secondary",
-	"faceHeaderText": "#e3e5e8",
-	"faceDivider": "rgba(0, 0, 0, 0.3)",
-	"faceTextButton": "#9baec8",
-	"faceTextButtonHover": "#b2c1d5",
-	"faceTextButtonActive": "#b2c1d5",
-	"faceClearButtonHover": "rgba(0, 0, 0, 0.1)",
-	"faceClearButtonActive": "rgba(0, 0, 0, 0.2)",
-	"popupBg": ":lighten<5<$secondary",
-	"popupFg": "#d6dce2",
-
-	"subNoteBg": "rgba(0, 0, 0, 0.18)",
-	"subNoteText": ":alpha<0.7<$text",
-	"renoteGradient": "#314027",
-	"renoteText": "#9dbb00",
-	"quoteBorder": "#4e945e",
-	"noteText": "#fff",
-	"noteHeaderName": "#fff",
-	"noteHeaderBadgeFg": "#758188",
-	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
-	"noteHeaderAdminFg": "#f15f71",
-	"noteHeaderAdminBg": "#5d282e",
-	"noteHeaderAcct": "#606984",
-	"noteHeaderInfo": "#606984",
-
-	"noteActions": "#606984",
-	"noteActionsHover": "#a1a8bf",
-	"noteActionsReplyHover": "#0af",
-	"noteActionsRenoteHover": "#8d0",
-	"noteActionsReactionHover": "#fa0",
-	"noteActionsHighlighted": "#707b97",
-
-	"noteAttachedFile": "rgba(255, 255, 255, 0.1)",
-
-	"modalBackdrop": "rgba(0, 0, 0, 0.5)",
-
-	"dateDividerBg": ":darken<2<$secondary",
-	"dateDividerFg": ":alpha<0.7<$text",
-
-	"switchTrack": "rgba(255, 255, 255, 0.15)",
-	"radioBorder": "rgba(255, 255, 255, 0.6)",
-	"inputBorder": "rgba(255, 255, 255, 0.7)",
-	"inputLabel": "rgba(255, 255, 255, 0.7)",
-	"inputText": "#fff",
-
-	"buttonBg": "rgba(255, 255, 255, 0.05)",
-	"buttonHoverBg": "rgba(255, 255, 255, 0.1)",
-	"buttonActiveBg": "rgba(255, 255, 255, 0.15)",
-
-	"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
-	"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
-	"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
-
-	"cwButtonBg": "#687390",
-	"cwButtonFg": "#393f4f",
-	"cwButtonHoverBg": "#707b97",
-
-	"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
-
-	"reactionViewerBorder": "rgba(255, 255, 255, 0.1)",
-
-	"pollEditorInputBg": "rgba(0, 0, 0, 0.25)",
-
-	"pollChoiceText": "#fff",
-	"pollChoiceBorder": "rgba(255, 255, 255, 0.1)",
-
-	"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
-	"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
-	"urlPreviewTitle": "$text",
-	"urlPreviewText": ":alpha<0.7<$text",
-	"urlPreviewInfo": ":alpha<0.8<$text",
-
-	"calendarWeek": "#43d5dc",
-	"calendarSaturdayOrSunday": "#ff6679",
-	"calendarDay": "#c5ced6",
-
-	"materBg": "rgba(0, 0, 0, 0.3)",
-
-	"chartCaption": ":alpha<0.6<$text",
-
-	"announcementsBg": "#253a50",
-	"announcementsTitle": "#539eff",
-	"announcementsText": "#fff",
-
-	"donationBg": "#5d5242",
-	"donationFg": "#e4dbce",
-
-	"googleSearchBg": "rgba(0, 0, 0, 0.2)",
-	"googleSearchFg": "#dee4e8",
-	"googleSearchBorder": "rgba(255, 255, 255, 0.2)",
-	"googleSearchHoverBorder": "rgba(255, 255, 255, 0.3)",
-	"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
-
-	"mfmTitleBg": "rgba(0, 0, 0, 0.2)",
-	"mfmQuote": ":alpha<0.7<$text",
-	"mfmQuoteLine": ":alpha<0.6<$text",
-
-	"suspendedInfoBg": "#611d1d",
-	"suspendedInfoFg": "#ffb4b4",
-	"remoteInfoBg": "#42321c",
-	"remoteInfoFg": "#ffbd3e",
-
-	"messagingRoomBg": "@bg",
-	"messagingRoomInfo": "#fff",
-	"messagingRoomDateDividerLine": "rgba(255, 255, 255, 0.1)",
-	"messagingRoomDateDividerText": "rgba(255, 255, 255, 0.3)",
-	"messagingRoomMessageInfo": "rgba(255, 255, 255, 0.4)",
-	"messagingRoomMessageBg": "$secondary",
-	"messagingRoomMessageFg": "#fff",
-
-	"formButtonBorder": "rgba(255, 255, 255, 0.1)",
-	"formButtonHoverBg": ":alpha<0.2<$primary",
-	"formButtonHoverBorder": ":alpha<0.5<$primary",
-	"formButtonActiveBg": ":alpha<0.12<$primary",
-
-	"desktopHeaderBg": ":lighten<5<$secondary",
-	"desktopHeaderFg": "$text",
-	"desktopHeaderHoverFg": "#fff",
-	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
-	"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
-	"desktopHeaderSearchFg": "#fff",
-	"desktopNotificationBg": ":alpha<0.9<$secondary",
-	"desktopNotificationFg": ":alpha<0.7<$text",
-	"desktopNotificationShadow": "rgba(0, 0, 0, 0.4)",
-	"desktopPostFormBg": "@face",
-	"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
-	"desktopPostFormTextareaFg": "#fff",
-	"desktopPostFormTransparentButtonFg": "$primary",
-	"desktopPostFormTransparentButtonActiveGradientStart": ":darken<8<$secondary",
-	"desktopPostFormTransparentButtonActiveGradientEnd": ":darken<3<$secondary",
-	"desktopRenoteFormFooter": ":lighten<5<$secondary",
-	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
-	"desktopTimelineSrc": "@faceTextButton",
-	"desktopTimelineSrcHover": "@faceTextButtonHover",
-	"desktopWindowTitle": "@faceHeaderText",
-	"desktopWindowShadow": "rgba(0, 0, 0, 0.5)",
-	"desktopDriveBg": "@bg",
-	"desktopDriveFolderBg": ":alpha<0.2<$primary",
-	"desktopDriveFolderHoverBg": ":alpha<0.3<$primary",
-	"desktopDriveFolderActiveBg": ":alpha<0.3<:darken<10<$primary",
-	"desktopDriveFolderFg": "#fff",
-	"desktopSettingsNavItem": ":alpha<0.8<$text",
-	"desktopSettingsNavItemHover": ":lighten<10<$text",
-
-	"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.25)",
-
-	"mobileHeaderBg": ":lighten<5<$secondary",
-	"mobileHeaderFg": "$text",
-	"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
-	"mobilePostFormDivider": "rgba(0, 0, 0, 0.2)",
-	"mobilePostFormTextareaBg": "rgba(0, 0, 0, 0.3)",
-	"mobileDriveNavBg": ":alpha<0.75<$secondary",
-	"mobileHomeTlItemHover": "rgba(255, 255, 255, 0.1)",
-	"mobileUserPageName": "#fff",
-	"mobileUserPageAcct": "$text",
-	"mobileUserPageDescription": "$text",
-	"mobileUserPageFollowedBg": "rgba(0, 0, 0, 0.3)",
-	"mobileUserPageFollowedFg": "$text",
-	"mobileUserPageStatusHighlight": "#fff",
-	"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.3)",
-	"mobileAnnouncement": "rgba(30, 129, 216, 0.2)",
-	"mobileAnnouncementFg": "#fff",
-	"mobileSignedInAsBg": "#273c34",
-	"mobileSignedInAsFg": "#49ab63",
-	"mobileSignoutBg": "#652222",
-	"mobileSignoutFg": "#ff5f56",
-
-	"reversiBannerGradientStart": "#45730e",
-	"reversiBannerGradientEnd": "#464300",
-	"reversiDescBg": "rgba(255, 255, 255, 0.1)",
-	"reversiListItemShadow": "rgba(0, 0, 0, 0.7)",
-	"reversiMapSelectBorder": "rgba(255, 255, 255, 0.1)",
-	"reversiMapSelectHoverBorder": "rgba(255, 255, 255, 0.2)",
-	"reversiRoomFormShadow": "rgba(0, 0, 0, 0.7)",
-	"reversiRoomFooterBg": ":alpha<0.9<$secondary",
-	"reversiGameHeaderLine": ":alpha<0.5<$secondary",
-	"reversiGameEmptyCell": ":lighten<2<$secondary",
-	"reversiGameEmptyCellMyTurn": ":lighten<5<$secondary",
-	"reversiGameEmptyCellCanPut": ":lighten<4<$secondary"
-}
diff --git a/src/client/theme/dark.json5 b/src/client/theme/dark.json5
new file mode 100644
index 0000000000..2042bd7931
--- /dev/null
+++ b/src/client/theme/dark.json5
@@ -0,0 +1,207 @@
+{
+	id: 'dark',
+
+	name: 'Dark',
+	author: 'syuilo',
+	desc: 'Default dark theme',
+
+	vars: {
+		primary: '#fb4e4e',
+		secondary: '#282C37',
+		text: '#d6dae0',
+	},
+
+	props: {
+		primary: '$primary',
+		primaryForeground: '#fff',
+		secondary: '$secondary',
+		bg: ':darken<8<$secondary',
+		text: '$text',
+
+		scrollbarTrack: ':darken<5<$secondary',
+		scrollbarHandle: ':lighten<5<$secondary',
+		scrollbarHandleHover: ':lighten<10<$secondary',
+
+		face: '$secondary',
+		faceText: '#fff',
+		faceHeader: ':lighten<5<$secondary',
+		faceHeaderText: '#e3e5e8',
+		faceDivider: 'rgba(0, 0, 0, 0.3)',
+		faceTextButton: '$text',
+		faceTextButtonHover: ':lighten<10<$text',
+		faceTextButtonActive: ':darken<10<$text',
+		faceClearButtonHover: 'rgba(0, 0, 0, 0.1)',
+		faceClearButtonActive: 'rgba(0, 0, 0, 0.2)',
+		popupBg: ':lighten<5<$secondary',
+		popupFg: '#d6dce2',
+
+		subNoteBg: 'rgba(0, 0, 0, 0.18)',
+		subNoteText: ':alpha<0.7<$text',
+		renoteGradient: '#314027',
+		renoteText: '#9dbb00',
+		quoteBorder: '#4e945e',
+		noteText: '#fff',
+		noteHeaderName: '#fff',
+		noteHeaderBadgeFg: '#758188',
+		noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.25)',
+		noteHeaderAdminFg: '#f15f71',
+		noteHeaderAdminBg: '#5d282e',
+		noteHeaderAcct: '#606984',
+		noteHeaderInfo: '#606984',
+
+		noteActions: '#606984',
+		noteActionsHover: '#a1a8bf',
+		noteActionsReplyHover: '#0af',
+		noteActionsRenoteHover: '#8d0',
+		noteActionsReactionHover: '#fa0',
+		noteActionsHighlighted: '#707b97',
+
+		noteAttachedFile: 'rgba(255, 255, 255, 0.1)',
+
+		modalBackdrop: 'rgba(0, 0, 0, 0.5)',
+
+		dateDividerBg: ':darken<2<$secondary',
+		dateDividerFg: ':alpha<0.7<$text',
+
+		switchTrack: 'rgba(255, 255, 255, 0.15)',
+		radioBorder: 'rgba(255, 255, 255, 0.6)',
+		inputBorder: 'rgba(255, 255, 255, 0.7)',
+		inputLabel: 'rgba(255, 255, 255, 0.7)',
+		inputText: '#fff',
+
+		buttonBg: 'rgba(255, 255, 255, 0.05)',
+		buttonHoverBg: 'rgba(255, 255, 255, 0.1)',
+		buttonActiveBg: 'rgba(255, 255, 255, 0.15)',
+
+		autocompleteItemHoverBg: 'rgba(255, 255, 255, 0.1)',
+		autocompleteItemText: 'rgba(255, 255, 255, 0.8)',
+		autocompleteItemTextSub: 'rgba(255, 255, 255, 0.3)',
+
+		cwButtonBg: '#687390',
+		cwButtonFg: '#393f4f',
+		cwButtonHoverBg: '#707b97',
+
+		reactionPickerButtonHoverBg: 'rgba(255, 255, 255, 0.18)',
+
+		reactionViewerBorder: 'rgba(255, 255, 255, 0.1)',
+
+		pollEditorInputBg: 'rgba(0, 0, 0, 0.25)',
+
+		pollChoiceText: '#fff',
+		pollChoiceBorder: 'rgba(255, 255, 255, 0.1)',
+
+		urlPreviewBorder: 'rgba(0, 0, 0, 0.4)',
+		urlPreviewBorderHover: 'rgba(255, 255, 255, 0.2)',
+		urlPreviewTitle: '$text',
+		urlPreviewText: ':alpha<0.7<$text',
+		urlPreviewInfo: ':alpha<0.8<$text',
+
+		calendarWeek: '#43d5dc',
+		calendarSaturdayOrSunday: '#ff6679',
+		calendarDay: '#c5ced6',
+
+		materBg: 'rgba(0, 0, 0, 0.3)',
+
+		chartCaption: ':alpha<0.6<$text',
+
+		announcementsBg: '#253a50',
+		announcementsTitle: '#539eff',
+		announcementsText: '#fff',
+
+		donationBg: '#5d5242',
+		donationFg: '#e4dbce',
+
+		googleSearchBg: 'rgba(0, 0, 0, 0.2)',
+		googleSearchFg: '#dee4e8',
+		googleSearchBorder: 'rgba(255, 255, 255, 0.2)',
+		googleSearchHoverBorder: 'rgba(255, 255, 255, 0.3)',
+		googleSearchHoverButton: 'rgba(255, 255, 255, 0.1)',
+
+		mfmTitleBg: 'rgba(0, 0, 0, 0.2)',
+		mfmQuote: ':alpha<0.7<$text',
+		mfmQuoteLine: ':alpha<0.6<$text',
+
+		suspendedInfoBg: '#611d1d',
+		suspendedInfoFg: '#ffb4b4',
+		remoteInfoBg: '#42321c',
+		remoteInfoFg: '#ffbd3e',
+
+		messagingRoomBg: '@bg',
+		messagingRoomInfo: '#fff',
+		messagingRoomDateDividerLine: 'rgba(255, 255, 255, 0.1)',
+		messagingRoomDateDividerText: 'rgba(255, 255, 255, 0.3)',
+		messagingRoomMessageInfo: 'rgba(255, 255, 255, 0.4)',
+		messagingRoomMessageBg: '$secondary',
+		messagingRoomMessageFg: '#fff',
+
+		formButtonBorder: 'rgba(255, 255, 255, 0.1)',
+		formButtonHoverBg: ':alpha<0.2<$primary',
+		formButtonHoverBorder: ':alpha<0.5<$primary',
+		formButtonActiveBg: ':alpha<0.12<$primary',
+
+		desktopHeaderBg: ':lighten<5<$secondary',
+		desktopHeaderFg: '$text',
+		desktopHeaderHoverFg: '#fff',
+		desktopHeaderSearchBg: 'rgba(0, 0, 0, 0.1)',
+		desktopHeaderSearchHoverBg: 'rgba(255, 255, 255, 0.04)',
+		desktopHeaderSearchFg: '#fff',
+		desktopNotificationBg: ':alpha<0.9<$secondary',
+		desktopNotificationFg: ':alpha<0.7<$text',
+		desktopNotificationShadow: 'rgba(0, 0, 0, 0.4)',
+		desktopPostFormBg: '@face',
+		desktopPostFormTextareaBg: 'rgba(0, 0, 0, 0.25)',
+		desktopPostFormTextareaFg: '#fff',
+		desktopPostFormTransparentButtonFg: '$primary',
+		desktopPostFormTransparentButtonActiveGradientStart: ':darken<8<$secondary',
+		desktopPostFormTransparentButtonActiveGradientEnd: ':darken<3<$secondary',
+		desktopRenoteFormFooter: ':lighten<5<$secondary',
+		desktopTimelineHeaderShadow: 'rgba(0, 0, 0, 0.15)',
+		desktopTimelineSrc: '@faceTextButton',
+		desktopTimelineSrcHover: '@faceTextButtonHover',
+		desktopWindowTitle: '@faceHeaderText',
+		desktopWindowShadow: 'rgba(0, 0, 0, 0.5)',
+		desktopDriveBg: '@bg',
+		desktopDriveFolderBg: ':alpha<0.2<$primary',
+		desktopDriveFolderHoverBg: ':alpha<0.3<$primary',
+		desktopDriveFolderActiveBg: ':alpha<0.3<:darken<10<$primary',
+		desktopDriveFolderFg: '#fff',
+		desktopSettingsNavItem: ':alpha<0.8<$text',
+		desktopSettingsNavItemHover: ':lighten<10<$text',
+
+		deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.25)',
+
+		mobileHeaderBg: ':lighten<5<$secondary',
+		mobileHeaderFg: '$text',
+		mobileNavBackdrop: 'rgba(0, 0, 0, 0.7)',
+		mobilePostFormDivider: 'rgba(0, 0, 0, 0.2)',
+		mobilePostFormTextareaBg: 'rgba(0, 0, 0, 0.3)',
+		mobileDriveNavBg: ':alpha<0.75<$secondary',
+		mobileHomeTlItemHover: 'rgba(255, 255, 255, 0.1)',
+		mobileUserPageName: '#fff',
+		mobileUserPageAcct: '$text',
+		mobileUserPageDescription: '$text',
+		mobileUserPageFollowedBg: 'rgba(0, 0, 0, 0.3)',
+		mobileUserPageFollowedFg: '$text',
+		mobileUserPageStatusHighlight: '#fff',
+		mobileUserPageHeaderShadow: 'rgba(0, 0, 0, 0.3)',
+		mobileAnnouncement: 'rgba(30, 129, 216, 0.2)',
+		mobileAnnouncementFg: '#fff',
+		mobileSignedInAsBg: '#273c34',
+		mobileSignedInAsFg: '#49ab63',
+		mobileSignoutBg: '#652222',
+		mobileSignoutFg: '#ff5f56',
+
+		reversiBannerGradientStart: '#45730e',
+		reversiBannerGradientEnd: '#464300',
+		reversiDescBg: 'rgba(255, 255, 255, 0.1)',
+		reversiListItemShadow: 'rgba(0, 0, 0, 0.7)',
+		reversiMapSelectBorder: 'rgba(255, 255, 255, 0.1)',
+		reversiMapSelectHoverBorder: 'rgba(255, 255, 255, 0.2)',
+		reversiRoomFormShadow: 'rgba(0, 0, 0, 0.7)',
+		reversiRoomFooterBg: ':alpha<0.9<$secondary',
+		reversiGameHeaderLine: ':alpha<0.5<$secondary',
+		reversiGameEmptyCell: ':lighten<2<$secondary',
+		reversiGameEmptyCellMyTurn: ':lighten<5<$secondary',
+		reversiGameEmptyCellCanPut: ':lighten<4<$secondary',
+	},
+}
diff --git a/src/client/theme/halloween.json b/src/client/theme/halloween.json
deleted file mode 100644
index fb34db57a8..0000000000
--- a/src/client/theme/halloween.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-	"meta": {
-		"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
-		"name": "Halloween",
-		"author": "syuilo",
-		"base": "dark",
-		"vars": {
-			"primary": "#d67036",
-			"secondary": "#1f1d30",
-			"text": "#b1bee3"
-		}
-	},
-
-	"renoteGradient": "#5d2d1a",
-	"renoteText": "#ff6c00",
-	"quoteBorder": "#c3631c"
-}
diff --git a/src/client/theme/halloween.json5 b/src/client/theme/halloween.json5
new file mode 100644
index 0000000000..608105903a
--- /dev/null
+++ b/src/client/theme/halloween.json5
@@ -0,0 +1,21 @@
+{
+	id: '42e4f09b-67d5-498c-af7d-29faa54745b0',
+
+	name: 'Halloween',
+	author: 'syuilo',
+	desc: 'Hello, Happy Halloween!',
+
+	base: 'dark',
+
+	vars: {
+		primary: '#d67036',
+		secondary: '#1f1d30',
+		text: '#b1bee3',
+	},
+
+	props: {
+		renoteGradient: '#5d2d1a',
+		renoteText: '#ff6c00',
+		quoteBorder: '#c3631c',
+	},
+}
diff --git a/src/client/theme/light.json b/src/client/theme/light.json
deleted file mode 100644
index 0d50dc5caa..0000000000
--- a/src/client/theme/light.json
+++ /dev/null
@@ -1,204 +0,0 @@
-{
-	"meta": {
-		"id": "light",
-		"name": "Light",
-		"author": "syuilo",
-		"vars": {
-			"primary": "#fb4e4e",
-			"secondary": "#fff",
-			"text": "#666"
-		}
-	},
-
-	"primary": "$primary",
-	"primaryForeground": "#fff",
-	"secondary": "$secondary",
-	"bg": ":darken<8<$secondary",
-	"text": "$text",
-
-	"scrollbarTrack": "#fff",
-	"scrollbarHandle": "#00000033",
-	"scrollbarHandleHover": "#00000066",
-
-	"face": "$secondary",
-	"faceText": "#444",
-	"faceHeader": ":lighten<5<$secondary",
-	"faceHeaderText": "#888",
-	"faceDivider": "rgba(0, 0, 0, 0.082)",
-	"faceTextButton": "#ccc",
-	"faceTextButtonHover": "#aaa",
-	"faceTextButtonActive": "#999",
-	"faceClearButtonHover": "rgba(0, 0, 0, 0.025)",
-	"faceClearButtonActive": "rgba(0, 0, 0, 0.05)",
-	"popupBg": ":lighten<5<$secondary",
-	"popupFg": "#586069",
-
-	"subNoteBg": "rgba(0, 0, 0, 0.01)",
-	"subNoteText": ":alpha<0.7<$text",
-	"renoteGradient": "#edfde2",
-	"renoteText": "#9dbb00",
-	"quoteBorder": "#c0dac6",
-	"noteText": "#717171",
-	"noteHeaderName": ":darken<2<$text",
-	"noteHeaderBadgeFg": "#aaa",
-	"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
-	"noteHeaderAdminFg": "#f15f71",
-	"noteHeaderAdminBg": "#ffdfdf",
-	"noteHeaderAcct": ":alpha<0.7<@noteHeaderName",
-	"noteHeaderInfo": ":alpha<0.7<@noteHeaderName",
-
-	"noteActions": ":alpha<0.3<$text",
-	"noteActionsHover": ":alpha<0.9<$text",
-	"noteActionsReplyHover": "#0af",
-	"noteActionsRenoteHover": "#8d0",
-	"noteActionsReactionHover": "#fa0",
-	"noteActionsHighlighted": "#888",
-
-	"noteAttachedFile": "rgba(0, 0, 0, 0.05)",
-
-	"modalBackdrop": "rgba(0, 0, 0, 0.1)",
-
-	"dateDividerBg": ":darken<2<$secondary",
-	"dateDividerFg": ":alpha<0.7<$text",
-
-	"switchTrack": "rgba(0, 0, 0, 0.25)",
-	"radioBorder": "rgba(0, 0, 0, 0.4)",
-	"inputBorder": "rgba(0, 0, 0, 0.42)",
-	"inputLabel": "rgba(0, 0, 0, 0.54)",
-	"inputText": "#000",
-
-	"buttonBg": "rgba(0, 0, 0, 0.05)",
-	"buttonHoverBg": "rgba(0, 0, 0, 0.1)",
-	"buttonActiveBg": "rgba(0, 0, 0, 0.15)",
-
-	"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
-	"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
-	"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
-
-	"cwButtonBg": "#b1b9c1",
-	"cwButtonFg": "#fff",
-	"cwButtonHoverBg": "#bbc4ce",
-
-	"reactionPickerButtonHoverBg": "#eee",
-
-	"reactionViewerBorder": "rgba(0, 0, 0, 0.1)",
-
-	"pollEditorInputBg": "#fff",
-
-	"pollChoiceText": "#000",
-	"pollChoiceBorder": "rgba(0, 0, 0, 0.1)",
-
-	"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
-	"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
-	"urlPreviewTitle": "$text",
-	"urlPreviewText": ":alpha<0.7<$text",
-	"urlPreviewInfo": ":alpha<0.8<$text",
-
-	"calendarWeek": "#19a2a9",
-	"calendarSaturdayOrSunday": "#ef95a0",
-	"calendarDay": "#777",
-
-	"materBg": "rgba(0, 0, 0, 0.1)",
-
-	"chartCaption": ":alpha<0.6<$text",
-
-	"announcementsBg": "#f3f9ff",
-	"announcementsTitle": "#4078c0",
-	"announcementsText": "#57616f",
-
-	"donationBg": "#fbead4",
-	"donationFg": "#777d71",
-
-	"googleSearchBg": "#fff",
-	"googleSearchFg": "#55595c",
-	"googleSearchBorder": "rgba(0, 0, 0, 0.2)",
-	"googleSearchHoverBorder": "rgba(0, 0, 0, 0.3)",
-	"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
-
-	"mfmTitleBg": "rgba(0, 0, 0, 0.07)",
-	"mfmQuote": ":alpha<0.6<$text",
-	"mfmQuoteLine": ":alpha<0.5<$text",
-
-	"suspendedInfoBg": "#ffdbdb",
-	"suspendedInfoFg": "#570808",
-	"remoteInfoBg": "#fff0db",
-	"remoteInfoFg": "#573c08",
-
-	"messagingRoomBg": "#fff",
-	"messagingRoomInfo": "#000",
-	"messagingRoomDateDividerLine": "rgba(0, 0, 0, 0.1)",
-	"messagingRoomDateDividerText": "rgba(0, 0, 0, 0.3)",
-	"messagingRoomMessageInfo": "rgba(0, 0, 0, 0.4)",
-	"messagingRoomMessageBg": "#eee",
-	"messagingRoomMessageFg": "#333",
-
-	"formButtonBorder": "rgba(0, 0, 0, 0.1)",
-	"formButtonHoverBg": ":alpha<0.12<$primary",
-	"formButtonHoverBorder": ":alpha<0.3<$primary",
-	"formButtonActiveBg": ":alpha<0.12<$primary",
-
-	"desktopHeaderBg": ":lighten<5<$secondary",
-	"desktopHeaderFg": "$text",
-	"desktopHeaderHoverFg": "#7b8c88",
-	"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
-	"desktopHeaderSearchHoverBg": "rgba(0, 0, 0, 0.08)",
-	"desktopHeaderSearchFg": "#000",
-	"desktopNotificationBg": ":alpha<0.9<$secondary",
-	"desktopNotificationFg": ":alpha<0.7<$text",
-	"desktopNotificationShadow": "rgba(0, 0, 0, 0.2)",
-	"desktopPostFormBg": ":lighten<33<$primary",
-	"desktopPostFormTextareaBg": "#fff",
-	"desktopPostFormTextareaFg": "#333",
-	"desktopPostFormTransparentButtonFg": ":alpha<0.5<$primary",
-	"desktopPostFormTransparentButtonActiveGradientStart": ":lighten<30<$primary",
-	"desktopPostFormTransparentButtonActiveGradientEnd": ":lighten<33<$primary",
-	"desktopRenoteFormFooter": ":lighten<33<$primary",
-	"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
-	"desktopTimelineSrc": "#6f7477",
-	"desktopTimelineSrcHover": "#525a5f",
-	"desktopWindowTitle": "#666",
-	"desktopWindowShadow": "rgba(0, 0, 0, 0.2)",
-	"desktopDriveBg": "#fff",
-	"desktopDriveFolderBg": ":lighten<31<$primary",
-	"desktopDriveFolderHoverBg": ":lighten<27<$primary",
-	"desktopDriveFolderActiveBg": ":lighten<25<$primary",
-	"desktopDriveFolderFg": ":darken<10<$primary",
-	"desktopSettingsNavItem": ":alpha<0.8<$text",
-	"desktopSettingsNavItemHover": ":darken<10<$text",
-
-	"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.1)",
-
-	"mobileHeaderBg": ":lighten<5<$secondary",
-	"mobileHeaderFg": "$text",
-	"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
-	"mobilePostFormDivider": "rgba(0, 0, 0, 0.1)",
-	"mobilePostFormTextareaBg": "#fff",
-	"mobileDriveNavBg": ":alpha<0.75<$secondary",
-	"mobileHomeTlItemHover": "rgba(0, 0, 0, 0.05)",
-	"mobileUserPageName": "#757c82",
-	"mobileUserPageAcct": "#969ea5",
-	"mobileUserPageDescription": "#757c82",
-	"mobileUserPageFollowedBg": "#a7bec7",
-	"mobileUserPageFollowedFg": "#fff",
-	"mobileUserPageStatusHighlight": "#787e86",
-	"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.07)",
-	"mobileAnnouncement": "rgba(155, 196, 232, 0.2)",
-	"mobileAnnouncementFg": "#3f4967",
-	"mobileSignedInAsBg": "#fcfff5",
-	"mobileSignedInAsFg": "#2c662d",
-	"mobileSignoutBg": "#fff6f5",
-	"mobileSignoutFg": "#cc2727",
-
-	"reversiBannerGradientStart": "#8bca3e",
-	"reversiBannerGradientEnd": "#d6cf31",
-	"reversiDescBg": "rgba(0, 0, 0, 0.1)",
-	"reversiListItemShadow": "rgba(0, 0, 0, 0.15)",
-	"reversiMapSelectBorder": "rgba(0, 0, 0, 0.1)",
-	"reversiMapSelectHoverBorder": "rgba(0, 0, 0, 0.2)",
-	"reversiRoomFormShadow": "rgba(0, 0, 0, 0.1)",
-	"reversiRoomFooterBg": ":alpha<0.9<$secondary",
-	"reversiGameHeaderLine": "#c4cdd4",
-	"reversiGameEmptyCell": "rgba(0, 0, 0, 0.06)",
-	"reversiGameEmptyCellMyTurn": "rgba(0, 0, 0, 0.12)",
-	"reversiGameEmptyCellCanPut": "rgba(0, 0, 0, 0.9)"
-}
diff --git a/src/client/theme/light.json5 b/src/client/theme/light.json5
new file mode 100644
index 0000000000..1e795ee8c5
--- /dev/null
+++ b/src/client/theme/light.json5
@@ -0,0 +1,207 @@
+{
+	id: 'light',
+
+	name: 'Light',
+	author: 'syuilo',
+	desc: 'Default light theme',
+
+	vars: {
+		primary: '#fb4e4e',
+		secondary: '#fff',
+		text: '#666',
+	},
+
+	props: {
+		primary: '$primary',
+		primaryForeground: '#fff',
+		secondary: '$secondary',
+		bg: ':darken<8<$secondary',
+		text: '$text',
+
+		scrollbarTrack: '#fff',
+		scrollbarHandle: '#00000033',
+		scrollbarHandleHover: '#00000066',
+
+		face: '$secondary',
+		faceText: '#444',
+		faceHeader: ':lighten<5<$secondary',
+		faceHeaderText: '#888',
+		faceDivider: 'rgba(0, 0, 0, 0.082)',
+		faceTextButton: '#ccc',
+		faceTextButtonHover: '#aaa',
+		faceTextButtonActive: '#999',
+		faceClearButtonHover: 'rgba(0, 0, 0, 0.025)',
+		faceClearButtonActive: 'rgba(0, 0, 0, 0.05)',
+		popupBg: ':lighten<5<$secondary',
+		popupFg: '#586069',
+
+		subNoteBg: 'rgba(0, 0, 0, 0.01)',
+		subNoteText: ':alpha<0.7<$text',
+		renoteGradient: '#edfde2',
+		renoteText: '#9dbb00',
+		quoteBorder: '#c0dac6',
+		noteText: '#717171',
+		noteHeaderName: ':darken<2<$text',
+		noteHeaderBadgeFg: '#aaa',
+		noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.05)',
+		noteHeaderAdminFg: '#f15f71',
+		noteHeaderAdminBg: '#ffdfdf',
+		noteHeaderAcct: ':alpha<0.7<@noteHeaderName',
+		noteHeaderInfo: ':alpha<0.7<@noteHeaderName',
+
+		noteActions: ':alpha<0.3<$text',
+		noteActionsHover: ':alpha<0.9<$text',
+		noteActionsReplyHover: '#0af',
+		noteActionsRenoteHover: '#8d0',
+		noteActionsReactionHover: '#fa0',
+		noteActionsHighlighted: '#888',
+
+		noteAttachedFile: 'rgba(0, 0, 0, 0.05)',
+
+		modalBackdrop: 'rgba(0, 0, 0, 0.1)',
+
+		dateDividerBg: ':darken<2<$secondary',
+		dateDividerFg: ':alpha<0.7<$text',
+
+		switchTrack: 'rgba(0, 0, 0, 0.25)',
+		radioBorder: 'rgba(0, 0, 0, 0.4)',
+		inputBorder: 'rgba(0, 0, 0, 0.42)',
+		inputLabel: 'rgba(0, 0, 0, 0.54)',
+		inputText: '#000',
+
+		buttonBg: 'rgba(0, 0, 0, 0.05)',
+		buttonHoverBg: 'rgba(0, 0, 0, 0.1)',
+		buttonActiveBg: 'rgba(0, 0, 0, 0.15)',
+
+		autocompleteItemHoverBg: 'rgba(0, 0, 0, 0.1)',
+		autocompleteItemText: 'rgba(0, 0, 0, 0.8)',
+		autocompleteItemTextSub: 'rgba(0, 0, 0, 0.3)',
+
+		cwButtonBg: '#b1b9c1',
+		cwButtonFg: '#fff',
+		cwButtonHoverBg: '#bbc4ce',
+
+		reactionPickerButtonHoverBg: '#eee',
+
+		reactionViewerBorder: 'rgba(0, 0, 0, 0.1)',
+
+		pollEditorInputBg: '#fff',
+
+		pollChoiceText: '#000',
+		pollChoiceBorder: 'rgba(0, 0, 0, 0.1)',
+
+		urlPreviewBorder: 'rgba(0, 0, 0, 0.1)',
+		urlPreviewBorderHover: 'rgba(0, 0, 0, 0.2)',
+		urlPreviewTitle: '$text',
+		urlPreviewText: ':alpha<0.7<$text',
+		urlPreviewInfo: ':alpha<0.8<$text',
+
+		calendarWeek: '#19a2a9',
+		calendarSaturdayOrSunday: '#ef95a0',
+		calendarDay: '#777',
+
+		materBg: 'rgba(0, 0, 0, 0.1)',
+
+		chartCaption: ':alpha<0.6<$text',
+
+		announcementsBg: '#f3f9ff',
+		announcementsTitle: '#4078c0',
+		announcementsText: '#57616f',
+
+		donationBg: '#fbead4',
+		donationFg: '#777d71',
+
+		googleSearchBg: '#fff',
+		googleSearchFg: '#55595c',
+		googleSearchBorder: 'rgba(0, 0, 0, 0.2)',
+		googleSearchHoverBorder: 'rgba(0, 0, 0, 0.3)',
+		googleSearchHoverButton: 'rgba(0, 0, 0, 0.05)',
+
+		mfmTitleBg: 'rgba(0, 0, 0, 0.07)',
+		mfmQuote: ':alpha<0.6<$text',
+		mfmQuoteLine: ':alpha<0.5<$text',
+
+		suspendedInfoBg: '#ffdbdb',
+		suspendedInfoFg: '#570808',
+		remoteInfoBg: '#fff0db',
+		remoteInfoFg: '#573c08',
+
+		messagingRoomBg: '#fff',
+		messagingRoomInfo: '#000',
+		messagingRoomDateDividerLine: 'rgba(0, 0, 0, 0.1)',
+		messagingRoomDateDividerText: 'rgba(0, 0, 0, 0.3)',
+		messagingRoomMessageInfo: 'rgba(0, 0, 0, 0.4)',
+		messagingRoomMessageBg: '#eee',
+		messagingRoomMessageFg: '#333',
+
+		formButtonBorder: 'rgba(0, 0, 0, 0.1)',
+		formButtonHoverBg: ':alpha<0.12<$primary',
+		formButtonHoverBorder: ':alpha<0.3<$primary',
+		formButtonActiveBg: ':alpha<0.12<$primary',
+
+		desktopHeaderBg: ':lighten<5<$secondary',
+		desktopHeaderFg: '$text',
+		desktopHeaderHoverFg: '#7b8c88',
+		desktopHeaderSearchBg: 'rgba(0, 0, 0, 0.05)',
+		desktopHeaderSearchHoverBg: 'rgba(0, 0, 0, 0.08)',
+		desktopHeaderSearchFg: '#000',
+		desktopNotificationBg: ':alpha<0.9<$secondary',
+		desktopNotificationFg: ':alpha<0.7<$text',
+		desktopNotificationShadow: 'rgba(0, 0, 0, 0.2)',
+		desktopPostFormBg: ':lighten<33<$primary',
+		desktopPostFormTextareaBg: '#fff',
+		desktopPostFormTextareaFg: '#333',
+		desktopPostFormTransparentButtonFg: ':alpha<0.5<$primary',
+		desktopPostFormTransparentButtonActiveGradientStart: ':lighten<30<$primary',
+		desktopPostFormTransparentButtonActiveGradientEnd: ':lighten<33<$primary',
+		desktopRenoteFormFooter: ':lighten<33<$primary',
+		desktopTimelineHeaderShadow: 'rgba(0, 0, 0, 0.08)',
+		desktopTimelineSrc: '#6f7477',
+		desktopTimelineSrcHover: '#525a5f',
+		desktopWindowTitle: '#666',
+		desktopWindowShadow: 'rgba(0, 0, 0, 0.2)',
+		desktopDriveBg: '#fff',
+		desktopDriveFolderBg: ':lighten<31<$primary',
+		desktopDriveFolderHoverBg: ':lighten<27<$primary',
+		desktopDriveFolderActiveBg: ':lighten<25<$primary',
+		desktopDriveFolderFg: ':darken<10<$primary',
+		desktopSettingsNavItem: ':alpha<0.8<$text',
+		desktopSettingsNavItemHover: ':darken<10<$text',
+
+		deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.1)',
+
+		mobileHeaderBg: ':lighten<5<$secondary',
+		mobileHeaderFg: '$text',
+		mobileNavBackdrop: 'rgba(0, 0, 0, 0.2)',
+		mobilePostFormDivider: 'rgba(0, 0, 0, 0.1)',
+		mobilePostFormTextareaBg: '#fff',
+		mobileDriveNavBg: ':alpha<0.75<$secondary',
+		mobileHomeTlItemHover: 'rgba(0, 0, 0, 0.05)',
+		mobileUserPageName: '#757c82',
+		mobileUserPageAcct: '#969ea5',
+		mobileUserPageDescription: '#757c82',
+		mobileUserPageFollowedBg: '#a7bec7',
+		mobileUserPageFollowedFg: '#fff',
+		mobileUserPageStatusHighlight: '#787e86',
+		mobileUserPageHeaderShadow: 'rgba(0, 0, 0, 0.07)',
+		mobileAnnouncement: 'rgba(155, 196, 232, 0.2)',
+		mobileAnnouncementFg: '#3f4967',
+		mobileSignedInAsBg: '#fcfff5',
+		mobileSignedInAsFg: '#2c662d',
+		mobileSignoutBg: '#fff6f5',
+		mobileSignoutFg: '#cc2727',
+
+		reversiBannerGradientStart: '#8bca3e',
+		reversiBannerGradientEnd: '#d6cf31',
+		reversiDescBg: 'rgba(0, 0, 0, 0.1)',
+		reversiListItemShadow: 'rgba(0, 0, 0, 0.15)',
+		reversiMapSelectBorder: 'rgba(0, 0, 0, 0.1)',
+		reversiMapSelectHoverBorder: 'rgba(0, 0, 0, 0.2)',
+		reversiRoomFormShadow: 'rgba(0, 0, 0, 0.1)',
+		reversiRoomFooterBg: ':alpha<0.9<$secondary',
+		reversiGameHeaderLine: '#c4cdd4',
+		reversiGameEmptyCell: 'rgba(0, 0, 0, 0.06)',
+		reversiGameEmptyCellMyTurn: 'rgba(0, 0, 0, 0.12)',
+		reversiGameEmptyCellCanPut: 'rgba(0, 0, 0, 0.9)',
+	},
+}
diff --git a/src/client/theme/pink.json b/src/client/theme/pink.json
deleted file mode 100644
index ddb56b46e1..0000000000
--- a/src/client/theme/pink.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-	"meta": {
-		"id": "e9c8c01d-9c15-48d0-9b5c-3d00843b5b36",
-		"name": "Pink",
-		"author": "syuilo",
-		"base": "light",
-		"vars": {
-			"primary": "rgb(251, 78, 112)",
-			"secondary": "rgb(255, 218, 240)",
-			"text": "rgb(113, 91, 102)"
-		}
-	},
-
-	"renoteGradient": "#ffb1c9",
-	"renoteText": "#ff588d",
-	"quoteBorder": "#ff6c9b"
-}
diff --git a/src/client/theme/pink.json5 b/src/client/theme/pink.json5
new file mode 100644
index 0000000000..2e136fba5d
--- /dev/null
+++ b/src/client/theme/pink.json5
@@ -0,0 +1,20 @@
+{
+	id: 'e9c8c01d-9c15-48d0-9b5c-3d00843b5b36',
+
+	name: 'Pink',
+	author: 'syuilo',
+
+	base: 'light',
+
+	vars: {
+		primary: 'rgb(251, 78, 112)',
+		secondary: 'rgb(255, 218, 240)',
+		text: 'rgb(113, 91, 102)',
+	},
+
+	props: {
+		renoteGradient: '#ffb1c9',
+		renoteText: '#ff588d',
+		quoteBorder: '#ff6c9b',
+	},
+}
diff --git a/webpack.config.ts b/webpack.config.ts
index 3b14ee4a8a..e1163133c0 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -196,6 +196,9 @@ module.exports = {
 		}, {
 			test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
 			loader: 'url-loader'
+		}, {
+			test: /\.json5$/,
+			loader: 'json5-loader'
 		}, {
 			test: /\.ts$/,
 			exclude: /node_modules/,

From 38139ee6c9c835bd30dbc64fb790bd08dc1916df Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 16:10:45 +0900
Subject: [PATCH 460/539] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E3=81=AB?=
 =?UTF-8?q?=E9=96=A2=E3=81=97=E3=81=A6=E5=BC=B7=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  2 ++
 .../app/common/views/components/theme.vue     | 31 +++++++++++++------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 08d3c51733..1453f1b0bb 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -309,6 +309,8 @@ common/views/components/theme.vue:
   select-theme: "テーマを選択してください"
   uninstall: "アンインストール"
   uninstalled: "「{}」をアンインストールしました"
+  author: "作者"
+  desc: "説明"
 
 common/views/components/cw-button.vue:
   hide: "隠す"
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 293238e542..7cec1529bb 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -52,13 +52,21 @@
 
 	<details>
 		<summary>%i18n:@installed-themes%</summary>
-		<ui-select v-model="selectedInstalledTheme" placeholder="%i18n:@select-theme%">
+		<ui-select v-model="selectedInstalledThemeId" placeholder="%i18n:@select-theme%">
 			<option v-for="x in installedThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
 		</ui-select>
-		<ui-textarea readonly :value="selectedInstalledThemeCode">
-			<span>%i18n:@theme-code%</span>
-		</ui-textarea>
-		<ui-button @click="uninstall()">%i18n:@uninstall%</ui-button>
+		<template v-if="selectedInstalledTheme">
+			<ui-input readonly :value="selectedInstalledTheme.author">
+				<span>%i18n:@author%</span>
+			</ui-input>
+			<ui-textarea v-if="selectedInstalledTheme.desc" readonly :value="selectedInstalledTheme.desc">
+				<span>%i18n:@desc%</span>
+			</ui-textarea>
+			<ui-textarea readonly :value="selectedInstalledThemeCode">
+				<span>%i18n:@theme-code%</span>
+			</ui-textarea>
+			<ui-button @click="uninstall()">%i18n:@uninstall%</ui-button>
+		</template>
 	</details>
 </div>
 </template>
@@ -93,7 +101,7 @@ export default Vue.extend({
 	data() {
 		return {
 			installThemeCode: null,
-			selectedInstalledTheme: null,
+			selectedInstalledThemeId: null,
 			myThemeBase: 'light',
 			myThemeName: '',
 			myThemePrimary: lightTheme.vars.primary,
@@ -121,15 +129,20 @@ export default Vue.extend({
 			set(value) { this.$store.commit('device/set', { key: 'darkTheme', value }); }
 		},
 
+		selectedInstalledTheme() {
+			if (this.selectedInstalledThemeId == null) return null;
+			return this.installedThemes.find(x => x.id == this.selectedInstalledThemeId);
+		},
+
 		selectedInstalledThemeCode() {
 			if (this.selectedInstalledTheme == null) return null;
-			return JSON5.stringify(this.installedThemes.find(x => x.id == this.selectedInstalledTheme), null, '\t');
+			return JSON5.stringify(this.selectedInstalledTheme, null, '\t');
 		},
 
 		myTheme(): any {
 			return {
 				name: this.myThemeName,
-				author: this.$store.state.i.name,
+				author: this.$store.state.i.username,
 				base: this.myThemeBase,
 				vars: {
 					primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
@@ -198,7 +211,7 @@ export default Vue.extend({
 		},
 
 		uninstall() {
-			const theme = this.installedThemes.find(x => x.id == this.selectedInstalledTheme);
+			const theme = this.selectedInstalledTheme;
 			const themes = this.$store.state.device.themes.filter(t => t.id != theme.id);
 			this.$store.commit('device/set', {
 				key: 'themes', value: themes

From 6e04549a9b287113cf98aa3e0825647b492b8106 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 16:13:14 +0900
Subject: [PATCH 461/539] Enable JSON5 syntax

---
 .gitattributes | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitattributes b/.gitattributes
index 58a7812fdf..e0f637f9e5 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,3 +3,4 @@
 *.ai -diff -text
 yarn.lock -diff -text
 package-lock.json -diff -text
+*.json5 linguist-language=JavaScript

From b5745877ca7ce3c9cd4fb88ba6d4700ff0a9445e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 16:23:55 +0900
Subject: [PATCH 462/539] :art:

---
 .../app/common/views/components/theme.vue     | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 7cec1529bb..5cc779ee8e 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -15,7 +15,7 @@
 	</label>
 
 	<details class="creator">
-		<summary>%i18n:@create-a-theme%</summary>
+		<summary>%fa:palette% %i18n:@create-a-theme%</summary>
 		<div>
 			<span>%i18n:@base-theme%:</span>
 			<ui-radio v-model="myThemeBase" value="light">%i18n:@base-theme-light%</ui-radio>
@@ -38,20 +38,20 @@
 			<div style="padding-bottom:8px;">%i18n:@text-color%:</div>
 			<color-picker v-model="myThemeText"/>
 		</div>
-		<ui-button @click="preview()">%i18n:@preview-created-theme%</ui-button>
-		<ui-button primary @click="gen()">%i18n:@save-created-theme%</ui-button>
+		<ui-button @click="preview()">%fa:eye% %i18n:@preview-created-theme%</ui-button>
+		<ui-button primary @click="gen()">%fa:save R% %i18n:@save-created-theme%</ui-button>
 	</details>
 
 	<details>
-		<summary>%i18n:@install-a-theme%</summary>
+		<summary>%fa:download% %i18n:@install-a-theme%</summary>
 		<ui-textarea v-model="installThemeCode">
 			<span>%i18n:@theme-code%</span>
 		</ui-textarea>
-		<ui-button @click="install()">%i18n:@install%</ui-button>
+		<ui-button @click="install()">%fa:check% %i18n:@install%</ui-button>
 	</details>
 
 	<details>
-		<summary>%i18n:@installed-themes%</summary>
+		<summary>%fa:folder-open% %i18n:@installed-themes%</summary>
 		<ui-select v-model="selectedInstalledThemeId" placeholder="%i18n:@select-theme%">
 			<option v-for="x in installedThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
 		</ui-select>
@@ -65,7 +65,7 @@
 			<ui-textarea readonly :value="selectedInstalledThemeCode">
 				<span>%i18n:@theme-code%</span>
 			</ui-textarea>
-			<ui-button @click="uninstall()">%i18n:@uninstall%</ui-button>
+			<ui-button @click="uninstall()">%fa:trash-alt R% %i18n:@uninstall%</ui-button>
 		</template>
 	</details>
 </div>
@@ -238,6 +238,11 @@ export default Vue.extend({
 
 <style lang="stylus" scoped>
 .nicnklzforebnpfgasiypmpdaaglujqm
+	> details
+		margin-top 16px
+		padding-top 16px
+		border-top solid 1px var(--faceDivider)
+
 	> .creator
 		> div
 			padding 16px 0

From c09a2a37fe3ab130969dd143b0ee65706871951f Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 2 Oct 2018 16:27:36 +0900
Subject: [PATCH 463/539] =?UTF-8?q?=E3=83=AA=E3=83=A2=E3=83=BC=E3=83=88?=
 =?UTF-8?q?=E3=81=AE=E3=83=94=E3=83=B3=E7=95=99=E3=82=81=E6=8A=95=E7=A8=BF?=
 =?UTF-8?q?=E5=8F=96=E5=BE=97=E5=AF=BE=E5=BF=9C=20(#2798)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fetch featured

* Handle featured change

* Fix typo
---
 src/models/user.ts                            |  1 +
 src/remote/activitypub/kernel/add/index.ts    | 22 ++++++
 src/remote/activitypub/kernel/index.ts        | 10 +++
 src/remote/activitypub/kernel/remove/index.ts | 22 ++++++
 src/remote/activitypub/models/note.ts         |  4 +-
 src/remote/activitypub/models/person.ts       | 46 +++++++++++-
 src/remote/activitypub/resolver.ts            |  4 +-
 src/remote/activitypub/type.ts                | 10 +++
 src/server/api/endpoints/i/pin.ts             | 40 ++--------
 src/server/api/endpoints/i/unpin.ts           | 30 ++------
 src/services/i/pin.ts                         | 73 ++++++++++++++++++-
 11 files changed, 199 insertions(+), 63 deletions(-)
 create mode 100644 src/remote/activitypub/kernel/add/index.ts
 create mode 100644 src/remote/activitypub/kernel/remove/index.ts

diff --git a/src/models/user.ts b/src/models/user.ts
index 8ff91d3f45..d2124bda74 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -113,6 +113,7 @@ export interface ILocalUser extends IUserBase {
 export interface IRemoteUser extends IUserBase {
 	inbox: string;
 	sharedInbox?: string;
+	featured?: string;
 	endpoints: string[];
 	uri: string;
 	url?: string;
diff --git a/src/remote/activitypub/kernel/add/index.ts b/src/remote/activitypub/kernel/add/index.ts
new file mode 100644
index 0000000000..eb2dba5b21
--- /dev/null
+++ b/src/remote/activitypub/kernel/add/index.ts
@@ -0,0 +1,22 @@
+import { IRemoteUser } from '../../../../models/user';
+import { IAdd } from '../../type';
+import { resolveNote } from '../../models/note';
+import { addPinned } from '../../../../services/i/pin';
+
+export default async (actor: IRemoteUser, activity: IAdd): Promise<void> => {
+	if ('actor' in activity && actor.uri !== activity.actor) {
+		throw new Error('invalid actor');
+	}
+
+	if (activity.target == null) {
+		throw new Error('target is null');
+	}
+
+	if (activity.target === actor.featured) {
+		const note = await resolveNote(activity.object);
+		await addPinned(actor, note._id);
+		return;
+	}
+
+	throw new Error(`unknown target: ${activity.target}`);
+};
diff --git a/src/remote/activitypub/kernel/index.ts b/src/remote/activitypub/kernel/index.ts
index 752a9bd2e2..52b0efc730 100644
--- a/src/remote/activitypub/kernel/index.ts
+++ b/src/remote/activitypub/kernel/index.ts
@@ -8,6 +8,8 @@ import like from './like';
 import announce from './announce';
 import accept from './accept';
 import reject from './reject';
+import add from './add';
+import remove from './remove';
 
 const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
 	switch (activity.type) {
@@ -31,6 +33,14 @@ const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
 		await reject(actor, activity);
 		break;
 
+	case 'Add':
+		await add(actor, activity).catch(err => console.log(err));
+		break;
+
+	case 'Remove':
+		await remove(actor, activity).catch(err => console.log(err));
+		break;
+
 	case 'Announce':
 		await announce(actor, activity);
 		break;
diff --git a/src/remote/activitypub/kernel/remove/index.ts b/src/remote/activitypub/kernel/remove/index.ts
new file mode 100644
index 0000000000..91b207c80d
--- /dev/null
+++ b/src/remote/activitypub/kernel/remove/index.ts
@@ -0,0 +1,22 @@
+import { IRemoteUser } from '../../../../models/user';
+import { IRemove } from '../../type';
+import { resolveNote } from '../../models/note';
+import { removePinned } from '../../../../services/i/pin';
+
+export default async (actor: IRemoteUser, activity: IRemove): Promise<void> => {
+	if ('actor' in activity && actor.uri !== activity.actor) {
+		throw new Error('invalid actor');
+	}
+
+	if (activity.target == null) {
+		throw new Error('target is null');
+	}
+
+	if (activity.target === actor.featured) {
+		const note = await resolveNote(activity.object);
+		await removePinned(actor, note._id);
+		return;
+	}
+
+	throw new Error(`unknown target: ${activity.target}`);
+};
diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index b4afda765a..d49cf53079 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -56,7 +56,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
 	log(`Creating the Note: ${note.id}`);
 
 	// 投稿者をフェッチ
-	const actor = await resolvePerson(note.attributedTo) as IRemoteUser;
+	const actor = await resolvePerson(note.attributedTo, null, resolver) as IRemoteUser;
 
 	// 投稿者が凍結されていたらスキップ
 	if (actor.isSuspended) {
@@ -73,7 +73,7 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
 			visibility = 'followers';
 		} else {
 			visibility = 'specified';
-			visibleUsers = await Promise.all(note.to.map(uri => resolvePerson(uri)));
+			visibleUsers = await Promise.all(note.to.map(uri => resolvePerson(uri, null, resolver)));
 		}
 	}
 	//#endergion
diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index dff38f5460..ee95e43ad3 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -3,15 +3,16 @@ import { toUnicode } from 'punycode';
 import * as debug from 'debug';
 
 import config from '../../../config';
-import User, { validateUsername, isValidName, IUser, IRemoteUser } from '../../../models/user';
+import User, { validateUsername, isValidName, IUser, IRemoteUser, isRemoteUser } from '../../../models/user';
 import Resolver from '../resolver';
 import { resolveImage } from './image';
-import { isCollectionOrOrderedCollection, IPerson } from '../type';
+import { isCollectionOrOrderedCollection, isCollection, IPerson } from '../type';
 import { IDriveFile } from '../../../models/drive-file';
 import Meta from '../../../models/meta';
 import htmlToMFM from '../../../mfm/html-to-mfm';
 import { updateUserStats } from '../../../services/update-chart';
 import { URL } from 'url';
+import { resolveNote } from './note';
 
 const log = debug('misskey:activitypub');
 
@@ -155,6 +156,7 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
 			},
 			inbox: person.inbox,
 			sharedInbox: person.sharedInbox,
+			featured: person.featured,
 			endpoints: person.endpoints,
 			uri: person.id,
 			url: person.url,
@@ -211,6 +213,7 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
 	user.bannerUrl = bannerUrl;
 	//#endregion
 
+	await updateFeatured(user._id).catch(err => console.log(err));
 	return user;
 }
 
@@ -282,6 +285,7 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
 			updatedAt: new Date(),
 			inbox: person.inbox,
 			sharedInbox: person.sharedInbox,
+			featured: person.featured,
 			avatarId: avatar ? avatar._id : null,
 			bannerId: banner ? banner._id : null,
 			avatarUrl: (avatar && avatar.metadata.thumbnailUrl) ? avatar.metadata.thumbnailUrl : (avatar && avatar.metadata.url) ? avatar.metadata.url : null,
@@ -303,6 +307,8 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
 			},
 		}
 	});
+
+	await updateFeatured(exist._id).catch(err => console.log(err));
 }
 
 /**
@@ -311,7 +317,7 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
  * Misskeyに対象のPersonが登録されていればそれを返し、そうでなければ
  * リモートサーバーからフェッチしてMisskeyに登録しそれを返します。
  */
-export async function resolvePerson(uri: string, verifier?: string): Promise<IUser> {
+export async function resolvePerson(uri: string, verifier?: string, resolver?: Resolver): Promise<IUser> {
 	if (typeof uri !== 'string') throw 'uri is not string';
 
 	//#region このサーバーに既に登録されていたらそれを返す
@@ -323,5 +329,37 @@ export async function resolvePerson(uri: string, verifier?: string): Promise<IUs
 	//#endregion
 
 	// リモートサーバーからフェッチしてきて登録
-	return await createPerson(uri);
+	if (resolver == null) resolver = new Resolver();
+	return await createPerson(uri, resolver);
+}
+
+export async function updateFeatured(userId: mongo.ObjectID) {
+	const user = await User.findOne({ _id: userId });
+	if (!isRemoteUser(user)) return;
+	if (!user.featured) return;
+
+	log(`Updating the featured: ${user.uri}`);
+
+	const resolver = new Resolver();
+
+	// Resolve to (Ordered)Collection Object
+	const collection = await resolver.resolveCollection(user.featured);
+	if (!isCollectionOrOrderedCollection(collection)) throw new Error(`Object is not Collection or OrderedCollection`);
+
+	// Resolve to Object(may be Note) arrays
+	const unresolvedItems = isCollection(collection) ? collection.items : collection.orderedItems;
+	const items = await resolver.resolve(unresolvedItems);
+	if (!Array.isArray(items)) throw new Error(`Collection items is not an array`);
+
+	// Resolve and regist Notes
+	const featuredNotes = await Promise.all(items
+		.filter(item => item.type === 'Note')
+		.slice(0, 5)
+		.map(item => resolveNote(item, resolver)));
+
+	await User.update({ _id: user._id }, {
+		$set: {
+			pinnedNoteIds: featuredNotes.map(note => note._id)
+		}
+	});
 }
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index e1c12e7e62..215e5e8704 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -19,11 +19,11 @@ export default class Resolver {
 
 		switch (collection.type) {
 		case 'Collection':
-			collection.objects = collection.object.items;
+			collection.objects = collection.items;
 			break;
 
 		case 'OrderedCollection':
-			collection.objects = collection.object.orderedItems;
+			collection.objects = collection.orderedItems;
 			break;
 
 		default:
diff --git a/src/remote/activitypub/type.ts b/src/remote/activitypub/type.ts
index 7bbea5fd18..5c06ee4ffe 100644
--- a/src/remote/activitypub/type.ts
+++ b/src/remote/activitypub/type.ts
@@ -91,6 +91,14 @@ export interface IReject extends IActivity {
 	type: 'Reject';
 }
 
+export interface IAdd extends IActivity {
+	type: 'Add';
+}
+
+export interface IRemove extends IActivity {
+	type: 'Remove';
+}
+
 export interface ILike extends IActivity {
 	type: 'Like';
 	_misskey_reaction: string;
@@ -109,5 +117,7 @@ export type Object =
 	IFollow |
 	IAccept |
 	IReject |
+	IAdd |
+	IRemove |
 	ILike |
 	IAnnounce;
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index f9ae032b11..bf729ca091 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,8 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import User, { ILocalUser } from '../../../../models/user';
-import Note from '../../../../models/note';
+import { ILocalUser } from '../../../../models/user';
 import { pack } from '../../../../models/user';
-import { deliverPinnedChange } from '../../../../services/i/pin';
+import { addPinned } from '../../../../services/i/pin';
 import getParams from '../../get-params';
 
 export const meta = {
@@ -27,41 +26,18 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	const [ps, psErr] = getParams(meta, params);
 	if (psErr) return rej(psErr);
 
-	// Fetch pinee
-	const note = await Note.findOne({
-		_id: ps.noteId,
-		userId: user._id
-	});
-
-	if (note === null) {
-		return rej('note not found');
+	// Processing
+	try {
+		await addPinned(user, ps.noteId);
+	} catch (e) {
+		return rej(e.message);
 	}
 
-	const pinnedNoteIds = user.pinnedNoteIds || [];
-
-	if (pinnedNoteIds.length > 5) {
-		return rej('cannot pin more notes');
-	}
-
-	if (pinnedNoteIds.some(id => id.equals(note._id))) {
-		return rej('already exists');
-	}
-
-	pinnedNoteIds.unshift(note._id);
-
-	await User.update(user._id, {
-		$set: {
-			pinnedNoteIds: pinnedNoteIds
-		}
-	});
-
+	// Serialize
 	const iObj = await pack(user, user, {
 		detail: true
 	});
 
 	// Send response
 	res(iObj);
-
-	// Send Add to followers
-	deliverPinnedChange(user._id, note._id, true);
 });
diff --git a/src/server/api/endpoints/i/unpin.ts b/src/server/api/endpoints/i/unpin.ts
index 82625ae5fb..2a81993e4b 100644
--- a/src/server/api/endpoints/i/unpin.ts
+++ b/src/server/api/endpoints/i/unpin.ts
@@ -1,8 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import User, { ILocalUser } from '../../../../models/user';
-import Note from '../../../../models/note';
+import { ILocalUser } from '../../../../models/user';
 import { pack } from '../../../../models/user';
-import { deliverPinnedChange } from '../../../../services/i/pin';
+import { removePinned } from '../../../../services/i/pin';
 import getParams from '../../get-params';
 
 export const meta = {
@@ -27,31 +26,18 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	const [ps, psErr] = getParams(meta, params);
 	if (psErr) return rej(psErr);
 
-	// Fetch unpinee
-	const note = await Note.findOne({
-		_id: ps.noteId,
-		userId: user._id
-	});
-
-	if (note === null) {
-		return rej('note not found');
+	// Processing
+	try {
+		await removePinned(user, ps.noteId);
+	} catch (e) {
+		return rej(e.message);
 	}
 
-	const pinnedNoteIds = (user.pinnedNoteIds || []).filter(id => !id.equals(note._id));
-
-	await User.update(user._id, {
-		$set: {
-			pinnedNoteIds: pinnedNoteIds
-		}
-	});
-
+	// Serialize
 	const iObj = await pack(user, user, {
 		detail: true
 	});
 
 	// Send response
 	res(iObj);
-
-	// Send Remove to followers
-	deliverPinnedChange(user._id, note._id, false);
 });
diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
index 8b7287e68d..a39cc1e597 100644
--- a/src/services/i/pin.ts
+++ b/src/services/i/pin.ts
@@ -1,12 +1,83 @@
 import config from '../../config';
 import * as mongo from 'mongodb';
-import User, { isLocalUser, isRemoteUser, ILocalUser } from '../../models/user';
+import User, { isLocalUser, isRemoteUser, ILocalUser, IUser } from '../../models/user';
+import Note from '../../models/note';
 import Following from '../../models/following';
 import renderAdd from '../../remote/activitypub/renderer/add';
 import renderRemove from '../../remote/activitypub/renderer/remove';
 import packAp from '../../remote/activitypub/renderer';
 import { deliver } from '../../queue';
 
+/**
+ * 指定した投稿をピン留めします
+ * @param user
+ * @param noteId
+ */
+export async function addPinned(user: IUser, noteId: mongo.ObjectID) {
+	// Fetch pinee
+	const note = await Note.findOne({
+		_id: noteId,
+		userId: user._id
+	});
+
+	if (note === null) {
+		throw new Error('note not found');
+	}
+
+	const pinnedNoteIds = user.pinnedNoteIds || [];
+
+	if (pinnedNoteIds.length > 5) {
+		throw new Error('cannot pin more notes');
+	}
+
+	if (pinnedNoteIds.some(id => id.equals(note._id))) {
+		throw new Error('already exists');
+	}
+
+	pinnedNoteIds.unshift(note._id);
+
+	await User.update(user._id, {
+		$set: {
+			pinnedNoteIds: pinnedNoteIds
+		}
+	});
+
+	// Deliver to remote followers
+	if (isLocalUser(user)) {
+		deliverPinnedChange(user._id, note._id, true);
+	}
+}
+
+/**
+ * 指定した投稿のピン留めを解除します
+ * @param user
+ * @param noteId
+ */
+export async function removePinned(user: IUser, noteId: mongo.ObjectID) {
+	// Fetch unpinee
+	const note = await Note.findOne({
+		_id: noteId,
+		userId: user._id
+	});
+
+	if (note === null) {
+		throw new Error('note not found');
+	}
+
+	const pinnedNoteIds = (user.pinnedNoteIds || []).filter(id => !id.equals(note._id));
+
+	await User.update(user._id, {
+		$set: {
+			pinnedNoteIds: pinnedNoteIds
+		}
+	});
+
+	// Deliver to remote followers
+	if (isLocalUser(user)) {
+		deliverPinnedChange(user._id, noteId, false);
+	}
+}
+
 export async function deliverPinnedChange(userId: mongo.ObjectID, noteId: mongo.ObjectID, isAddition: boolean) {
 	const user = await User.findOne({
 		_id: userId

From 89d5df20a5e9f5d0152ef286acde7138d64e1e98 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 2 Oct 2018 16:29:05 +0900
Subject: [PATCH 464/539] 9.1.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index c12b8861c6..d57b93c8bc 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.0.0",
-	"clientVersion": "1.0.10049",
+	"version": "9.1.0",
+	"clientVersion": "1.0.10056",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 7e50e03cfb019f764bb6205c606ecf01a6cb438b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?=
 <root@acid-chicken.com>
Date: Tue, 2 Oct 2018 20:23:27 +0900
Subject: [PATCH 465/539] Update README.md [AUTOGEN] (#2801)

---
 README.md | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 4de6151080..5247671dda 100644
--- a/README.md
+++ b/README.md
@@ -73,17 +73,17 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 <table><tr>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1?token-time=2145916800&token-hash=d6P5MWHHsCMxUuBAEPAoVc5wLUR19mIhqAq7Ma9h9rI%3D" alt="ne_moni"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/1?token-time=2145916800&token-hash=f03BFb4S2FUx9YEt87TnEmifb4h33OywGBW2akQVtQY%3D" alt="Melilot"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/2?token-time=2145916800&token-hash=rwZ8qvbm_kpA4ib3kc07tVKupXeySpY5ATQFGxfL9v0%3D" alt="Axella"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/2?token-time=2145916800&token-hash=mgPdX9TqZxEg4TTPuc477dxhIgYk9246qafjWZEqZ7g%3D" alt="Melilot"></td>
+<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/2?token-time=2145916800&token-hash=rwZ8qvbm_kpA4ib3kc07tVKupXeySpY5ATQFGxfL9v0%3D" alt="Xeltica"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
 <td><img src="https://c8.patreon.com/2/100/12718187" alt="Peter G."></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></td>
 </tr><tr>
-<td><a href="https://www.patreon.com/user?u=12731202">negao</a></td>
+<td><a href="https://www.patreon.com/negao">negao</a></td>
 <td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
 <td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
-<td><a href="https://www.patreon.com/AxellaMC">Axella</a></td>
+<td><a href="https://www.patreon.com/AxellaMC">Xeltica</a></td>
 <td><a href="https://www.patreon.com/user?u=3384329">べすれい</a></td>
 <td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
 <td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
@@ -91,19 +91,17 @@ Please see [Contribution guide](./CONTRIBUTING.md).
 </tr></table>
 <table><tr>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/2?token-time=2145916800&token-hash=zElv7ZcPL3viGsXbNG_KWiKrbV0vvw1gk0panx8DJoo%3D" alt="Naoki Kosaka"></td>
-<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12931605/ead494101f364dffa90efe49e36fb494/1?token-time=2145916800&token-hash=NzSFPjIlodXyv41rwK61aZWVZWfI4surJaNj8vWKvqM%3D" alt="Reiju"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td>
 <td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></td>
 </tr><tr>
 <td><a href="https://www.patreon.com/user?u=5881381">Naoki Kosaka</a></td>
-<td><a href="https://www.patreon.com/user?u=12931605">Reiju</a></td>
 <td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
 <td><a href="https://www.patreon.com/dansup">dansup</a></td>
 <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
 </tr></table>
 
-**Last updated:** Sun, 02 Sep 2018 05:30:06 UTC
+**Last updated:** Tue, 02 Oct 2018 09:25:07 UTC
 <!-- PATREON_END -->
 
 :four_leaf_clover: Copyright

From 7d11c8b767a43837d336099790e89e7b550554a4 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Tue, 2 Oct 2018 23:42:46 +0900
Subject: [PATCH 466/539] Improve admin UI (#2802)

---
 .../views/pages/admin/admin.announcements.vue | 17 ++++++++++++--
 .../views/pages/admin/admin.dashboard.vue     |  8 ++++++-
 .../views/pages/admin/admin.hashtags.vue      |  4 ++++
 .../views/pages/admin/admin.suspend-user.vue  | 22 ++++++++++++-------
 .../pages/admin/admin.unsuspend-user.vue      | 21 ++++++++++++------
 .../views/pages/admin/admin.unverify-user.vue | 22 ++++++++++++-------
 .../views/pages/admin/admin.verify-user.vue   | 22 ++++++++++++-------
 .../app/desktop/views/pages/admin/admin.vue   | 12 +++++++---
 8 files changed, 91 insertions(+), 37 deletions(-)

diff --git a/src/client/app/desktop/views/pages/admin/admin.announcements.vue b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
index 272016b3f9..722fa227cf 100644
--- a/src/client/app/desktop/views/pages/admin/admin.announcements.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="qldxjjsrseehkusjuoooapmsprvfrxyl mk-admin-card">
 	<header>%i18n:@announcements%</header>
-	<textarea v-model="broadcasts"></textarea>
+	<textarea v-model="broadcasts" placeholder='[ { "title": "Title1", "text": "Text1" }, { "title": "Title2", "text": "Text2" } ]'></textarea>
 	<button class="ui" @click="save">%i18n:@save%</button>
 </div>
 </template>
@@ -22,8 +22,21 @@ export default Vue.extend({
 	},
 	methods: {
 		save() {
+			let json;
+
+			try {
+				json = JSON.parse(this.broadcasts);
+			} catch (e) {
+				(this as any).os.apis.dialog({ text: `Failed: ${e}` });
+				return;
+			}
+
 			(this as any).api('admin/update-meta', {
-				broadcasts: JSON.parse(this.broadcasts)
+				broadcasts: json
+			}).then(() => {
+				(this as any).os.apis.dialog({ text: `Saved` });
+			}.catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed ${e}` });
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index f5734012bd..1b0c5f8125 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -13,7 +13,7 @@
 		<x-cpu-memory :connection="connection"/>
 	</div>
 
-	<div class="form">
+	<div v-if="this.$store.state.i && this.$store.state.i.isAdmin" class="form">
 		<div>
 			<label>
 				<p>%i18n:@banner-url%</p>
@@ -81,6 +81,8 @@ export default Vue.extend({
 		invite() {
 			(this as any).api('admin/invite').then(x => {
 				this.inviteCode = x.code;
+			}).catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed ${e}` });
 			});
 		},
 		updateMeta() {
@@ -88,6 +90,10 @@ export default Vue.extend({
 				disableRegistration: this.disableRegistration,
 				disableLocalTimeline: this.disableLocalTimeline,
 				bannerUrl: this.bannerUrl
+			}).then(() => {
+				(this as any).os.apis.dialog({ text: `Saved` });
+			}).catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed ${e}` });
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/pages/admin/admin.hashtags.vue b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
index f491b85959..10bab1cbd7 100644
--- a/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.hashtags.vue
@@ -24,6 +24,10 @@ export default Vue.extend({
 		save() {
 			(this as any).api('admin/update-meta', {
 				hidedTags: this.hidedTags.split('\n')
+			}).then(() => {
+				(this as any).os.apis.dialog({ text: `Saved` });
+			}).catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed ${e}` });
 			});
 		}
 	}
diff --git a/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue b/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
index 32295e3795..a8ff937bbe 100644
--- a/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.suspend-user.vue
@@ -21,18 +21,24 @@ export default Vue.extend({
 		async suspendUser() {
 			this.suspending = true;
 
-			const user = await (this as any).os.api(
-				"users/show",
-				parseAcct(this.username)
-			);
+			const process = async () => {
+				const user = await (this as any).os.api(
+					"users/show",
+					parseAcct(this.username)
+				);
 
-			await (this as any).os.api("admin/suspend-user", {
-				userId: user.id
+				await (this as any).os.api("admin/suspend-user", {
+					userId: user.id
+				});
+
+				(this as any).os.apis.dialog({ text: "%i18n:@suspended%" });
+			};
+
+			await process().catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed: ${e}` });
 			});
 
 			this.suspending = false;
-
-			(this as any).os.apis.dialog({ text: "%i18n:@suspended%" });
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue b/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
index d6905fe9c0..146f5a41d4 100644
--- a/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.unsuspend-user.vue
@@ -21,18 +21,25 @@ export default Vue.extend({
 		async unsuspendUser() {
 			this.unsuspending = true;
 
-			const user = await (this as any).os.api(
-				"users/show",
-				parseAcct(this.username)
-			);
+			const process = async () => {
+				const user = await (this as any).os.api(
+					"users/show",
+					parseAcct(this.username)
+				);
 
-			await (this as any).os.api("admin/unsuspend-user", {
-				userId: user.id
+				await (this as any).os.api("admin/unsuspend-user", {
+					userId: user.id
+				});
+
+				(this as any).os.apis.dialog({ text: "%i18n:@unsuspended%" });
+			};
+
+			await process().catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed: ${e}` });
 			});
 
 			this.unsuspending = false;
 
-			(this as any).os.apis.dialog({ text: "%i18n:@unsuspended%" });
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue b/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
index d0cf635a98..5e0fdae5c1 100644
--- a/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.unverify-user.vue
@@ -21,18 +21,24 @@ export default Vue.extend({
 		async unverifyUser() {
 			this.unverifying = true;
 
-			const user = await (this as any).os.api(
-				"users/show",
-				parseAcct(this.username)
-			);
+			const process = async () => {
+				const user = await (this as any).os.api(
+					"users/show",
+					parseAcct(this.username)
+				);
 
-			await (this as any).os.api("admin/unverify-user", {
-				userId: user.id
+				await (this as any).os.api("admin/unverify-user", {
+					userId: user.id
+				});
+
+				(this as any).os.apis.dialog({ text: "%i18n:@unverified%" });
+			};
+
+			await process().catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed: ${e}` });
 			});
 
 			this.unverifying = false;
-
-			(this as any).os.apis.dialog({ text: "%i18n:@unverified%" });
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/pages/admin/admin.verify-user.vue b/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
index 9c0b0209b7..d237a5f9c1 100644
--- a/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.verify-user.vue
@@ -21,18 +21,24 @@ export default Vue.extend({
 		async verifyUser() {
 			this.verifying = true;
 
-			const user = await (this as any).os.api(
-				"users/show",
-				parseAcct(this.username)
-			);
+			const process = async () => {
+				const user = await (this as any).os.api(
+					"users/show",
+					parseAcct(this.username)
+				);
 
-			await (this as any).os.api("admin/verify-user", {
-				userId: user.id
+				await (this as any).os.api("admin/verify-user", {
+					userId: user.id
+				});
+
+				(this as any).os.apis.dialog({ text: "%i18n:@verified%" });
+			};
+
+			await process().catch(e => {
+				(this as any).os.apis.dialog({ text: `Failed: ${e}` });
 			});
 
 			this.verifying = false;
-
-			(this as any).os.apis.dialog({ text: "%i18n:@verified%" });
 		}
 	}
 });
diff --git a/src/client/app/desktop/views/pages/admin/admin.vue b/src/client/app/desktop/views/pages/admin/admin.vue
index b874915f05..ad417e5121 100644
--- a/src/client/app/desktop/views/pages/admin/admin.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.vue
@@ -3,9 +3,15 @@
 	<nav>
 		<ul>
 			<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }">%fa:chalkboard .fw%%i18n:@dashboard%</li>
-			<li @click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
-			<li @click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
-			<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }">%fa:hashtag .fw%%i18n:@hashtags%</li>
+
+			<li v-if="this.$store.state.i && this.$store.state.i.isAdmin"
+				@click="nav('users')" :class="{ active: page == 'users' }">%fa:users .fw%%i18n:@users%</li>
+
+			<li v-if="this.$store.state.i && this.$store.state.i.isAdmin"
+				@click="nav('announcements')" :class="{ active: page == 'announcements' }">%fa:broadcast-tower .fw%%i18n:@announcements%</li>
+
+			<li v-if="this.$store.state.i && this.$store.state.i.isAdmin"
+				@click="nav('hashtags')" :class="{ active: page == 'hashtags' }">%fa:hashtag .fw%%i18n:@hashtags%</li>
 
 			<!-- <li @click="nav('drive')" :class="{ active: page == 'drive' }">%fa:cloud .fw%%i18n:@drive%</li> -->
 			<!-- <li @click="nav('update')" :class="{ active: page == 'update' }">%i18n:@update%</li> -->

From 274cf1af1c4aaa41a01784920115f5cec5923fe3 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 02:57:31 +0900
Subject: [PATCH 467/539] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E9=96=A2?=
 =?UTF-8?q?=E9=80=A3=E3=81=AE=E6=A9=9F=E8=83=BD=E3=82=92=E5=BC=B7=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                             |  3 ++
 .../app/common/views/components/theme.vue     | 41 ++++++++++++++++---
 .../app/common/views/components/ui/button.vue | 18 ++++++--
 3 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 1453f1b0bb..65f72eced1 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -311,6 +311,9 @@ common/views/components/theme.vue:
   uninstalled: "「{}」をアンインストールしました"
   author: "作者"
   desc: "説明"
+  export: "エクスポート"
+  import: "インポート"
+  import-by-code: "またはコードをペースト"
 
 common/views/components/cw-button.vue:
   hide: "隠す"
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 5cc779ee8e..39d8e8aa97 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -44,10 +44,13 @@
 
 	<details>
 		<summary>%fa:download% %i18n:@install-a-theme%</summary>
+		<ui-button @click="import_()">%fa:file-import% %i18n:@import%</ui-button>
+		<input ref="file" type="file" style="display:none;" @change="onUpdateImportFile"/>
+		<p>%i18n:@import-by-code%:</p>
 		<ui-textarea v-model="installThemeCode">
 			<span>%i18n:@theme-code%</span>
 		</ui-textarea>
-		<ui-button @click="install()">%fa:check% %i18n:@install%</ui-button>
+		<ui-button @click="() => install(this.installThemeCode)">%fa:check% %i18n:@install%</ui-button>
 	</details>
 
 	<details>
@@ -65,6 +68,7 @@
 			<ui-textarea readonly :value="selectedInstalledThemeCode">
 				<span>%i18n:@theme-code%</span>
 			</ui-textarea>
+			<ui-button @click="export_()" link :download="`${selectedInstalledTheme.name}.misskeytheme`" ref="export">%fa:box% %i18n:@export%</ui-button>
 			<ui-button @click="uninstall()">%fa:trash-alt R% %i18n:@uninstall%</ui-button>
 		</template>
 	</details>
@@ -177,11 +181,11 @@ export default Vue.extend({
 	},
 
 	methods: {
-		install() {
+		install(code) {
 			let theme;
 
 			try {
-				theme = JSON5.parse(this.installThemeCode);
+				theme = JSON5.parse(code);
 			} catch (e) {
 				alert('%i18n:@invalid-theme%');
 				return;
@@ -219,6 +223,29 @@ export default Vue.extend({
 			alert('%i18n:@uninstalled%'.replace('{}', theme.name));
 		},
 
+		import_() {
+			(this.$refs.file as any).click();
+		}
+
+		export_() {
+			const blob = new Blob([this.selectedInstalledThemeCode], {
+				type: 'application/json5'
+			});
+			this.$refs.export.$el.href = window.URL.createObjectURL(blob);
+		},
+
+		onUpdateImportFile() {
+			const f = (this.$refs.file as any).files[0];
+
+			const reader = new FileReader();
+
+			reader.onload = e => {
+				this.install(e.target.result);
+			};
+
+			reader.readAsText(f);
+		},
+
 		preview() {
 			applyTheme(this.myTheme, false);
 		},
@@ -239,10 +266,14 @@ export default Vue.extend({
 <style lang="stylus" scoped>
 .nicnklzforebnpfgasiypmpdaaglujqm
 	> details
-		margin-top 16px
-		padding-top 16px
 		border-top solid 1px var(--faceDivider)
 
+		> summary
+			padding 16px 0
+
+		> *:last-child
+			margin-bottom 16px
+
 	> .creator
 		> div
 			padding 16px 0
diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue
index b29f8bb1c9..a509632520 100644
--- a/src/client/app/common/views/components/ui/button.vue
+++ b/src/client/app/common/views/components/ui/button.vue
@@ -1,7 +1,7 @@
 <template>
-<button class="dmtdnykelhudezerjlfpbhgovrgnqqgr" :class="[styl, { inline, primary }]" :type="type" @click="$emit('click')">
+<component class="dmtdnykelhudezerjlfpbhgovrgnqqgr" :is="link ? 'a' : 'button'" :class="[styl, { inline, primary }]" :type="type" @click="$emit('click')">
 	<slot></slot>
-</button>
+</component>
 </template>
 
 <script lang="ts">
@@ -21,6 +21,11 @@ export default Vue.extend({
 			type: Boolean,
 			required: false,
 			default: false
+		},
+		link: {
+			type: Boolean,
+			required: false,
+			default: false
 		}
 	},
 	data() {
@@ -35,15 +40,20 @@ export default Vue.extend({
 .dmtdnykelhudezerjlfpbhgovrgnqqgr
 	display block
 	width 100%
-	min-height 40px
 	margin 0
-	padding 0
+	padding 8px
+	text-align center
 	font-weight normal
 	font-size 16px
 	border none
 	border-radius 6px
 	outline none
 	box-shadow none
+	text-decoration none
+	user-select none
+
+	*
+		pointer-events none
 
 	&:focus
 		&:after

From a2a25eb5f81ddea039a62c6d05566dbdc9fa9c63 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 03:00:55 +0900
Subject: [PATCH 468/539] Improve usability

---
 src/client/app/common/views/components/theme.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 39d8e8aa97..b2defb212f 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -45,7 +45,7 @@
 	<details>
 		<summary>%fa:download% %i18n:@install-a-theme%</summary>
 		<ui-button @click="import_()">%fa:file-import% %i18n:@import%</ui-button>
-		<input ref="file" type="file" style="display:none;" @change="onUpdateImportFile"/>
+		<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
 		<p>%i18n:@import-by-code%:</p>
 		<ui-textarea v-model="installThemeCode">
 			<span>%i18n:@theme-code%</span>

From 16b6b1f2b3d83a6a113a229edbcabbd11675c66d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 03:07:46 +0900
Subject: [PATCH 469/539] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E9=96=A2?=
 =?UTF-8?q?=E9=80=A3=E6=A9=9F=E8=83=BD=E3=81=AE=E5=BC=B7=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 locales/ja-JP.yml                                | 1 +
 src/client/app/common/views/components/theme.vue | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 65f72eced1..62c6355c3b 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -314,6 +314,7 @@ common/views/components/theme.vue:
   export: "エクスポート"
   import: "インポート"
   import-by-code: "またはコードをペースト"
+  theme-name-required: "テーマ名は必須です。"
 
 common/views/components/cw-button.vue:
   hide: "隠す"
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index b2defb212f..4b0e6da24c 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -25,6 +25,9 @@
 			<ui-input v-model="myThemeName">
 				<span>%i18n:@theme-name%</span>
 			</ui-input>
+			<ui-textarea v-model="myThemeDesc">
+				<span>%i18n:@desc%</span>
+			</ui-textarea>
 		</div>
 		<div>
 			<div style="padding-bottom:8px;">%i18n:@primary-color%:</div>
@@ -108,6 +111,7 @@ export default Vue.extend({
 			selectedInstalledThemeId: null,
 			myThemeBase: 'light',
 			myThemeName: '',
+			myThemeDesc: '',
 			myThemePrimary: lightTheme.vars.primary,
 			myThemeSecondary: lightTheme.vars.secondary,
 			myThemeText: lightTheme.vars.text
@@ -147,6 +151,7 @@ export default Vue.extend({
 			return {
 				name: this.myThemeName,
 				author: this.$store.state.i.username,
+				desc: this.myThemeDesc,
 				base: this.myThemeBase,
 				vars: {
 					primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
@@ -252,6 +257,10 @@ export default Vue.extend({
 
 		gen() {
 			const theme = this.myTheme;
+			if (theme.name == null || theme.name.trim() == '') {
+				alert('%i18n:@theme-name-required%');
+				return;
+			}
 			theme.id = uuid();
 			const themes = this.$store.state.device.themes.concat(theme);
 			this.$store.commit('device/set', {

From 31de5304975dff5d1991a44b18be0c7c6ab5b650 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 03:09:04 +0900
Subject: [PATCH 470/539] 9.2.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index d57b93c8bc..c60bc24fe3 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.1.0",
-	"clientVersion": "1.0.10056",
+	"version": "9.2.0",
+	"clientVersion": "1.0.10062",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From 9a57efa6d92080aa444954a9737748e30e921d92 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 03:13:10 +0900
Subject: [PATCH 471/539] :v:

---
 src/client/theme/pink.json5 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/theme/pink.json5 b/src/client/theme/pink.json5
index 2e136fba5d..e228b4b4fa 100644
--- a/src/client/theme/pink.json5
+++ b/src/client/theme/pink.json5
@@ -1,7 +1,7 @@
 {
 	id: 'e9c8c01d-9c15-48d0-9b5c-3d00843b5b36',
 
-	name: 'Pink',
+	name: 'Strawberry Milk',
 	author: 'syuilo',
 
 	base: 'light',

From e8138803927dd605facf9354361baa44812e21c6 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Wed, 3 Oct 2018 12:37:23 +0900
Subject: [PATCH 472/539] =?UTF-8?q?6=E5=80=8B=E3=83=94=E3=83=B3=E7=95=99?=
 =?UTF-8?q?=E3=82=81=E3=81=A7=E3=81=8D=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86?=
 =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3=20(#2804)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/services/i/pin.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
index a39cc1e597..142fc18511 100644
--- a/src/services/i/pin.ts
+++ b/src/services/i/pin.ts
@@ -26,7 +26,7 @@ export async function addPinned(user: IUser, noteId: mongo.ObjectID) {
 
 	const pinnedNoteIds = user.pinnedNoteIds || [];
 
-	if (pinnedNoteIds.length > 5) {
+	if (pinnedNoteIds.length >= 5) {
 		throw new Error('cannot pin more notes');
 	}
 

From ed6450244df3ea171865be7ff958e448748b3f89 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Wed, 3 Oct 2018 12:39:03 +0900
Subject: [PATCH 473/539] Feature flags feature (#2803)

---
 src/server/api/endpoints/meta.ts | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 6c585d2c3a..9baf3c252f 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -39,6 +39,15 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null,
 		swPublickey: config.sw ? config.sw.public_key : null,
 		hidedTags: (me && me.isAdmin) ? meta.hidedTags : undefined,
-		bannerUrl: meta.bannerUrl
+		bannerUrl: meta.bannerUrl,
+		features: {
+			registration: !meta.disableRegistration,
+			localTimeLine: !meta.disableLocalTimeline,
+			elasticsearch: config.elasticsearch ? true : false,
+			recaptcha: config.recaptcha ? true : false,
+			objectStorage: config.drive && config.drive.storage === 'minio',
+			twitter: config.twitter ? true : false,
+			serviceWorker: config.sw ? true : false
+		}
 	});
 });

From 3537b3de8ece177be252235a17938d71db6a59f4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 22:05:17 +0900
Subject: [PATCH 474/539] Clean up

---
 gulpfile.ts                          |  4 +-
 src/client/app/base.pug              |  3 -
 src/client/app/safe.js               | 10 ---
 src/client/assets/code-highlight.css | 93 ----------------------------
 4 files changed, 1 insertion(+), 109 deletions(-)
 delete mode 100644 src/client/assets/code-highlight.css

diff --git a/gulpfile.ts b/gulpfile.ts
index 8a4a74d26c..356996314e 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -166,9 +166,7 @@ gulp.task('build:client:pug', [
 			.pipe(pug({
 				locals: {
 					themeColor: constants.themeColor,
-					facss: fa.dom.css(),
-					//hljscss: fs.readFileSync('./node_modules/highlight.js/styles/default.css', 'utf8')
-					hljscss: fs.readFileSync('./src/client/assets/code-highlight.css', 'utf8')
+					facss: fa.dom.css()
 				}
 			}))
 			.pipe(htmlmin({
diff --git a/src/client/app/base.pug b/src/client/app/base.pug
index 11b150bc67..ee9d4b6f6d 100644
--- a/src/client/app/base.pug
+++ b/src/client/app/base.pug
@@ -34,9 +34,6 @@ html
 		//- FontAwesome style
 		style #{facss}
 
-		//- highlight.js style
-		style #{hljscss}
-
 	body
 		noscript: p
 			| JavaScriptを有効にしてください
diff --git a/src/client/app/safe.js b/src/client/app/safe.js
index 3d73fa1a9c..026fc66c6e 100644
--- a/src/client/app/safe.js
+++ b/src/client/app/safe.js
@@ -12,16 +12,6 @@ if (!('fetch' in window)) {
 		'To run Misskey, please update your browser to latest version or try other browsers.');
 }
 
-// Detect Edge
-if (navigator.userAgent.toLowerCase().indexOf('edge') != -1) {
-	alert(
-		'現在、お使いのブラウザ(Microsoft Edge)ではMisskeyは正しく動作しません。' +
-		'サポートしているブラウザ: Google Chrome, Mozilla Firefox, Apple Safari など' +
-		'\n\n' +
-		'Currently, Misskey cannot run correctly on your browser (Microsoft Edge). ' +
-		'Supported browsers: Google Chrome, Mozilla Firefox, Apple Safari, etc');
-}
-
 // Check whether cookie enabled
 if (!navigator.cookieEnabled) {
 	alert(
diff --git a/src/client/assets/code-highlight.css b/src/client/assets/code-highlight.css
deleted file mode 100644
index f0807dc9c3..0000000000
--- a/src/client/assets/code-highlight.css
+++ /dev/null
@@ -1,93 +0,0 @@
-.hljs {
-	font-family: Consolas, 'Courier New', Courier, Monaco, monospace;
-}
-
-.hljs,
-.hljs-subst {
-	color: #444;
-}
-
-.hljs-comment {
-	color: #888888;
-}
-
-.hljs-keyword {
-	color: #2973b7;
-}
-
-.hljs-number {
-	color: #ae81ff;
-}
-
-.hljs-string {
-	color: #e96900;
-}
-
-.hljs-regexp {
-	color: #e9003f;
-}
-
-.hljs-attribute,
-.hljs-selector-tag,
-.hljs-meta-keyword,
-.hljs-doctag,
-.hljs-name {
-	font-weight: bold;
-}
-
-.hljs-type,
-.hljs-selector-id,
-.hljs-selector-class,
-.hljs-quote,
-.hljs-template-tag,
-.hljs-deletion {
-	color: #880000;
-}
-
-.hljs-title,
-.hljs-section {
-	color: #880000;
-	font-weight: bold;
-}
-
-.hljs-symbol,
-.hljs-variable,
-.hljs-template-variable,
-.hljs-link,
-.hljs-selector-attr,
-.hljs-selector-pseudo {
-	color: #BC6060;
-}
-
-/* Language color: hue: 90; */
-
-.hljs-literal {
-	color: #78A960;
-}
-
-.hljs-built_in,
-.hljs-bullet,
-.hljs-code,
-.hljs-addition {
-	color: #397300;
-}
-
-/* Meta color: hue: 200 */
-
-.hljs-meta {
-	color: #1f7199;
-}
-
-.hljs-meta-string {
-	color: #4d99bf;
-}
-
-/* Misc effects */
-
-.hljs-emphasis {
-	font-style: italic;
-}
-
-.hljs-strong {
-	font-weight: bold;
-}

From 06a7c2e1386904a7550e9e1b6a2e9ac751eb045e Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 22:14:05 +0900
Subject: [PATCH 475/539] Revert "Enable JSON5 syntax"

This reverts commit 6e04549a9b287113cf98aa3e0825647b492b8106.
---
 .gitattributes | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitattributes b/.gitattributes
index e0f637f9e5..58a7812fdf 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,4 +3,3 @@
 *.ai -diff -text
 yarn.lock -diff -text
 package-lock.json -diff -text
-*.json5 linguist-language=JavaScript

From 30c0f9869174127f917505fed79194127c1a0eb0 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 22:54:10 +0900
Subject: [PATCH 476/539] Fix bug

---
 src/models/note.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/models/note.ts b/src/models/note.ts
index 0efabc97d8..67ee525c31 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -294,7 +294,7 @@ export const pack = async (
 	}
 
 	// Populate files
-	_note.files = Promise.all(_note.fileIds.map((fileId: mongo.ObjectID) =>
+	_note.files = Promise.all((_note.fileIds || []).map((fileId: mongo.ObjectID) =>
 		packFile(fileId)
 	));
 

From 0eefd2922cd5abc5bbc07f100b61176d95c52493 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 22:55:08 +0900
Subject: [PATCH 477/539] 9.3.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c60bc24fe3..a101d1102e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.2.0",
+	"version": "9.3.0",
 	"clientVersion": "1.0.10062",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From d4b8e47bcbbd600e958ef309163595df43fe2d51 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 23:01:47 +0900
Subject: [PATCH 478/539] Fix

---
 gulpfile.ts | 1 -
 1 file changed, 1 deletion(-)

diff --git a/gulpfile.ts b/gulpfile.ts
index 356996314e..c47d90a1cc 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -2,7 +2,6 @@
  * Gulp tasks
  */
 
-import * as fs from 'fs';
 import * as gulp from 'gulp';
 import * as gutil from 'gulp-util';
 import * as ts from 'gulp-typescript';

From 7e50646edeb93d7f092caad212b7c7a50fd2553f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 3 Oct 2018 23:01:58 +0900
Subject: [PATCH 479/539] 9.3.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a101d1102e..3d2c256463 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.3.0",
+	"version": "9.3.1",
 	"clientVersion": "1.0.10062",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From baad11288af8ae1b950ecb5a62e23a70bee7d51d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 00:39:11 +0900
Subject: [PATCH 480/539] =?UTF-8?q?=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?=
 =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=8C=E8=A6=8B=E3=81=A4=E3=81=8B=E3=82=89?=
 =?UTF-8?q?=E3=81=AA=E3=81=8F=E3=81=A6=E3=82=82=E3=82=A8=E3=83=A9=E3=83=BC?=
 =?UTF-8?q?=E3=81=AB=E3=81=9B=E3=81=9Anull=E3=82=92=E8=BF=94=E3=81=99?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/models/note.ts                              | 17 ++++++++++++++++-
 src/models/user.ts                              | 14 ++++++++------
 src/server/api/endpoints/notes.ts               |  4 ++--
 src/server/api/endpoints/notes/conversation.ts  |  4 ++--
 .../api/endpoints/notes/global-timeline.ts      |  4 ++--
 .../api/endpoints/notes/hybrid-timeline.ts      |  4 ++--
 .../api/endpoints/notes/local-timeline.ts       |  4 ++--
 src/server/api/endpoints/notes/mentions.ts      |  4 ++--
 src/server/api/endpoints/notes/replies.ts       |  4 ++--
 src/server/api/endpoints/notes/reposts.ts       |  5 ++---
 src/server/api/endpoints/notes/search.ts        |  4 ++--
 src/server/api/endpoints/notes/search_by_tag.ts |  4 ++--
 src/server/api/endpoints/notes/timeline.ts      |  4 ++--
 .../api/endpoints/notes/user-list-timeline.ts   |  4 ++--
 src/server/api/endpoints/users/notes.ts         |  4 ++--
 15 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/src/models/note.ts b/src/models/note.ts
index 67ee525c31..75518d709f 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -226,6 +226,17 @@ export const hideNote = async (packedNote: any, meId: mongo.ObjectID) => {
 	}
 };
 
+export const packMany = async (
+	notes: (string | mongo.ObjectID | INote)[],
+	me?: string | mongo.ObjectID | IUser,
+	options?: {
+		detail?: boolean;
+		skipHide?: boolean;
+	}
+) => {
+	return (await Promise.all(notes.map(n => pack(n, me, options)))).filter(x => x != null);
+};
+
 /**
  * Pack a note for API response
  *
@@ -271,7 +282,11 @@ export const pack = async (
 		_note = deepcopy(note);
 	}
 
-	if (!_note) throw `invalid note arg ${note}`;
+	// 投稿がデータベース上に見つからなかったとき
+	if (_note == null) {
+		console.warn(`note not found on database: ${note}`);
+		return null;
+	}
 
 	const id = _note._id;
 
diff --git a/src/models/user.ts b/src/models/user.ts
index d2124bda74..3e8aefc4b1 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -3,7 +3,7 @@ const deepcopy = require('deepcopy');
 const sequential = require('promise-sequential');
 import rap from '@prezzemolo/rap';
 import db from '../db/mongodb';
-import Note, { pack as packNote, deleteNote } from './note';
+import Note, { packMany as packNoteMany, deleteNote } from './note';
 import Following, { deleteFollowing } from './following';
 import Mute, { deleteMute } from './mute';
 import { getFriendIds } from '../server/api/common/get-friends';
@@ -361,9 +361,11 @@ export const pack = (
 		_user = deepcopy(user);
 	}
 
-	// TODO: ここでエラーにするのではなくダミーのユーザーデータを返す
-	// SEE: https://github.com/syuilo/misskey/issues/1432
-	if (!_user) return reject('invalid user arg.');
+	// ユーザーがデータベース上に見つからなかったとき
+	if (_user == null) {
+		console.warn(`user not found on database: ${user}`);
+		return null;
+	}
 
 	// Me
 	const meId: mongo.ObjectID = me
@@ -468,9 +470,9 @@ export const pack = (
 	if (opts.detail) {
 		if (_user.pinnedNoteIds) {
 			// Populate pinned notes
-			_user.pinnedNotes = Promise.all(_user.pinnedNoteIds.map((id: mongo.ObjectId) => packNote(id, meId, {
+			_user.pinnedNotes = packNoteMany(_user.pinnedNoteIds, meId, {
 				detail: true
-			})));
+			});
 		}
 
 		if (meId && !meId.equals(_user.id)) {
diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts
index 5fa58d19de..d65710d33f 100644
--- a/src/server/api/endpoints/notes.ts
+++ b/src/server/api/endpoints/notes.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../misc/cafy-id';
-import Note, { pack } from '../../../models/note';
+import Note, { packMany } from '../../../models/note';
 import getParams from '../get-params';
 
 export const meta = {
@@ -116,5 +116,5 @@ export default (params: any) => new Promise(async (res, rej) => {
 		});
 
 	// Serialize
-	res(await Promise.all(notes.map(note => pack(note))));
+	res(await packMany(notes));
 });
diff --git a/src/server/api/endpoints/notes/conversation.ts b/src/server/api/endpoints/notes/conversation.ts
index 2782d14155..0c23f9e5fc 100644
--- a/src/server/api/endpoints/notes/conversation.ts
+++ b/src/server/api/endpoints/notes/conversation.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import Note, { pack, INote } from '../../../../models/note';
+import Note, { packMany, INote } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
 /**
@@ -52,5 +52,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	}
 
 	// Serialize
-	res(await Promise.all(conversation.map(note => pack(note, user))));
+	res(await packMany(conversation, user));
 });
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 5d93cd78ec..8362143bb2 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import { countIf } from '../../../../prelude/array';
@@ -113,5 +113,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	return await Promise.all(timeline.map(note => pack(note, user)));
+	return await packMany(timeline, user);
 };
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 5e39d8c78a..14b4432b33 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -2,7 +2,7 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { getFriends } from '../../common/get-friends';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import { countIf } from '../../../../prelude/array';
@@ -240,5 +240,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	return await Promise.all(timeline.map(note => pack(note, user)));
+	return await packMany(timeline, user);
 };
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 505454a82f..8ab07d8ea7 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import { countIf } from '../../../../prelude/array';
@@ -141,5 +141,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	return await Promise.all(timeline.map(note => pack(note, user)));
+	return await packMany(timeline, user);
 };
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index d8d05b78ec..592a94263d 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import { getFriendIds } from '../../common/get-friends';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import read from '../../../../services/note/read';
@@ -89,5 +89,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	mentions.forEach(note => read(user._id, note._id));
 
 	// Serialize
-	res(await Promise.all(mentions.map(mention => pack(mention, user))));
+	res(await packMany(mentions, user));
 });
diff --git a/src/server/api/endpoints/notes/replies.ts b/src/server/api/endpoints/notes/replies.ts
index 44c80afc4a..b2f8f94f69 100644
--- a/src/server/api/endpoints/notes/replies.ts
+++ b/src/server/api/endpoints/notes/replies.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import Note, { pack } from '../../../../models/note';
+import Note, { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
 /**
@@ -30,5 +30,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	const ids = (note._replyIds || []).slice(offset, offset + limit);
 
 	// Serialize
-	res(await Promise.all(ids.map(id => pack(id, user))));
+	res(await packMany(ids, user));
 });
diff --git a/src/server/api/endpoints/notes/reposts.ts b/src/server/api/endpoints/notes/reposts.ts
index 05e68302ba..2c6e1a499f 100644
--- a/src/server/api/endpoints/notes/reposts.ts
+++ b/src/server/api/endpoints/notes/reposts.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import Note, { pack } from '../../../../models/note';
+import Note, { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
 /**
@@ -62,6 +62,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		});
 
 	// Serialize
-	res(await Promise.all(renotes.map(async note =>
-		await pack(note, user))));
+	res(await packMany(renotes, user));
 });
diff --git a/src/server/api/endpoints/notes/search.ts b/src/server/api/endpoints/notes/search.ts
index 9124899ad8..2755a70483 100644
--- a/src/server/api/endpoints/notes/search.ts
+++ b/src/server/api/endpoints/notes/search.ts
@@ -2,7 +2,7 @@ import $ from 'cafy';
 import * as mongo from 'mongodb';
 import Note from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import es from '../../../../db/elasticsearch';
 
 export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
@@ -60,6 +60,6 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 				}
 			});
 
-		res(await Promise.all(notes.map(note => pack(note, me))));
+		res(await packMany(notes, me));
 	});
 });
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index 0703210017..d380f27f9c 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -3,7 +3,7 @@ import Note from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
 import Mute from '../../../../models/mute';
 import { getFriendIds } from '../../common/get-friends';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import getParams from '../../get-params';
 import { erase } from '../../../../prelude/array';
 
@@ -363,5 +363,5 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		});
 
 	// Serialize
-	res(await Promise.all(notes.map(note => pack(note, me))));
+	res(await packMany(notes, me));
 });
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 5f3844987c..44a504eb18 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -2,7 +2,7 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { getFriends } from '../../common/get-friends';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import { countIf } from '../../../../prelude/array';
@@ -237,5 +237,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	return await Promise.all(timeline.map(note => pack(note, user)));
+	return await packMany(timeline, user);
 };
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index 61192d7d3e..6758b4eb73 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
-import { pack } from '../../../../models/note';
+import { packMany } from '../../../../models/note';
 import UserList from '../../../../models/user-list';
 import { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
@@ -242,5 +242,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	return await Promise.all(timeline.map(note => pack(note, user)));
+	return await packMany(timeline, user);
 };
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index 1ab7786a18..1bfe832c51 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import getHostLower from '../../common/get-host-lower';
-import Note, { pack } from '../../../../models/note';
+import Note, { packMany } from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
 import getParams from '../../get-params';
 import { countIf } from '../../../../prelude/array';
@@ -181,5 +181,5 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 		});
 
 	// Serialize
-	res(await Promise.all(notes.map(note => pack(note, me))));
+	res(await packMany(notes, me));
 });

From 80105239dc3d506d87b4a5ea313ee1af55ef2f3f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 00:39:48 +0900
Subject: [PATCH 481/539] 9.4.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 3d2c256463..30e5d84627 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.3.1",
+	"version": "9.4.0",
 	"clientVersion": "1.0.10062",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From f0115a5e21bb98708668aa139051338d5e2d007a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:45:47 +0900
Subject: [PATCH 482/539] fix(package): update webpack to version 4.20.2
 (#2814)

Closes #2768
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 30e5d84627..49a62d8552 100644
--- a/package.json
+++ b/package.json
@@ -225,7 +225,7 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.3",
 		"webfinger.js": "2.6.6",
-		"webpack": "4.19.1",
+		"webpack": "4.20.2",
 		"webpack-cli": "3.1.0",
 		"websocket": "1.0.28",
 		"ws": "6.0.0",

From a85efa1392c78d96869b91f0007ee87b55298adc Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:48:52 +0900
Subject: [PATCH 483/539] fix(package): update gulp-htmlmin to version 5.0.1
 (#2815)

Closes #2669
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 49a62d8552..ede154331b 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
 		"fuckadblock": "3.2.1",
 		"gulp": "3.9.1",
 		"gulp-cssnano": "2.1.3",
-		"gulp-htmlmin": "4.0.0",
+		"gulp-htmlmin": "5.0.1",
 		"gulp-imagemin": "4.1.0",
 		"gulp-mocha": "6.0.0",
 		"gulp-pug": "4.0.1",

From 436962e4b8f53994ca9fb3254d84b64ec0d68eda Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:49:05 +0900
Subject: [PATCH 484/539] fix(package): update nan to version 2.11.1 (#2784)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index ede154331b..42cb8609da 100644
--- a/package.json
+++ b/package.json
@@ -159,7 +159,7 @@
 		"mongodb": "3.1.1",
 		"monk": "6.0.6",
 		"ms": "2.1.1",
-		"nan": "2.11.0",
+		"nan": "2.11.1",
 		"nested-property": "0.0.7",
 		"nprogress": "0.2.0",
 		"object-assign-deep": "0.4.0",

From 4105237027cfed92f1f7c187a9922d24a856fb55 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:49:38 +0900
Subject: [PATCH 485/539] fix(package): update koa-mount to version 4.0.0
 (#2776)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 42cb8609da..997de25e73 100644
--- a/package.json
+++ b/package.json
@@ -142,7 +142,7 @@
 		"koa-favicon": "2.0.1",
 		"koa-json-body": "5.3.0",
 		"koa-logger": "3.2.0",
-		"koa-mount": "3.0.0",
+		"koa-mount": "4.0.0",
 		"koa-multer": "1.0.2",
 		"koa-router": "7.4.0",
 		"koa-send": "5.0.0",

From d53689332f106461b2191fcfbe1d0053fefd99df Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:49:56 +0900
Subject: [PATCH 486/539] fix(package): update diskusage to version 0.2.5
 (#2767)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 997de25e73..89c22f4172 100644
--- a/package.json
+++ b/package.json
@@ -98,7 +98,7 @@
 		"debug": "4.0.1",
 		"deep-equal": "1.0.1",
 		"deepcopy": "0.6.3",
-		"diskusage": "0.2.4",
+		"diskusage": "0.2.5",
 		"dompurify": "1.0.5",
 		"double-ended-queue": "2.1.0-0",
 		"elasticsearch": "15.1.1",

From cf66343b31f45dfaa1a73ac36019d3e323200ec4 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:50:25 +0900
Subject: [PATCH 487/539] fix(package): update qrcode to version 1.3.0 (#2799)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 89c22f4172..70383b6ac2 100644
--- a/package.json
+++ b/package.json
@@ -171,7 +171,7 @@
 		"promise-sequential": "1.1.1",
 		"pug": "2.0.3",
 		"punycode": "2.1.1",
-		"qrcode": "1.2.2",
+		"qrcode": "1.3.0",
 		"ratelimiter": "3.2.0",
 		"recaptcha-promise": "0.1.3",
 		"reconnecting-websocket": "3.2.2",

From d6f6c2672521b650f456af023769b4c0173734dc Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:50:32 +0900
Subject: [PATCH 488/539] fix(package): update @types/qrcode to version 1.3.0
 (#2813)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 70383b6ac2..22a4dbc00b 100644
--- a/package.json
+++ b/package.json
@@ -63,7 +63,7 @@
 		"@types/node": "10.10.3",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
-		"@types/qrcode": "1.2.0",
+		"@types/qrcode": "1.3.0",
 		"@types/ratelimiter": "2.1.28",
 		"@types/redis": "2.8.6",
 		"@types/request": "2.47.1",

From 8b7e6b200efc83681dc5e53aac737e38c067fd27 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Thu, 4 Oct 2018 12:51:19 +0900
Subject: [PATCH 489/539] fix(package): update jsdom to version 12.1.0 (#2788)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 22a4dbc00b..d8dfa4d689 100644
--- a/package.json
+++ b/package.json
@@ -133,7 +133,7 @@
 		"is-root": "2.0.0",
 		"is-url": "1.2.4",
 		"js-yaml": "3.12.0",
-		"jsdom": "11.12.0",
+		"jsdom": "12.1.0",
 		"json5": "2.1.0",
 		"json5-loader": "1.0.1",
 		"koa": "2.5.1",

From a0278154a3cfc9d17e0a6e0013d24d058f162f48 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:52:27 +0900
Subject: [PATCH 490/539] fix(package): update webpack-cli to version 3.1.2
 (#2816)

Closes #2757
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index d8dfa4d689..987020b9a3 100644
--- a/package.json
+++ b/package.json
@@ -225,8 +225,8 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.3",
 		"webfinger.js": "2.6.6",
+		"webpack-cli": "3.1.2",
 		"webpack": "4.20.2",
-		"webpack-cli": "3.1.0",
 		"websocket": "1.0.28",
 		"ws": "6.0.0",
 		"xev": "2.0.1"

From 44f86a94f4ec99c95755791fdaaeed9ff5967e26 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:52:57 +0900
Subject: [PATCH 491/539] fix(package): update @types/node to version 10.11.4
 (#2817)

Closes #2765
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 987020b9a3..96d41e4576 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
 		"@types/mocha": "5.2.3",
 		"@types/mongodb": "3.1.7",
 		"@types/ms": "0.7.30",
-		"@types/node": "10.10.3",
+		"@types/node": "10.11.4",
 		"@types/portscanner": "2.1.0",
 		"@types/pug": "2.0.4",
 		"@types/qrcode": "1.3.0",

From 4ab0dbe7e3ebf77d2030e6e1c097f7040cb4ac4e Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:53:17 +0900
Subject: [PATCH 492/539] fix(package): update @types/webpack to version 4.4.14
 (#2818)

Closes #2778
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 96d41e4576..6b123bc533 100644
--- a/package.json
+++ b/package.json
@@ -78,7 +78,7 @@
 		"@types/tinycolor2": "1.4.1",
 		"@types/tmp": "0.0.33",
 		"@types/uuid": "3.4.4",
-		"@types/webpack": "4.4.12",
+		"@types/webpack": "4.4.14",
 		"@types/webpack-stream": "3.2.10",
 		"@types/websocket": "0.0.40",
 		"@types/ws": "6.0.1",

From c1ef1bf605653964384a0e1a50a072e1d825ee05 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 12:53:50 +0900
Subject: [PATCH 493/539] fix(package): update typescript-eslint-parser to
 version 19.0.2 (#2819)

Closes #2772
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 6b123bc533..e808609881 100644
--- a/package.json
+++ b/package.json
@@ -203,7 +203,7 @@
 		"ts-node": "7.0.1",
 		"tslint": "5.10.0",
 		"typescript": "2.9.2",
-		"typescript-eslint-parser": "18.0.0",
+		"typescript-eslint-parser": "19.0.2",
 		"uglify-es": "3.3.9",
 		"url-loader": "1.1.1",
 		"uuid": "3.3.2",

From e8afa2c940ec967dda18c0f87cacdb42d8311ca5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 13:33:59 +0900
Subject: [PATCH 494/539] Improve pack function of favorite

---
 src/models/favorite.ts                  | 13 +++++++++++++
 src/server/api/endpoints/i/favorites.ts |  4 ++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/models/favorite.ts b/src/models/favorite.ts
index b2d2fc93e8..2c07959be7 100644
--- a/src/models/favorite.ts
+++ b/src/models/favorite.ts
@@ -41,6 +41,13 @@ export async function deleteFavorite(favorite: string | mongo.ObjectID | IFavori
 	});
 }
 
+export const packMany = async (
+	favorites: any[],
+	me: any
+) => {
+	return (await Promise.all(favorites.map(f => pack(f, me)))).filter(x => x != null);
+};
+
 /**
  * Pack a favorite for API response
  */
@@ -70,5 +77,11 @@ export const pack = (
 	// Populate note
 	_favorite.note = await packNote(_favorite.noteId, me);
 
+	// (データベースの不具合などで)投稿が見つからなかったら
+	if (_favorite.note == null) {
+		console.warn(`favorite: note not found on database: ${_favorite.noteId}`);
+		return resolve(null);
+	}
+
 	resolve(_favorite);
 });
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts
index 32c1a55fb0..e7cf8a71a7 100644
--- a/src/server/api/endpoints/i/favorites.ts
+++ b/src/server/api/endpoints/i/favorites.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import Favorite, { pack } from '../../../../models/favorite';
+import Favorite, { packMany } from '../../../../models/favorite';
 import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
@@ -55,5 +55,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		.find(query, { limit, sort });
 
 	// Serialize
-	res(await Promise.all(favorites.map(favorite => pack(favorite, user))));
+	res(await packMany(favorites, user));
 });

From 546d494587841afebe910f58d92b48fc6ad89a2d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 13:40:13 +0900
Subject: [PATCH 495/539] Improve default theme definition (light)

---
 src/client/theme/light.json5 | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/client/theme/light.json5 b/src/client/theme/light.json5
index 1e795ee8c5..90d0d40187 100644
--- a/src/client/theme/light.json5
+++ b/src/client/theme/light.json5
@@ -23,13 +23,13 @@
 		scrollbarHandleHover: '#00000066',
 
 		face: '$secondary',
-		faceText: '#444',
+		faceText: '$text',
 		faceHeader: ':lighten<5<$secondary',
-		faceHeaderText: '#888',
+		faceHeaderText: '$text',
 		faceDivider: 'rgba(0, 0, 0, 0.082)',
-		faceTextButton: '#ccc',
-		faceTextButtonHover: '#aaa',
-		faceTextButtonActive: '#999',
+		faceTextButton: ':alpha<0.7<$text',
+		faceTextButtonHover: ':alpha<0.7<:darken<7<$text',
+		faceTextButtonActive: ':alpha<0.7<:darken<10<$text',
 		faceClearButtonHover: 'rgba(0, 0, 0, 0.025)',
 		faceClearButtonActive: 'rgba(0, 0, 0, 0.05)',
 		popupBg: ':lighten<5<$secondary',
@@ -40,7 +40,7 @@
 		renoteGradient: '#edfde2',
 		renoteText: '#9dbb00',
 		quoteBorder: '#c0dac6',
-		noteText: '#717171',
+		noteText: '$text',
 		noteHeaderName: ':darken<2<$text',
 		noteHeaderBadgeFg: '#aaa',
 		noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.05)',
@@ -141,7 +141,7 @@
 
 		desktopHeaderBg: ':lighten<5<$secondary',
 		desktopHeaderFg: '$text',
-		desktopHeaderHoverFg: '#7b8c88',
+		desktopHeaderHoverFg: ':darken<7<$text',
 		desktopHeaderSearchBg: 'rgba(0, 0, 0, 0.05)',
 		desktopHeaderSearchHoverBg: 'rgba(0, 0, 0, 0.08)',
 		desktopHeaderSearchFg: '#000',
@@ -156,9 +156,9 @@
 		desktopPostFormTransparentButtonActiveGradientEnd: ':lighten<33<$primary',
 		desktopRenoteFormFooter: ':lighten<33<$primary',
 		desktopTimelineHeaderShadow: 'rgba(0, 0, 0, 0.08)',
-		desktopTimelineSrc: '#6f7477',
-		desktopTimelineSrcHover: '#525a5f',
-		desktopWindowTitle: '#666',
+		desktopTimelineSrc: '$text',
+		desktopTimelineSrcHover: ':darken<7<$text',
+		desktopWindowTitle: '$text',
 		desktopWindowShadow: 'rgba(0, 0, 0, 0.2)',
 		desktopDriveBg: '#fff',
 		desktopDriveFolderBg: ':lighten<31<$primary',

From 35489ef5b7dde1ffda11cb1ab83fc26c17e41196 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 13:48:26 +0900
Subject: [PATCH 496/539] Improve default theme definition (dark)

---
 src/client/theme/dark.json5 | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/client/theme/dark.json5 b/src/client/theme/dark.json5
index 2042bd7931..72362a2305 100644
--- a/src/client/theme/dark.json5
+++ b/src/client/theme/dark.json5
@@ -46,15 +46,15 @@
 		noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.25)',
 		noteHeaderAdminFg: '#f15f71',
 		noteHeaderAdminBg: '#5d282e',
-		noteHeaderAcct: '#606984',
-		noteHeaderInfo: '#606984',
+		noteHeaderAcct: ':alpha<0.65<$text',
+		noteHeaderInfo: ':alpha<0.5<$text',
 
-		noteActions: '#606984',
-		noteActionsHover: '#a1a8bf',
+		noteActions: ':alpha<0.45<$text',
+		noteActionsHover: ':alpha<0.6<$text',
 		noteActionsReplyHover: '#0af',
 		noteActionsRenoteHover: '#8d0',
 		noteActionsReactionHover: '#fa0',
-		noteActionsHighlighted: '#707b97',
+		noteActionsHighlighted: ':alpha<0.7<$text',
 
 		noteAttachedFile: 'rgba(255, 255, 255, 0.1)',
 

From fce7dc0f4e69053c7306289189b4fa4891f57339 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 13:53:48 +0900
Subject: [PATCH 497/539] Improve error handling of pack function of
 notification

---
 src/models/favorite.ts                      |  2 +-
 src/models/notification.ts                  | 12 ++++++++++++
 src/server/api/endpoints/i/notifications.ts |  4 ++--
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/models/favorite.ts b/src/models/favorite.ts
index 2c07959be7..2c10674bcb 100644
--- a/src/models/favorite.ts
+++ b/src/models/favorite.ts
@@ -79,7 +79,7 @@ export const pack = (
 
 	// (データベースの不具合などで)投稿が見つからなかったら
 	if (_favorite.note == null) {
-		console.warn(`favorite: note not found on database: ${_favorite.noteId}`);
+		console.warn(`in packaging favorite: note not found on database: ${_favorite.noteId}`);
 		return resolve(null);
 	}
 
diff --git a/src/models/notification.ts b/src/models/notification.ts
index 835c89cd56..57be4bef10 100644
--- a/src/models/notification.ts
+++ b/src/models/notification.ts
@@ -77,6 +77,12 @@ export async function deleteNotification(notification: string | mongo.ObjectID |
 	});
 }
 
+export const packMany = async (
+	notifications: any[]
+) => {
+	return (await Promise.all(notifications.map(n => pack(n)))).filter(x => x != null);
+};
+
 /**
  * Pack a notification for API response
  */
@@ -123,6 +129,12 @@ export const pack = (notification: any) => new Promise<any>(async (resolve, reje
 		case 'poll_vote':
 			// Populate note
 			_notification.note = await packNote(_notification.noteId, me);
+
+			// (データベースの不具合などで)投稿が見つからなかったら
+			if (_notification.note == null) {
+				console.warn(`in packaging notification: note not found on database: ${_notification.noteId}`);
+				return resolve(null);
+			}
 			break;
 		default:
 			console.error(`Unknown type: ${_notification.type}`);
diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts
index 46242b9d9f..5cc836e362 100644
--- a/src/server/api/endpoints/i/notifications.ts
+++ b/src/server/api/endpoints/i/notifications.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Notification from '../../../../models/notification';
 import Mute from '../../../../models/mute';
-import { pack } from '../../../../models/notification';
+import { packMany } from '../../../../models/notification';
 import { getFriendIds } from '../../common/get-friends';
 import read from '../../common/read-notification';
 import { ILocalUser } from '../../../../models/user';
@@ -83,7 +83,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		});
 
 	// Serialize
-	res(await Promise.all(notifications.map(notification => pack(notification))));
+	res(await packMany(notifications));
 
 	// Mark all as read
 	if (notifications.length > 0 && markAsRead) {

From 401d0b1298ddfc0ef6391105f75ea98285afb08d Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Thu, 4 Oct 2018 13:55:25 +0900
Subject: [PATCH 498/539] 9.5.0

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index e808609881..8e0a8e6250 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.4.0",
-	"clientVersion": "1.0.10062",
+	"version": "9.5.0",
+	"clientVersion": "1.0.10090",
 	"codename": "nighthike",
 	"main": "./built/index.js",
 	"private": true,

From baf9b658018e6b7d4bc2645eef871e9a57ef23db Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 01:43:47 +0900
Subject: [PATCH 499/539] Improve error handling of packaging functions

---
 package.json                             |  2 +-
 src/models/drive-file.ts                 | 15 ++++++++++++++-
 src/models/note.ts                       | 12 ++++++++----
 src/models/user.ts                       |  2 +-
 src/server/api/endpoints/drive/files.ts  |  5 ++---
 src/server/api/endpoints/drive/stream.ts |  4 ++--
 6 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/package.json b/package.json
index 8e0a8e6250..e04d9d8b4e 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.5.0",
+	"version": "9.6.0",
 	"clientVersion": "1.0.10090",
 	"codename": "nighthike",
 	"main": "./built/index.js",
diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index 215b49b305..c11121126f 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -127,6 +127,15 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv
 	});
 }
 
+export const packMany = async (
+	files: any[],
+	options?: {
+		detail: boolean
+	}
+) => {
+	return (await Promise.all(files.map(f => pack(f, options)))).filter(x => x != null);
+};
+
 /**
  * Pack a drive file for API response
  */
@@ -155,7 +164,11 @@ export const pack = (
 		_file = deepcopy(file);
 	}
 
-	if (!_file) return reject('invalid file arg.');
+	// (データベースの欠損などで)ファイルがデータベース上に見つからなかったとき
+	if (_file == null) {
+		console.warn(`in packaging driveFile: driveFile not found on database: ${_file}`);
+		return null;
+	}
 
 	// rendered target
 	let _target: any = {};
diff --git a/src/models/note.ts b/src/models/note.ts
index 75518d709f..43b8753195 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -7,7 +7,7 @@ import { IUser, pack as packUser } from './user';
 import { pack as packApp } from './app';
 import PollVote, { deletePollVote } from './poll-vote';
 import Reaction, { deleteNoteReaction } from './note-reaction';
-import { pack as packFile, IDriveFile } from './drive-file';
+import { packMany as packFileMany, IDriveFile } from './drive-file';
 import NoteWatching, { deleteNoteWatching } from './note-watching';
 import NoteReaction from './note-reaction';
 import Favorite, { deleteFavorite } from './favorite';
@@ -309,9 +309,7 @@ export const pack = async (
 	}
 
 	// Populate files
-	_note.files = Promise.all((_note.fileIds || []).map((fileId: mongo.ObjectID) =>
-		packFile(fileId)
-	));
+	_note.files = packFileMany(_note.fileIds || []);
 
 	// 後方互換性のため
 	_note.mediaIds = _note.fileIds;
@@ -380,6 +378,12 @@ export const pack = async (
 	// resolve promises in _note object
 	_note = await rap(_note);
 
+	// (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
+	if (_note.user == null) {
+		console.warn(`in packaging note: note user not found on database: note(${_note.id})`);
+		return null;
+	}
+
 	if (_note.user.isCat && _note.text) {
 		_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
 	}
diff --git a/src/models/user.ts b/src/models/user.ts
index 3e8aefc4b1..642a993f65 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -361,7 +361,7 @@ export const pack = (
 		_user = deepcopy(user);
 	}
 
-	// ユーザーがデータベース上に見つからなかったとき
+	// (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
 	if (_user == null) {
 		console.warn(`user not found on database: ${user}`);
 		return null;
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index dc6a602e10..de0bde086b 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import DriveFile, { pack } from '../../../../models/drive-file';
+import DriveFile, { packMany } from '../../../../models/drive-file';
 import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
@@ -73,6 +73,5 @@ export default async (params: any, user: ILocalUser) => {
 		});
 
 	// Serialize
-	const _files = await Promise.all(files.map(file => pack(file)));
-	return _files;
+	return await packMany(files);
 };
diff --git a/src/server/api/endpoints/drive/stream.ts b/src/server/api/endpoints/drive/stream.ts
index a9f3f7e9a5..3ac7dd0234 100644
--- a/src/server/api/endpoints/drive/stream.ts
+++ b/src/server/api/endpoints/drive/stream.ts
@@ -1,5 +1,5 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import DriveFile, { pack } from '../../../../models/drive-file';
+import DriveFile, { packMany } from '../../../../models/drive-file';
 import { ILocalUser } from '../../../../models/user';
 
 export const meta = {
@@ -63,5 +63,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		});
 
 	// Serialize
-	res(await Promise.all(files.map(file => pack(file))));
+	res(await packMany(files));
 });

From f243ce66e77d2a2eeee08d160b9d764c2d1084d5 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Fri, 5 Oct 2018 01:58:41 +0900
Subject: [PATCH 500/539] =?UTF-8?q?ActivityPub=E3=81=AEHTTP=E3=83=AA?=
 =?UTF-8?q?=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=81=AE=E5=BC=B7=E5=8C=96?=
 =?UTF-8?q?=20(#2820)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix error handling in AP deliver

* Set timeout to resolver

* Tune looks
---
 src/queue/processors/http/deliver.ts | 23 +++++++++++------------
 src/remote/activitypub/request.ts    | 12 +++++++++++-
 src/remote/activitypub/resolver.ts   |  2 ++
 3 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/queue/processors/http/deliver.ts b/src/queue/processors/http/deliver.ts
index e14a162105..621219fec6 100644
--- a/src/queue/processors/http/deliver.ts
+++ b/src/queue/processors/http/deliver.ts
@@ -7,19 +7,18 @@ export default async (job: bq.Job, done: any): Promise<void> => {
 		await request(job.data.user, job.data.to, job.data.content);
 		done();
 	} catch (res) {
-		if (res == null || !res.hasOwnProperty('statusCode')) {
-			console.warn(`deliver failed (unknown): ${res}`);
-			return done();
-		}
-
-		if (res.statusCode == null) return done();
-		if (res.statusCode >= 400 && res.statusCode < 500) {
-			// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
-			// 何回再送しても成功することはないということなのでエラーにはしないでおく
-			done();
+		if (res != null && res.hasOwnProperty('statusCode')) {
+			if (res.statusCode >= 400 && res.statusCode < 500) {
+				// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
+				// 何回再送しても成功することはないということなのでエラーにはしないでおく
+				done();
+			} else {
+				console.warn(`deliver failed: ${res.statusCode} ${res.statusMessage} to=${job.data.to}`);
+				done(res.statusMessage);
+			}
 		} else {
-			console.warn(`deliver failed: ${res.statusMessage}`);
-			done(res.statusMessage);
+			console.warn(`deliver failed: ${res} to=${job.data.to}`);
+			done();
 		}
 	}
 };
diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts
index 07f0ecca8b..177b6f458e 100644
--- a/src/remote/activitypub/request.ts
+++ b/src/remote/activitypub/request.ts
@@ -12,6 +12,8 @@ const log = debug('misskey:activitypub:deliver');
 export default (user: ILocalUser, url: string, object: any) => new Promise((resolve, reject) => {
 	log(`--> ${url}`);
 
+	const timeout = 10 * 1000;
+
 	const { protocol, hostname, port, pathname, search } = new URL(url);
 
 	const data = JSON.stringify(object);
@@ -26,6 +28,7 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 		port,
 		method: 'POST',
 		path: pathname + search,
+		timeout,
 		headers: {
 			'User-Agent': config.user_agent,
 			'Content-Type': 'application/activity+json',
@@ -35,7 +38,7 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 		log(`${url} --> ${res.statusCode}`);
 
 		if (res.statusCode >= 400) {
-			reject();
+			reject(res);
 		} else {
 			resolve();
 		}
@@ -53,5 +56,12 @@ export default (user: ILocalUser, url: string, object: any) => new Promise((reso
 	sig = sig.replace(/^Signature /, '');
 	req.setHeader('Signature', sig);
 
+	req.on('timeout', () => req.abort());
+
+	req.on('error', e => {
+		if (req.aborted) reject('timeout');
+		reject(e);
+	});
+
 	req.end(data);
 });
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index 215e5e8704..ff26971758 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -7,6 +7,7 @@ const log = debug('misskey:activitypub:resolver');
 
 export default class Resolver {
 	private history: Set<string>;
+	private timeout = 10 * 1000;
 
 	constructor() {
 		this.history = new Set();
@@ -50,6 +51,7 @@ export default class Resolver {
 
 		const object = await request({
 			url: value,
+			timeout: this.timeout,
 			headers: {
 				'User-Agent': config.user_agent,
 				Accept: 'application/activity+json, application/ld+json'

From 11b84a04b3f81c4717d9a0fd7c78ffb2fa13fa03 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 01:59:26 +0900
Subject: [PATCH 501/539] 9.7.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index e04d9d8b4e..c5583c5a1f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.6.0",
+	"version": "9.7.0",
 	"clientVersion": "1.0.10090",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From d2aca3c28b97bc92d77e14fcc04dfc8c8c95823f Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Fri, 5 Oct 2018 02:43:54 +0900
Subject: [PATCH 502/539] fix(package): update vue-svg-inline-loader to version
 1.1.4 (#2821)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index c5583c5a1f..92d8fcd100 100644
--- a/package.json
+++ b/package.json
@@ -217,7 +217,7 @@
 		"vue-loader": "15.4.2",
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
-		"vue-svg-inline-loader": "1.1.3",
+		"vue-svg-inline-loader": "1.1.4",
 		"vue-template-compiler": "2.5.17",
 		"vuedraggable": "2.16.0",
 		"vuewordcloud": "18.7.11",

From 02e7e3b9712b1c30f2183952c3325ef2ebe6ea21 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 03:21:45 +0900
Subject: [PATCH 503/539] Clean up

---
 .../app/desktop/views/pages/admin/admin.announcements.vue       | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/client/app/desktop/views/pages/admin/admin.announcements.vue b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
index 722fa227cf..5c1ed74b29 100644
--- a/src/client/app/desktop/views/pages/admin/admin.announcements.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.announcements.vue
@@ -44,8 +44,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 .qldxjjsrseehkusjuoooapmsprvfrxyl
 	textarea
 		width 100%

From 4794748c73f83377a5664fce6eb8f7413bbaaf95 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 04:50:23 +0900
Subject: [PATCH 504/539] Fix bug

---
 src/models/drive-file.ts | 2 +-
 src/models/user.ts       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index c11121126f..0d0886ad0b 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -167,7 +167,7 @@ export const pack = (
 	// (データベースの欠損などで)ファイルがデータベース上に見つからなかったとき
 	if (_file == null) {
 		console.warn(`in packaging driveFile: driveFile not found on database: ${_file}`);
-		return null;
+		return resolve(null);
 	}
 
 	// rendered target
diff --git a/src/models/user.ts b/src/models/user.ts
index 642a993f65..e0ce561421 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -364,7 +364,7 @@ export const pack = (
 	// (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
 	if (_user == null) {
 		console.warn(`user not found on database: ${user}`);
-		return null;
+		return resolve(null);
 	}
 
 	// Me

From e5591618ee397be8c824e027662a1fe8450a3f63 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 04:50:50 +0900
Subject: [PATCH 505/539] 9.7.1

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 92d8fcd100..27bf5c0f13 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
 	"name": "misskey",
 	"author": "syuilo <i@syuilo.com>",
-	"version": "9.7.0",
+	"version": "9.7.1",
 	"clientVersion": "1.0.10090",
 	"codename": "nighthike",
 	"main": "./built/index.js",

From 63a8d556e513bef14ff941edb06e120fc784227c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 12:10:00 +0900
Subject: [PATCH 506/539] :art:

---
 .../views/components/drive.file-detail.vue    | 30 +++----------------
 1 file changed, 4 insertions(+), 26 deletions(-)

diff --git a/src/client/app/mobile/views/components/drive.file-detail.vue b/src/client/app/mobile/views/components/drive.file-detail.vue
index de46297fcb..7425afe1e2 100644
--- a/src/client/app/mobile/views/components/drive.file-detail.vue
+++ b/src/client/app/mobile/views/components/drive.file-detail.vue
@@ -38,10 +38,10 @@
 	</div>
 	<div class="menu">
 		<div>
-			<a :href="`${file.url}?download`" :download="file.name">%fa:download%%i18n:@download%</a>
-			<button @click="rename">%fa:pencil-alt%%i18n:@rename%</button>
-			<button @click="move">%fa:R folder-open%%i18n:@move%</button>
-			<button @click="del">%fa:trash-alt R%%i18n:@delete%</button>
+			<ui-button link :href="`${file.url}?download`" :download="file.name">%fa:download% %i18n:@download%</ui-button>
+			<ui-button @click="rename">%fa:pencil-alt% %i18n:@rename%</ui-button>
+			<ui-button @click="move">%fa:R folder-open% %i18n:@move%</ui-button>
+			<ui-button @click="del">%fa:trash-alt R% %i18n:@delete%</ui-button>
 		</div>
 	</div>
 	<div class="exif" v-show="exif">
@@ -205,28 +205,6 @@ export default Vue.extend({
 			max-width 500px
 			margin 0 auto
 
-			> *
-				display block
-				width 100%
-				padding 10px 16px
-				margin 0 0 12px 0
-				color var(--primaryForeground)
-				font-size 0.9em
-				text-align center
-				text-decoration none
-				background var(--primary)
-				border none
-				border-radius 3px
-
-				&:last-child
-					margin-bottom 0
-
-				&:active
-					background var(--primaryDarken10)
-
-				> [data-fa]
-					margin-right 4px
-
 	> .hash
 		padding 14px
 		border-top solid 1px var(--faceDivider)

From 48e4dc75f43c0682421b865a7a142d5062ef38d4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Fri, 5 Oct 2018 19:13:59 +0900
Subject: [PATCH 507/539] Better japanese

---
 locales/ja-JP.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 62c6355c3b..99c865e2b5 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -564,13 +564,13 @@ desktop/views/components/charts.vue:
     notes: "投稿の増減 (統合)"
     local-notes: "投稿の増減 (ローカル)"
     remote-notes: "投稿の増減 (リモート)"
-    notes-total: "投稿の累計"
+    notes-total: "投稿の積算"
     users: "ユーザーの増減"
-    users-total: "ユーザーの累計"
+    users-total: "ユーザーの積算"
     drive: "ドライブ使用量の増減"
-    drive-total: "ドライブ使用量の累計"
+    drive-total: "ドライブ使用量の積算"
     drive-files: "ドライブのファイル数の増減"
-    drive-files-total: "ドライブのファイル数の累計"
+    drive-files-total: "ドライブのファイル数の積算"
     network-requests: "リクエスト"
     network-time: "応答時間"
     network-usage: "通信量"

From 0b98a2364b22d882df70a5829ef01eedc634cf94 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sat, 6 Oct 2018 20:36:11 +0900
Subject: [PATCH 508/539] =?UTF-8?q?Fix=20=E3=81=8A=E7=9F=A5=E3=82=89?=
 =?UTF-8?q?=E3=81=9B=E3=81=8C=E7=A2=BA=E8=AA=8D=E4=B8=AD...=E3=81=AE?=
 =?UTF-8?q?=E3=81=BE=E3=81=BE=E3=81=AB=E3=81=AA=E3=82=8B(Announcement=20Fe?=
 =?UTF-8?q?tching...)=20(#2831)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/endpoints/meta.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 9baf3c252f..c76d7f2e8f 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -32,7 +32,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 			model: os.cpus()[0].model,
 			cores: os.cpus().length
 		},
-		broadcasts: meta.broadcasts,
+		broadcasts: meta.broadcasts || [],
 		disableRegistration: meta.disableRegistration,
 		disableLocalTimeline: meta.disableLocalTimeline,
 		driveCapacityPerLocalUserMb: config.localDriveCapacityMb,

From d0570d7fe3a3bf3c6b0312dece74bacc04c3534a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 11:06:17 +0900
Subject: [PATCH 509/539] V10 (#2826)

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update CHANGELOG.md

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update CHANGELOG.md

* Update CHANGELOG.md

* wip

* Update CHANGELOG.md

* wip

* wip

* wip

* wip
---
 CHANGELOG.md                                  |  82 +++++
 package.json                                  |   3 +-
 .../common/scripts/compose-notification.ts    |   6 +-
 .../app/common/scripts/note-subscriber.ts     | 105 ++++++
 src/client/app/common/scripts/stream.ts       | 318 +++++++++++++++++
 .../app/common/scripts/streaming/drive.ts     |  34 --
 .../streaming/games/reversi/reversi-game.ts   |  13 -
 .../streaming/games/reversi/reversi.ts        |  31 --
 .../scripts/streaming/global-timeline.ts      |  34 --
 .../app/common/scripts/streaming/hashtag.ts   |  13 -
 .../app/common/scripts/streaming/home.ts      | 126 -------
 .../scripts/streaming/hybrid-timeline.ts      |  34 --
 .../scripts/streaming/local-timeline.ts       |  34 --
 .../scripts/streaming/messaging-index.ts      |  34 --
 .../app/common/scripts/streaming/messaging.ts |  20 --
 .../common/scripts/streaming/notes-stats.ts   |  30 --
 .../common/scripts/streaming/server-stats.ts  |  30 --
 .../scripts/streaming/stream-manager.ts       | 109 ------
 .../app/common/scripts/streaming/stream.ts    | 137 --------
 .../app/common/scripts/streaming/user-list.ts |  17 -
 .../games/reversi/reversi.gameroom.vue        |   8 +-
 .../games/reversi/reversi.index.vue           |   9 +-
 .../components/games/reversi/reversi.vue      |   8 +-
 .../views/components/messaging-room.vue       |   8 +-
 .../app/common/views/components/messaging.vue |  10 +-
 .../app/common/views/components/signin.vue    |   2 +-
 .../app/common/views/components/signup.vue    |   4 +-
 .../views/components/stream-indicator.vue     |   2 +-
 .../views/components/welcome-timeline.vue     |   9 +-
 .../app/common/views/widgets/photo-stream.vue |  11 +-
 .../common/views/widgets/posts-monitor.vue    |   8 +-
 .../app/common/views/widgets/server.vue       |   8 +-
 src/client/app/config.ts                      |   2 +-
 src/client/app/desktop/script.ts              |  84 ++---
 .../app/desktop/views/components/drive.vue    |  13 +-
 .../views/components/follow-button.vue        |  11 +-
 .../app/desktop/views/components/home.vue     |   6 +-
 .../desktop/views/components/note-detail.vue  |   3 +
 .../desktop/views/components/notes.note.vue   |  86 +----
 .../views/components/notifications.vue        |  14 +-
 .../views/components/settings.signins.vue     |  12 +-
 .../views/components/timeline.core.vue        |  61 +---
 .../views/components/ui.header.nav.vue        |  12 +-
 .../views/components/user-list-timeline.vue   |   1 -
 .../views/pages/admin/admin.dashboard.vue     |   8 +-
 .../desktop/views/pages/deck/deck.direct.vue  |  10 +-
 .../views/pages/deck/deck.hashtag-tl.vue      |   3 +-
 .../desktop/views/pages/deck/deck.list-tl.vue |   1 -
 .../views/pages/deck/deck.mentions.vue        |  10 +-
 .../desktop/views/pages/deck/deck.note.vue    |  68 +---
 .../views/pages/deck/deck.notifications.vue   |  11 +-
 .../app/desktop/views/pages/deck/deck.tl.vue  |  21 +-
 src/client/app/mios.ts                        | 135 ++-----
 .../app/mobile/views/components/drive.vue     |  13 +-
 .../mobile/views/components/follow-button.vue |  10 +-
 .../mobile/views/components/note-detail.vue   |   3 +
 .../app/mobile/views/components/note.vue      |  86 +----
 .../mobile/views/components/notifications.vue |  17 +-
 .../app/mobile/views/components/ui.header.vue |  17 +-
 .../app/mobile/views/components/ui.nav.vue    |  10 +-
 src/client/app/mobile/views/components/ui.vue |  17 +-
 .../views/components/user-list-timeline.vue   |   1 -
 .../app/mobile/views/pages/home.timeline.vue  |  60 +---
 src/client/app/tsconfig.json                  |   3 +-
 src/docs/stream.ja-JP.md                      |   8 +-
 src/notify.ts                                 |   6 +-
 src/server/api/call.ts                        |   4 +
 .../api/common/read-messaging-message.ts      |   4 +-
 src/server/api/common/read-notification.ts    |   4 +-
 .../api/endpoints/games/reversi/match.ts      |   6 +-
 .../api/endpoints/i/regenerate_token.ts       |   4 +-
 src/server/api/endpoints/i/update.ts          |   4 +-
 .../api/endpoints/i/update_client_setting.ts  |   4 +-
 src/server/api/endpoints/i/update_home.ts     |   4 +-
 .../api/endpoints/i/update_mobile_home.ts     |   4 +-
 src/server/api/endpoints/i/update_widget.ts   |   4 +-
 .../endpoints/messaging/messages/create.ts    |  10 +-
 src/server/api/endpoints/notes/polls/vote.ts  |   5 +-
 .../notifications/mark_all_as_read.ts         |   4 +-
 src/server/api/private/signin.ts              |   4 +-
 src/server/api/service/twitter.ts             |   6 +-
 src/server/api/stream/channel.ts              |  39 ++
 src/server/api/stream/channels/drive.ts       |  12 +
 .../api/stream/channels/games/reversi-game.ts | 309 ++++++++++++++++
 .../api/stream/channels/games/reversi.ts      |  30 ++
 .../api/stream/channels/global-timeline.ts    |  39 ++
 src/server/api/stream/channels/hashtag.ts     |  33 ++
 .../api/stream/channels/home-timeline.ts      |  39 ++
 .../api/stream/channels/hybrid-timeline.ts    |  41 +++
 src/server/api/stream/channels/index.ts       |  31 ++
 .../api/stream/channels/local-timeline.ts     |  39 ++
 src/server/api/stream/channels/main.ts        |  25 ++
 .../api/stream/channels/messaging-index.ts    |  12 +
 src/server/api/stream/channels/messaging.ts   |  26 ++
 src/server/api/stream/channels/notes-stats.ts |  34 ++
 .../api/stream/channels/server-stats.ts       |  37 ++
 src/server/api/stream/channels/user-list.ts   |  14 +
 src/server/api/stream/drive.ts                |   9 -
 src/server/api/stream/games/reversi-game.ts   | 332 ------------------
 src/server/api/stream/games/reversi.ts        |  28 --
 src/server/api/stream/global-timeline.ts      |  27 --
 src/server/api/stream/hashtag.ts              |  40 ---
 src/server/api/stream/home.ts                 | 110 ------
 src/server/api/stream/hybrid-timeline.ts      |  38 --
 src/server/api/stream/index.ts                | 213 +++++++++++
 src/server/api/stream/local-timeline.ts       |  35 --
 src/server/api/stream/messaging-index.ts      |   9 -
 src/server/api/stream/messaging.ts            |  25 --
 src/server/api/stream/notes-stats.ts          |  35 --
 src/server/api/stream/server-stats.ts         |  38 --
 src/server/api/stream/user-list.ts            |  13 -
 src/server/api/streaming.ts                   |  75 +---
 src/services/drive/add-file.ts                |   6 +-
 src/services/following/create.ts              |   6 +-
 src/services/following/delete.ts              |   4 +-
 src/services/following/requests/accept.ts     |   6 +-
 src/services/following/requests/cancel.ts     |   4 +-
 src/services/following/requests/create.ts     |   6 +-
 src/services/following/requests/reject.ts     |   4 +-
 src/services/note/create.ts                   |  14 +-
 src/services/note/delete.ts                   |   2 +-
 src/services/note/reaction/create.ts          |   4 +-
 src/services/note/read.ts                     |   6 +-
 src/services/note/unread.ts                   |   6 +-
 src/stream.ts                                 |  36 +-
 tsconfig.json                                 |   3 +-
 126 files changed, 1812 insertions(+), 2273 deletions(-)
 create mode 100644 src/client/app/common/scripts/note-subscriber.ts
 create mode 100644 src/client/app/common/scripts/stream.ts
 delete mode 100644 src/client/app/common/scripts/streaming/drive.ts
 delete mode 100644 src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
 delete mode 100644 src/client/app/common/scripts/streaming/games/reversi/reversi.ts
 delete mode 100644 src/client/app/common/scripts/streaming/global-timeline.ts
 delete mode 100644 src/client/app/common/scripts/streaming/hashtag.ts
 delete mode 100644 src/client/app/common/scripts/streaming/home.ts
 delete mode 100644 src/client/app/common/scripts/streaming/hybrid-timeline.ts
 delete mode 100644 src/client/app/common/scripts/streaming/local-timeline.ts
 delete mode 100644 src/client/app/common/scripts/streaming/messaging-index.ts
 delete mode 100644 src/client/app/common/scripts/streaming/messaging.ts
 delete mode 100644 src/client/app/common/scripts/streaming/notes-stats.ts
 delete mode 100644 src/client/app/common/scripts/streaming/server-stats.ts
 delete mode 100644 src/client/app/common/scripts/streaming/stream-manager.ts
 delete mode 100644 src/client/app/common/scripts/streaming/stream.ts
 delete mode 100644 src/client/app/common/scripts/streaming/user-list.ts
 create mode 100644 src/server/api/stream/channel.ts
 create mode 100644 src/server/api/stream/channels/drive.ts
 create mode 100644 src/server/api/stream/channels/games/reversi-game.ts
 create mode 100644 src/server/api/stream/channels/games/reversi.ts
 create mode 100644 src/server/api/stream/channels/global-timeline.ts
 create mode 100644 src/server/api/stream/channels/hashtag.ts
 create mode 100644 src/server/api/stream/channels/home-timeline.ts
 create mode 100644 src/server/api/stream/channels/hybrid-timeline.ts
 create mode 100644 src/server/api/stream/channels/index.ts
 create mode 100644 src/server/api/stream/channels/local-timeline.ts
 create mode 100644 src/server/api/stream/channels/main.ts
 create mode 100644 src/server/api/stream/channels/messaging-index.ts
 create mode 100644 src/server/api/stream/channels/messaging.ts
 create mode 100644 src/server/api/stream/channels/notes-stats.ts
 create mode 100644 src/server/api/stream/channels/server-stats.ts
 create mode 100644 src/server/api/stream/channels/user-list.ts
 delete mode 100644 src/server/api/stream/drive.ts
 delete mode 100644 src/server/api/stream/games/reversi-game.ts
 delete mode 100644 src/server/api/stream/games/reversi.ts
 delete mode 100644 src/server/api/stream/global-timeline.ts
 delete mode 100644 src/server/api/stream/hashtag.ts
 delete mode 100644 src/server/api/stream/home.ts
 delete mode 100644 src/server/api/stream/hybrid-timeline.ts
 create mode 100644 src/server/api/stream/index.ts
 delete mode 100644 src/server/api/stream/local-timeline.ts
 delete mode 100644 src/server/api/stream/messaging-index.ts
 delete mode 100644 src/server/api/stream/messaging.ts
 delete mode 100644 src/server/api/stream/notes-stats.ts
 delete mode 100644 src/server/api/stream/server-stats.ts
 delete mode 100644 src/server/api/stream/user-list.ts

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c492e43839..b26010b146 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,88 @@ ChangeLog
 
 This document describes breaking changes only.
 
+10.0.0
+------
+
+ストリーミングAPIに破壊的変更があります。運営者がすべきことはありません。
+
+変更は以下の通りです
+
+* ストリーミングでやり取りする際の snake_case が全て camelCase に
+* リバーシのストリームエンドポイント名が reversi → gamesReversi、reversiGame → gamesReversiGame に
+* ストリーミングの個々のエンドポイントが廃止され、一旦元となるストリームに接続してから、個々のチャンネル(今までのエンドポイント)に接続します。詳細は後述します。
+* ストリームから流れてくる、キャプチャした投稿の更新イベントに投稿自体のデータは含まれず、代わりにアクションが設定されるようになります。詳細は後述します。
+* ストリームに接続する際に追加で指定していたパラメータ(トークン除く)が、URLにクエリとして含むのではなくチャンネル接続時にパラメータ指定するように
+
+### 個々のエンドポイントが廃止されることによる新しいストリーミングAPIの利用方法
+具体的には、まず https://example.misskey/streaming にwebsocket接続します。
+次に、例えば「messaging」ストリーム(チャンネルと呼びます)に接続したいときは、ストリームに次のようなデータを送信します:
+``` javascript
+{
+  type: 'connect',
+  body: {
+    channel: 'messaging',
+    id: 'foobar',
+    params: {
+      otherparty: 'xxxxxxxxxxxx'
+    }
+  }
+}
+```
+ここで、`id`にはそのチャンネルとやり取りするための任意のIDを設定します。
+IDはチャンネルごとではなく「チャンネルの接続ごと」です。なぜなら、同じチャンネルに異なるパラメータで複数接続するケースもあるからです。
+`params`はチャンネルに接続する際のパラメータです。チャンネルによって接続時に必要とされるパラメータは異なります。パラメータ不要のチャンネルに接続する際は、このプロパティは省略可能です。
+
+チャンネルにメッセージを送信するには、次のようなデータを送信します:
+``` javascript
+{
+  type: 'channel',
+  body: {
+    id: 'foobar',
+    type: 'something',
+    body: {
+      some: 'thing'
+    }
+  }
+}
+```
+ここで、`id`にはチャンネルに接続するときに指定したIDを設定します。
+
+逆に、チャンネルからメッセージが流れてくると、次のようなデータが受信されます:
+``` javascript
+{
+  type: 'channel',
+  body: {
+    id: 'foobar',
+    type: 'something',
+    body: {
+      some: 'thing'
+    }
+  }
+}
+```
+ここで、`id`にはチャンネルに接続するときに指定したIDが設定されています。
+
+### 投稿のキャプチャに関する変更
+投稿の更新イベントに投稿情報は含まれなくなりました。代わりに、その投稿が「リアクションされた」「アンケートに投票された」「削除された」といったアクション情報が設定されます。
+
+具体的には次のようなデータが受信されます:
+``` javascript
+{
+  type: 'noteUpdated',
+  body: {
+    id: 'xxxxxxxxxxx',
+    type: 'reacted',
+    body: {
+      reaction: 'hmm'
+    }
+  }
+}
+```
+
+* reacted ... 投稿にリアクションされた。`reaction`プロパティにリアクションコードが含まれます。
+* pollVoted ... アンケートに投票された。`choice`プロパティに選択肢ID、`userId`に投票者IDが含まれます。
+
 9.0.0
 -----
 
diff --git a/package.json b/package.json
index 27bf5c0f13..dc76ad0f81 100644
--- a/package.json
+++ b/package.json
@@ -83,6 +83,7 @@
 		"@types/websocket": "0.0.40",
 		"@types/ws": "6.0.1",
 		"animejs": "2.2.0",
+		"autobind-decorator": "2.1.0",
 		"autosize": "4.0.2",
 		"autwh": "0.1.0",
 		"bcryptjs": "2.4.3",
@@ -225,8 +226,8 @@
 		"vuex-persistedstate": "2.5.4",
 		"web-push": "3.3.3",
 		"webfinger.js": "2.6.6",
-		"webpack-cli": "3.1.2",
 		"webpack": "4.20.2",
+		"webpack-cli": "3.1.2",
 		"websocket": "1.0.28",
 		"ws": "6.0.0",
 		"xev": "2.0.1"
diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts
index f42af94370..65087cc98e 100644
--- a/src/client/app/common/scripts/compose-notification.ts
+++ b/src/client/app/common/scripts/compose-notification.ts
@@ -13,21 +13,21 @@ type Notification = {
 
 export default function(type, data): Notification {
 	switch (type) {
-		case 'drive_file_created':
+		case 'driveFileCreated':
 			return {
 				title: '%i18n:common.notification.file-uploaded%',
 				body: data.name,
 				icon: data.url
 			};
 
-		case 'unread_messaging_message':
+		case 'unreadMessagingMessage':
 			return {
 				title: '%i18n:common.notification.message-from%'.split("{}")[0] + `${getUserName(data.user)}` + '%i18n:common.notification.message-from%'.split("{}")[1] ,
 				body: data.text, // TODO: getMessagingMessageSummary(data),
 				icon: data.user.avatarUrl
 			};
 
-		case 'reversi_invited':
+		case 'reversiInvited':
 			return {
 				title: '%i18n:common.notification.reversi-invited%',
 				body: '%i18n:common.notification.reversi-invited-by%'.split("{}")[0] + `${getUserName(data.parent)}` + '%i18n:common.notification.reversi-invited-by%'.split("{}")[1],
diff --git a/src/client/app/common/scripts/note-subscriber.ts b/src/client/app/common/scripts/note-subscriber.ts
new file mode 100644
index 0000000000..5fc82942d5
--- /dev/null
+++ b/src/client/app/common/scripts/note-subscriber.ts
@@ -0,0 +1,105 @@
+import Vue from 'vue';
+
+export default prop => ({
+	data() {
+		return {
+			connection: null
+		};
+	},
+
+	computed: {
+		$_ns_note_(): any {
+			return this[prop];
+		},
+
+		$_ns_isRenote(): boolean {
+			return (this.$_ns_note_.renote &&
+				this.$_ns_note_.text == null &&
+				this.$_ns_note_.fileIds.length == 0 &&
+				this.$_ns_note_.poll == null);
+		},
+
+		$_ns_target(): any {
+			return this._ns_isRenote ? this.$_ns_note_.renote : this.$_ns_note_;
+		},
+	},
+
+	created() {
+		if (this.$store.getters.isSignedIn) {
+			this.connection = (this as any).os.stream;
+		}
+	},
+
+	mounted() {
+		this.capture(true);
+
+		if (this.$store.getters.isSignedIn) {
+			this.connection.on('_connected_', this.onStreamConnected);
+		}
+	},
+
+	beforeDestroy() {
+		this.decapture(true);
+
+		if (this.$store.getters.isSignedIn) {
+			this.connection.off('_connected_', this.onStreamConnected);
+		}
+	},
+
+	methods: {
+		capture(withHandler = false) {
+			if (this.$store.getters.isSignedIn) {
+				const data = {
+					id: this.$_ns_target.id
+				} as any;
+
+				if (
+					(this.$_ns_target.visibleUserIds || []).includes(this.$store.state.i.id) ||
+					(this.$_ns_target.mentions || []).includes(this.$store.state.i.id)
+				) {
+					data.read = true;
+				}
+
+				this.connection.send('sn', data);
+				if (withHandler) this.connection.on('noteUpdated', this.onStreamNoteUpdated);
+			}
+		},
+
+		decapture(withHandler = false) {
+			if (this.$store.getters.isSignedIn) {
+				this.connection.send('un', {
+					id: this.$_ns_target.id
+				});
+				if (withHandler) this.connection.off('noteUpdated', this.onStreamNoteUpdated);
+			}
+		},
+
+		onStreamConnected() {
+			this.capture();
+		},
+
+		onStreamNoteUpdated(data) {
+			const { type, id, body } = data;
+
+			if (id !== this.$_ns_target.id) return;
+
+			switch (type) {
+				case 'reacted': {
+					const reaction = body.reaction;
+					if (this.$_ns_target.reactionCounts == null) Vue.set(this.$_ns_target, 'reactionCounts', {});
+					this.$_ns_target.reactionCounts[reaction] = (this.$_ns_target.reactionCounts[reaction] || 0) + 1;
+					break;
+				}
+
+				case 'pollVoted': {
+					if (body.userId == this.$store.state.i.id) return;
+					const choice = body.choice;
+					this.$_ns_target.poll.choices.find(c => c.id === choice).votes++;
+					break;
+				}
+			}
+
+			this.$emit(`update:${prop}`, this.$_ns_note_);
+		},
+	}
+});
diff --git a/src/client/app/common/scripts/stream.ts b/src/client/app/common/scripts/stream.ts
new file mode 100644
index 0000000000..7dc130937b
--- /dev/null
+++ b/src/client/app/common/scripts/stream.ts
@@ -0,0 +1,318 @@
+import autobind from 'autobind-decorator';
+import { EventEmitter } from 'eventemitter3';
+import * as ReconnectingWebsocket from 'reconnecting-websocket';
+import { wsUrl } from '../../config';
+import MiOS from '../../mios';
+
+/**
+ * Misskey stream connection
+ */
+export default class Stream extends EventEmitter {
+	private stream: ReconnectingWebsocket;
+	private state: string;
+	private buffer: any[];
+	private sharedConnections: SharedConnection[] = [];
+	private nonSharedConnections: NonSharedConnection[] = [];
+
+	constructor(os: MiOS) {
+		super();
+
+		this.state = 'initializing';
+		this.buffer = [];
+
+		const user = os.store.state.i;
+
+		this.stream = new ReconnectingWebsocket(wsUrl + (user ? `?i=${user.token}` : ''));
+		this.stream.addEventListener('open', this.onOpen);
+		this.stream.addEventListener('close', this.onClose);
+		this.stream.addEventListener('message', this.onMessage);
+
+		if (user) {
+			const main = this.useSharedConnection('main');
+
+			// 自分の情報が更新されたとき
+			main.on('meUpdated', i => {
+				os.store.dispatch('mergeMe', i);
+			});
+
+			main.on('readAllNotifications', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadNotification: false
+				});
+			});
+
+			main.on('unreadNotification', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadNotification: true
+				});
+			});
+
+			main.on('readAllMessagingMessages', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadMessagingMessage: false
+				});
+			});
+
+			main.on('unreadMessagingMessage', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadMessagingMessage: true
+				});
+			});
+
+			main.on('unreadMention', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadMentions: true
+				});
+			});
+
+			main.on('readAllUnreadMentions', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadMentions: false
+				});
+			});
+
+			main.on('unreadSpecifiedNote', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadSpecifiedNotes: true
+				});
+			});
+
+			main.on('readAllUnreadSpecifiedNotes', () => {
+				os.store.dispatch('mergeMe', {
+					hasUnreadSpecifiedNotes: false
+				});
+			});
+
+			main.on('clientSettingUpdated', x => {
+				os.store.commit('settings/set', {
+					key: x.key,
+					value: x.value
+				});
+			});
+
+			main.on('homeUpdated', x => {
+				os.store.commit('settings/setHome', x);
+			});
+
+			main.on('mobileHomeUpdated', x => {
+				os.store.commit('settings/setMobileHome', x);
+			});
+
+			main.on('widgetUpdated', x => {
+				os.store.commit('settings/setWidget', {
+					id: x.id,
+					data: x.data
+				});
+			});
+
+			// トークンが再生成されたとき
+			// このままではMisskeyが利用できないので強制的にサインアウトさせる
+			main.on('myTokenRegenerated', () => {
+				alert('%i18n:common.my-token-regenerated%');
+				os.signout();
+			});
+		}
+	}
+
+	public useSharedConnection = (channel: string): SharedConnection => {
+		const existConnection = this.sharedConnections.find(c => c.channel === channel);
+
+		if (existConnection) {
+			existConnection.use();
+			return existConnection;
+		} else {
+			const connection = new SharedConnection(this, channel);
+			connection.use();
+			this.sharedConnections.push(connection);
+			return connection;
+		}
+	}
+
+	@autobind
+	public removeSharedConnection(connection: SharedConnection) {
+		this.sharedConnections = this.sharedConnections.filter(c => c.id !== connection.id);
+	}
+
+	public connectToChannel = (channel: string, params?: any): NonSharedConnection => {
+		const connection = new NonSharedConnection(this, channel, params);
+		this.nonSharedConnections.push(connection);
+		return connection;
+	}
+
+	@autobind
+	public disconnectToChannel(connection: NonSharedConnection) {
+		this.nonSharedConnections = this.nonSharedConnections.filter(c => c.id !== connection.id);
+	}
+
+	/**
+	 * Callback of when open connection
+	 */
+	@autobind
+	private onOpen() {
+		const isReconnect = this.state == 'reconnecting';
+
+		this.state = 'connected';
+		this.emit('_connected_');
+
+		// バッファーを処理
+		const _buffer = [].concat(this.buffer); // Shallow copy
+		this.buffer = []; // Clear buffer
+		_buffer.forEach(data => {
+			this.send(data); // Resend each buffered messages
+		});
+
+		// チャンネル再接続
+		if (isReconnect) {
+			this.sharedConnections.forEach(c => {
+				c.connect();
+			});
+			this.nonSharedConnections.forEach(c => {
+				c.connect();
+			});
+		}
+	}
+
+	/**
+	 * Callback of when close connection
+	 */
+	@autobind
+	private onClose() {
+		this.state = 'reconnecting';
+		this.emit('_disconnected_');
+	}
+
+	/**
+	 * Callback of when received a message from connection
+	 */
+	@autobind
+	private onMessage(message) {
+		const { type, body } = JSON.parse(message.data);
+
+		if (type == 'channel') {
+			const id = body.id;
+			const connection = this.sharedConnections.find(c => c.id === id) || this.nonSharedConnections.find(c => c.id === id);
+			connection.emit(body.type, body.body);
+		} else {
+			this.emit(type, body);
+		}
+	}
+
+	/**
+	 * Send a message to connection
+	 */
+	@autobind
+	public send(typeOrPayload, payload?) {
+		const data = payload === undefined ? typeOrPayload : {
+			type: typeOrPayload,
+			body: payload
+		};
+
+		// まだ接続が確立されていなかったらバッファリングして次に接続した時に送信する
+		if (this.state != 'connected') {
+			this.buffer.push(data);
+			return;
+		}
+
+		this.stream.send(JSON.stringify(data));
+	}
+
+	/**
+	 * Close this connection
+	 */
+	@autobind
+	public close() {
+		this.stream.removeEventListener('open', this.onOpen);
+		this.stream.removeEventListener('message', this.onMessage);
+	}
+}
+
+abstract class Connection extends EventEmitter {
+	public channel: string;
+	public id: string;
+	protected params: any;
+	protected stream: Stream;
+
+	constructor(stream: Stream, channel: string, params?: any) {
+		super();
+
+		this.stream = stream;
+		this.channel = channel;
+		this.params = params;
+		this.id = Math.random().toString();
+		this.connect();
+	}
+
+	@autobind
+	public connect() {
+		this.stream.send('connect', {
+			channel: this.channel,
+			id: this.id,
+			params: this.params
+		});
+	}
+
+	@autobind
+	public send(typeOrPayload, payload?) {
+		const data = payload === undefined ? typeOrPayload : {
+			type: typeOrPayload,
+			body: payload
+		};
+
+		this.stream.send('channel', {
+			id: this.id,
+			body: data
+		});
+	}
+
+	public abstract dispose: () => void;
+}
+
+class SharedConnection extends Connection {
+	private users = 0;
+	private disposeTimerId: any;
+
+	constructor(stream: Stream, channel: string) {
+		super(stream, channel);
+	}
+
+	@autobind
+	public use() {
+		this.users++;
+
+		// タイマー解除
+		if (this.disposeTimerId) {
+			clearTimeout(this.disposeTimerId);
+			this.disposeTimerId = null;
+		}
+	}
+
+	@autobind
+	public dispose() {
+		this.users--;
+
+		// そのコネクションの利用者が誰もいなくなったら
+		if (this.users === 0) {
+			// また直ぐに再利用される可能性があるので、一定時間待ち、
+			// 新たな利用者が現れなければコネクションを切断する
+			this.disposeTimerId = setTimeout(() => {
+				this.disposeTimerId = null;
+				this.removeAllListeners();
+				this.stream.send('disconnect', { id: this.id });
+				this.stream.removeSharedConnection(this);
+			}, 3000);
+		}
+	}
+}
+
+class NonSharedConnection extends Connection {
+	constructor(stream: Stream, channel: string, params?: any) {
+		super(stream, channel, params);
+	}
+
+	@autobind
+	public dispose() {
+		this.removeAllListeners();
+		this.stream.send('disconnect', { id: this.id });
+		this.stream.disconnectToChannel(this);
+	}
+}
diff --git a/src/client/app/common/scripts/streaming/drive.ts b/src/client/app/common/scripts/streaming/drive.ts
deleted file mode 100644
index 50fff05737..0000000000
--- a/src/client/app/common/scripts/streaming/drive.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Drive stream connection
- */
-export class DriveStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'drive', {
-			i: me.token
-		});
-	}
-}
-
-export class DriveStreamManager extends StreamManager<DriveStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new DriveStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts b/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
deleted file mode 100644
index adfa75ff3b..0000000000
--- a/src/client/app/common/scripts/streaming/games/reversi/reversi-game.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import Stream from '../../stream';
-import MiOS from '../../../../../mios';
-
-export class ReversiGameStream extends Stream {
-	constructor(os: MiOS, me, game) {
-		super(os, 'games/reversi-game', me ? {
-			i: me.token,
-			game: game.id
-		} : {
-			game: game.id
-		});
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/games/reversi/reversi.ts b/src/client/app/common/scripts/streaming/games/reversi/reversi.ts
deleted file mode 100644
index 1f4fd8c63e..0000000000
--- a/src/client/app/common/scripts/streaming/games/reversi/reversi.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import StreamManager from '../../stream-manager';
-import Stream from '../../stream';
-import MiOS from '../../../../../mios';
-
-export class ReversiStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'games/reversi', {
-			i: me.token
-		});
-	}
-}
-
-export class ReversiStreamManager extends StreamManager<ReversiStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new ReversiStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/global-timeline.ts b/src/client/app/common/scripts/streaming/global-timeline.ts
deleted file mode 100644
index a639f1595c..0000000000
--- a/src/client/app/common/scripts/streaming/global-timeline.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Global timeline stream connection
- */
-export class GlobalTimelineStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'global-timeline', {
-			i: me.token
-		});
-	}
-}
-
-export class GlobalTimelineStreamManager extends StreamManager<GlobalTimelineStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new GlobalTimelineStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/hashtag.ts b/src/client/app/common/scripts/streaming/hashtag.ts
deleted file mode 100644
index 276b8f8d3d..0000000000
--- a/src/client/app/common/scripts/streaming/hashtag.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import Stream from './stream';
-import MiOS from '../../../mios';
-
-export class HashtagStream extends Stream {
-	constructor(os: MiOS, me, q) {
-		super(os, 'hashtag', me ? {
-			i: me.token,
-			q: JSON.stringify(q)
-		} : {
-			q: JSON.stringify(q)
-		});
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/home.ts b/src/client/app/common/scripts/streaming/home.ts
deleted file mode 100644
index 26729507fb..0000000000
--- a/src/client/app/common/scripts/streaming/home.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Home stream connection
- */
-export class HomeStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, '', {
-			i: me.token
-		});
-
-		// 最終利用日時を更新するため定期的にaliveメッセージを送信
-		setInterval(() => {
-			this.send({ type: 'alive' });
-			me.lastUsedAt = new Date();
-		}, 1000 * 60);
-
-		// 自分の情報が更新されたとき
-		this.on('meUpdated', i => {
-			if (os.debug) {
-				console.log('I updated:', i);
-			}
-
-			os.store.dispatch('mergeMe', i);
-		});
-
-		this.on('read_all_notifications', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadNotification: false
-			});
-		});
-
-		this.on('unread_notification', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadNotification: true
-			});
-		});
-
-		this.on('read_all_messaging_messages', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadMessagingMessage: false
-			});
-		});
-
-		this.on('unread_messaging_message', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadMessagingMessage: true
-			});
-		});
-
-		this.on('unreadMention', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadMentions: true
-			});
-		});
-
-		this.on('readAllUnreadMentions', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadMentions: false
-			});
-		});
-
-		this.on('unreadSpecifiedNote', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadSpecifiedNotes: true
-			});
-		});
-
-		this.on('readAllUnreadSpecifiedNotes', () => {
-			os.store.dispatch('mergeMe', {
-				hasUnreadSpecifiedNotes: false
-			});
-		});
-
-		this.on('clientSettingUpdated', x => {
-			os.store.commit('settings/set', {
-				key: x.key,
-				value: x.value
-			});
-		});
-
-		this.on('home_updated', x => {
-			os.store.commit('settings/setHome', x);
-		});
-
-		this.on('mobile_home_updated', x => {
-			os.store.commit('settings/setMobileHome', x);
-		});
-
-		this.on('widgetUpdated', x => {
-			os.store.commit('settings/setWidget', {
-				id: x.id,
-				data: x.data
-			});
-		});
-
-		// トークンが再生成されたとき
-		// このままではMisskeyが利用できないので強制的にサインアウトさせる
-		this.on('my_token_regenerated', () => {
-			alert('%i18n:common.my-token-regenerated%');
-			os.signout();
-		});
-	}
-}
-
-export class HomeStreamManager extends StreamManager<HomeStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new HomeStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/hybrid-timeline.ts b/src/client/app/common/scripts/streaming/hybrid-timeline.ts
deleted file mode 100644
index cd290797c4..0000000000
--- a/src/client/app/common/scripts/streaming/hybrid-timeline.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Hybrid timeline stream connection
- */
-export class HybridTimelineStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'hybrid-timeline', {
-			i: me.token
-		});
-	}
-}
-
-export class HybridTimelineStreamManager extends StreamManager<HybridTimelineStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new HybridTimelineStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/local-timeline.ts b/src/client/app/common/scripts/streaming/local-timeline.ts
deleted file mode 100644
index 41c36aa14c..0000000000
--- a/src/client/app/common/scripts/streaming/local-timeline.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Local timeline stream connection
- */
-export class LocalTimelineStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'local-timeline', me ? {
-			i: me.token
-		} : {});
-	}
-}
-
-export class LocalTimelineStreamManager extends StreamManager<LocalTimelineStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new LocalTimelineStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/messaging-index.ts b/src/client/app/common/scripts/streaming/messaging-index.ts
deleted file mode 100644
index addcccb952..0000000000
--- a/src/client/app/common/scripts/streaming/messaging-index.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Messaging index stream connection
- */
-export class MessagingIndexStream extends Stream {
-	constructor(os: MiOS, me) {
-		super(os, 'messaging-index', {
-			i: me.token
-		});
-	}
-}
-
-export class MessagingIndexStreamManager extends StreamManager<MessagingIndexStream> {
-	private me;
-	private os: MiOS;
-
-	constructor(os: MiOS, me) {
-		super();
-
-		this.me = me;
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new MessagingIndexStream(this.os, this.me);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/messaging.ts b/src/client/app/common/scripts/streaming/messaging.ts
deleted file mode 100644
index a59377d867..0000000000
--- a/src/client/app/common/scripts/streaming/messaging.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import Stream from './stream';
-import MiOS from '../../../mios';
-
-/**
- * Messaging stream connection
- */
-export class MessagingStream extends Stream {
-	constructor(os: MiOS, me, otherparty) {
-		super(os, 'messaging', {
-			i: me.token,
-			otherparty
-		});
-
-		(this as any).on('_connected_', () => {
-			this.send({
-				i: me.token
-			});
-		});
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/notes-stats.ts b/src/client/app/common/scripts/streaming/notes-stats.ts
deleted file mode 100644
index 9e3e78a709..0000000000
--- a/src/client/app/common/scripts/streaming/notes-stats.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Notes stats stream connection
- */
-export class NotesStatsStream extends Stream {
-	constructor(os: MiOS) {
-		super(os, 'notes-stats');
-	}
-}
-
-export class NotesStatsStreamManager extends StreamManager<NotesStatsStream> {
-	private os: MiOS;
-
-	constructor(os: MiOS) {
-		super();
-
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new NotesStatsStream(this.os);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/server-stats.ts b/src/client/app/common/scripts/streaming/server-stats.ts
deleted file mode 100644
index 9983dfcaf0..0000000000
--- a/src/client/app/common/scripts/streaming/server-stats.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import Stream from './stream';
-import StreamManager from './stream-manager';
-import MiOS from '../../../mios';
-
-/**
- * Server stats stream connection
- */
-export class ServerStatsStream extends Stream {
-	constructor(os: MiOS) {
-		super(os, 'server-stats');
-	}
-}
-
-export class ServerStatsStreamManager extends StreamManager<ServerStatsStream> {
-	private os: MiOS;
-
-	constructor(os: MiOS) {
-		super();
-
-		this.os = os;
-	}
-
-	public getConnection() {
-		if (this.connection == null) {
-			this.connection = new ServerStatsStream(this.os);
-		}
-
-		return this.connection;
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/stream-manager.ts b/src/client/app/common/scripts/streaming/stream-manager.ts
deleted file mode 100644
index 8dd06f67d3..0000000000
--- a/src/client/app/common/scripts/streaming/stream-manager.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { EventEmitter } from 'eventemitter3';
-import * as uuid from 'uuid';
-import Connection from './stream';
-import { erase } from '../../../../../prelude/array';
-
-/**
- * ストリーム接続を管理するクラス
- * 複数の場所から同じストリームを利用する際、接続をまとめたりする
- */
-export default abstract class StreamManager<T extends Connection> extends EventEmitter {
-	private _connection: T = null;
-
-	private disposeTimerId: any;
-
-	/**
-	 * コネクションを必要としているユーザー
-	 */
-	private users = [];
-
-	protected set connection(connection: T) {
-		this._connection = connection;
-
-		if (this._connection == null) {
-			this.emit('disconnected');
-		} else {
-			this.emit('connected', this._connection);
-
-			this._connection.on('_connected_', () => {
-				this.emit('_connected_');
-			});
-
-			this._connection.on('_disconnected_', () => {
-				this.emit('_disconnected_');
-			});
-
-			this._connection.user = 'Managed';
-		}
-	}
-
-	protected get connection() {
-		return this._connection;
-	}
-
-	/**
-	 * コネクションを持っているか否か
-	 */
-	public get hasConnection() {
-		return this._connection != null;
-	}
-
-	public get state(): string {
-		if (!this.hasConnection) return 'no-connection';
-		return this._connection.state;
-	}
-
-	/**
-	 * コネクションを要求します
-	 */
-	public abstract getConnection(): T;
-
-	/**
-	 * 現在接続しているコネクションを取得します
-	 */
-	public borrow() {
-		return this._connection;
-	}
-
-	/**
-	 * コネクションを要求するためのユーザーIDを発行します
-	 */
-	public use() {
-		// タイマー解除
-		if (this.disposeTimerId) {
-			clearTimeout(this.disposeTimerId);
-			this.disposeTimerId = null;
-		}
-
-		// ユーザーID生成
-		const userId = uuid();
-
-		this.users.push(userId);
-
-		this._connection.user = `Managed (${ this.users.length })`;
-
-		return userId;
-	}
-
-	/**
-	 * コネクションを利用し終わってもう必要ないことを通知します
-	 * @param userId use で発行したユーザーID
-	 */
-	public dispose(userId) {
-		this.users = erase(userId, this.users);
-
-		this._connection.user = `Managed (${ this.users.length })`;
-
-		// 誰もコネクションの利用者がいなくなったら
-		if (this.users.length == 0) {
-			// また直ぐに再利用される可能性があるので、一定時間待ち、
-			// 新たな利用者が現れなければコネクションを切断する
-			this.disposeTimerId = setTimeout(() => {
-				this.disposeTimerId = null;
-
-				this.connection.close();
-				this.connection = null;
-			}, 3000);
-		}
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/stream.ts b/src/client/app/common/scripts/streaming/stream.ts
deleted file mode 100644
index 4ab78f1190..0000000000
--- a/src/client/app/common/scripts/streaming/stream.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-import { EventEmitter } from 'eventemitter3';
-import * as uuid from 'uuid';
-import * as ReconnectingWebsocket from 'reconnecting-websocket';
-import { wsUrl } from '../../../config';
-import MiOS from '../../../mios';
-
-/**
- * Misskey stream connection
- */
-export default class Connection extends EventEmitter {
-	public state: string;
-	private buffer: any[];
-	public socket: ReconnectingWebsocket;
-	public name: string;
-	public connectedAt: Date;
-	public user: string = null;
-	public in: number = 0;
-	public out: number = 0;
-	public inout: Array<{
-		type: 'in' | 'out',
-		at: Date,
-		data: string
-	}> = [];
-	public id: string;
-	public isSuspended = false;
-	private os: MiOS;
-
-	constructor(os: MiOS, endpoint, params?) {
-		super();
-
-		//#region BIND
-		this.onOpen =    this.onOpen.bind(this);
-		this.onClose =   this.onClose.bind(this);
-		this.onMessage = this.onMessage.bind(this);
-		this.send =      this.send.bind(this);
-		this.close =     this.close.bind(this);
-		//#endregion
-
-		this.id = uuid();
-		this.os = os;
-		this.name = endpoint;
-		this.state = 'initializing';
-		this.buffer = [];
-
-		const query = params
-			? Object.keys(params)
-				.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)
-				.join('&')
-			: null;
-
-		this.socket = new ReconnectingWebsocket(`${wsUrl}/${endpoint}${query ? `?${query}` : ''}`);
-		this.socket.addEventListener('open', this.onOpen);
-		this.socket.addEventListener('close', this.onClose);
-		this.socket.addEventListener('message', this.onMessage);
-
-		// Register this connection for debugging
-		this.os.registerStreamConnection(this);
-	}
-
-	/**
-	 * Callback of when open connection
-	 */
-	private onOpen() {
-		this.state = 'connected';
-		this.emit('_connected_');
-
-		this.connectedAt = new Date();
-
-		// バッファーを処理
-		const _buffer = [].concat(this.buffer); // Shallow copy
-		this.buffer = []; // Clear buffer
-		_buffer.forEach(data => {
-			this.send(data); // Resend each buffered messages
-
-			if (this.os.debug) {
-				this.out++;
-				this.inout.push({ type: 'out', at: new Date(), data });
-			}
-		});
-	}
-
-	/**
-	 * Callback of when close connection
-	 */
-	private onClose() {
-		this.state = 'reconnecting';
-		this.emit('_disconnected_');
-	}
-
-	/**
-	 * Callback of when received a message from connection
-	 */
-	private onMessage(message) {
-		if (this.isSuspended) return;
-
-		if (this.os.debug) {
-			this.in++;
-			this.inout.push({ type: 'in', at: new Date(), data: message.data });
-		}
-
-		try {
-			const msg = JSON.parse(message.data);
-			if (msg.type) this.emit(msg.type, msg.body);
-		} catch (e) {
-			// noop
-		}
-	}
-
-	/**
-	 * Send a message to connection
-	 */
-	public send(data) {
-		if (this.isSuspended) return;
-
-		// まだ接続が確立されていなかったらバッファリングして次に接続した時に送信する
-		if (this.state != 'connected') {
-			this.buffer.push(data);
-			return;
-		}
-
-		if (this.os.debug) {
-			this.out++;
-			this.inout.push({ type: 'out', at: new Date(), data });
-		}
-
-		this.socket.send(JSON.stringify(data));
-	}
-
-	/**
-	 * Close this connection
-	 */
-	public close() {
-		this.os.unregisterStreamConnection(this);
-		this.socket.removeEventListener('open', this.onOpen);
-		this.socket.removeEventListener('message', this.onMessage);
-	}
-}
diff --git a/src/client/app/common/scripts/streaming/user-list.ts b/src/client/app/common/scripts/streaming/user-list.ts
deleted file mode 100644
index 30a52b98dd..0000000000
--- a/src/client/app/common/scripts/streaming/user-list.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import Stream from './stream';
-import MiOS from '../../mios';
-
-export class UserListStream extends Stream {
-	constructor(os: MiOS, me, listId) {
-		super(os, 'user-list', {
-			i: me.token,
-			listId
-		});
-
-		(this as any).on('_connected_', () => {
-			this.send({
-				i: me.token
-			});
-		});
-	}
-}
diff --git a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue b/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
index 1539c88de0..0a18e0b19a 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
@@ -9,7 +9,6 @@
 import Vue from 'vue';
 import XGame from './reversi.game.vue';
 import XRoom from './reversi.room.vue';
-import { ReversiGameStream } from '../../../../scripts/streaming/games/reversi/reversi-game';
 
 export default Vue.extend({
 	components: {
@@ -34,12 +33,13 @@ export default Vue.extend({
 	},
 	created() {
 		this.g = this.game;
-		this.connection = new ReversiGameStream((this as any).os, this.$store.state.i, this.game);
+		this.connection = (this as any).os.stream.connectToChannel('gamesReversiGame', {
+			gameId: this.game.id
+		});
 		this.connection.on('started', this.onStarted);
 	},
 	beforeDestroy() {
-		this.connection.off('started', this.onStarted);
-		this.connection.close();
+		this.connection.dispose();
 	},
 	methods: {
 		onStarted(game) {
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index 3725aa6cb4..a040162802 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -59,15 +59,13 @@ export default Vue.extend({
 			myGames: [],
 			matching: null,
 			invitations: [],
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	mounted() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.streams.reversiStream.getConnection();
-			this.connectionId = (this as any).os.streams.reversiStream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('gamesReversi');
 
 			this.connection.on('invited', this.onInvited);
 
@@ -90,8 +88,7 @@ export default Vue.extend({
 
 	beforeDestroy() {
 		if (this.connection) {
-			this.connection.off('invited', this.onInvited);
-			(this as any).os.streams.reversiStream.dispose(this.connectionId);
+			this.connection.dispose();
 		}
 	},
 
diff --git a/src/client/app/common/views/components/games/reversi/reversi.vue b/src/client/app/common/views/components/games/reversi/reversi.vue
index 6eb9511ce9..f2156bc41b 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.vue
@@ -47,7 +47,6 @@ export default Vue.extend({
 			game: null,
 			matching: null,
 			connection: null,
-			connectionId: null,
 			pingClock: null
 		};
 	},
@@ -66,8 +65,7 @@ export default Vue.extend({
 		this.fetch();
 
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.streams.reversiStream.getConnection();
-			this.connectionId = (this as any).os.streams.reversiStream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('gamesReversi');
 
 			this.connection.on('matched', this.onMatched);
 
@@ -84,9 +82,7 @@ export default Vue.extend({
 
 	beforeDestroy() {
 		if (this.connection) {
-			this.connection.off('matched', this.onMatched);
-			(this as any).os.streams.reversiStream.dispose(this.connectionId);
-
+			this.connection.dispose();
 			clearInterval(this.pingClock);
 		}
 	},
diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index 98661bc39d..c2cd79e116 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -30,7 +30,6 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { MessagingStream } from '../../scripts/streaming/messaging';
 import XMessage from './messaging-room.message.vue';
 import XForm from './messaging-room.form.vue';
 import { url } from '../../../config';
@@ -72,7 +71,7 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = new MessagingStream((this as any).os, this.$store.state.i, this.user.id);
+		this.connection =((this as any).os.stream.connectToChannel('messaging', { otherparty: this.user.id });
 
 		this.connection.on('message', this.onMessage);
 		this.connection.on('read', this.onRead);
@@ -92,9 +91,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off('message', this.onMessage);
-		this.connection.off('read', this.onRead);
-		this.connection.close();
+		this.connection.dispose();
 
 		if (this.isNaked) {
 			window.removeEventListener('scroll', this.onScroll);
@@ -166,6 +163,7 @@ export default Vue.extend({
 		},
 
 		onMessage(message) {
+			console.log(message);
 			// サウンドを再生する
 			if (this.$store.state.device.enableSounds) {
 				const sound = new Audio(`${url}/assets/message.mp3`);
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index 91453e16ec..f5b5e232f6 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -71,13 +71,11 @@ export default Vue.extend({
 			messages: [],
 			q: null,
 			result: [],
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	mounted() {
-		this.connection = (this as any).os.streams.messagingIndexStream.getConnection();
-		this.connectionId = (this as any).os.streams.messagingIndexStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('messagingIndex');
 
 		this.connection.on('message', this.onMessage);
 		this.connection.on('read', this.onRead);
@@ -88,9 +86,7 @@ export default Vue.extend({
 		});
 	},
 	beforeDestroy() {
-		this.connection.off('message', this.onMessage);
-		this.connection.off('read', this.onRead);
-		(this as any).os.streams.messagingIndexStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		getAcct,
diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index 7025ecea33..9224f82cb9 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -56,7 +56,7 @@ export default Vue.extend({
 				username: this.username,
 				password: this.password,
 				token: this.user && this.user.twoFactorEnabled ? this.token : undefined
-			}).then(() => {
+			}, true).then(() => {
 				location.reload();
 			}).catch(() => {
 				alert('%i18n:@login-failed%');
diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue
index b817ca729d..8e06b13491 100644
--- a/src/client/app/common/views/components/signup.vue
+++ b/src/client/app/common/views/components/signup.vue
@@ -131,11 +131,11 @@ export default Vue.extend({
 				password: this.password,
 				invitationCode: this.invitationCode,
 				'g-recaptcha-response': this.meta.recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null
-			}).then(() => {
+			}, true).then(() => {
 				(this as any).api('signin', {
 					username: this.username,
 					password: this.password
-				}).then(() => {
+				}, true).then(() => {
 					location.href = '/';
 				});
 			}).catch(() => {
diff --git a/src/client/app/common/views/components/stream-indicator.vue b/src/client/app/common/views/components/stream-indicator.vue
index d573db32e6..0f25b37cc9 100644
--- a/src/client/app/common/views/components/stream-indicator.vue
+++ b/src/client/app/common/views/components/stream-indicator.vue
@@ -22,7 +22,7 @@ import * as anime from 'animejs';
 export default Vue.extend({
 	computed: {
 		stream() {
-			return (this as any).os.stream;
+			return (this as any).os.stream.useSharedConnection('main');
 		}
 	},
 	created() {
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index 6934fb4856..4a66db57b8 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -38,23 +38,20 @@ export default Vue.extend({
 		return {
 			fetching: true,
 			notes: [],
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	mounted() {
 		this.fetch();
 
-		this.connection = (this as any).os.streams.localTimelineStream.getConnection();
-		this.connectionId = (this as any).os.streams.localTimelineStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('localTimeline');
 
 		this.connection.on('note', this.onNote);
 	},
 
 	beforeDestroy() {
-		this.connection.off('note', this.onNote);
-		(this as any).os.streams.localTimelineStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/common/views/widgets/photo-stream.vue b/src/client/app/common/views/widgets/photo-stream.vue
index 3e24c58e8e..047b01df4f 100644
--- a/src/client/app/common/views/widgets/photo-stream.vue
+++ b/src/client/app/common/views/widgets/photo-stream.vue
@@ -24,15 +24,13 @@ export default define({
 		return {
 			images: [],
 			fetching: true,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
-		this.connection.on('drive_file_created', this.onDriveFileCreated);
+		this.connection.on('driveFileCreated', this.onDriveFileCreated);
 
 		(this as any).api('drive/stream', {
 			type: 'image/*',
@@ -43,8 +41,7 @@ export default define({
 		});
 	},
 	beforeDestroy() {
-		this.connection.off('drive_file_created', this.onDriveFileCreated);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		onDriveFileCreated(file) {
diff --git a/src/client/app/common/views/widgets/posts-monitor.vue b/src/client/app/common/views/widgets/posts-monitor.vue
index 18df1241a9..1c70e6dbc4 100644
--- a/src/client/app/common/views/widgets/posts-monitor.vue
+++ b/src/client/app/common/views/widgets/posts-monitor.vue
@@ -82,7 +82,6 @@ export default define({
 	data() {
 		return {
 			connection: null,
-			connectionId: null,
 			viewBoxY: 30,
 			stats: [],
 			fediGradientId: uuid(),
@@ -110,8 +109,7 @@ export default define({
 		}
 	},
 	mounted() {
-		this.connection = (this as any).os.streams.notesStatsStream.getConnection();
-		this.connectionId = (this as any).os.streams.notesStatsStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('notesStats');
 
 		this.connection.on('stats', this.onStats);
 		this.connection.on('statsLog', this.onStatsLog);
@@ -121,9 +119,7 @@ export default define({
 		});
 	},
 	beforeDestroy() {
-		this.connection.off('stats', this.onStats);
-		this.connection.off('statsLog', this.onStatsLog);
-		(this as any).os.streams.notesStatsStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		toggle() {
diff --git a/src/client/app/common/views/widgets/server.vue b/src/client/app/common/views/widgets/server.vue
index d796a3ae05..62d75e2bf6 100644
--- a/src/client/app/common/views/widgets/server.vue
+++ b/src/client/app/common/views/widgets/server.vue
@@ -45,8 +45,7 @@ export default define({
 		return {
 			fetching: true,
 			meta: null,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	mounted() {
@@ -55,11 +54,10 @@ export default define({
 			this.fetching = false;
 		});
 
-		this.connection = (this as any).os.streams.serverStatsStream.getConnection();
-		this.connectionId = (this as any).os.streams.serverStatsStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('serverStats');
 	},
 	beforeDestroy() {
-		(this as any).os.streams.serverStatsStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		toggle() {
diff --git a/src/client/app/config.ts b/src/client/app/config.ts
index a326c521db..c3bc427eab 100644
--- a/src/client/app/config.ts
+++ b/src/client/app/config.ts
@@ -12,7 +12,7 @@ export const host = address.host;
 export const hostname = address.hostname;
 export const url = address.origin;
 export const apiUrl = url + '/api';
-export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://');
+export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://') + '/streaming';
 export const lang = _LANG_;
 export const langs = _LANGS_;
 export const themeColor = _THEME_COLOR_;
diff --git a/src/client/app/desktop/script.ts b/src/client/app/desktop/script.ts
index 05aa928fa3..85c81d73a2 100644
--- a/src/client/app/desktop/script.ts
+++ b/src/client/app/desktop/script.ts
@@ -9,7 +9,6 @@ import './style.styl';
 
 import init from '../init';
 import fuckAdBlock from '../common/scripts/fuck-ad-block';
-import { HomeStreamManager } from '../common/scripts/streaming/home';
 import composeNotification from '../common/scripts/compose-notification';
 
 import chooseDriveFolder from './api/choose-drive-folder';
@@ -37,6 +36,7 @@ import MkTag from './views/pages/tag.vue';
 import MkReversi from './views/pages/games/reversi.vue';
 import MkShare from './views/pages/share.vue';
 import MkFollow from '../common/views/pages/follow.vue';
+import MiOS from '../mios';
 
 /**
  * init
@@ -102,62 +102,56 @@ init(async (launch) => {
 		}
 
 		if ((Notification as any).permission == 'granted') {
-			registerNotifications(os.stream);
+			registerNotifications(os);
 		}
 	}
 }, true);
 
-function registerNotifications(stream: HomeStreamManager) {
+function registerNotifications(os: MiOS) {
+	const stream = os.stream;
+
 	if (stream == null) return;
 
-	if (stream.hasConnection) {
-		attach(stream.borrow());
-	}
+	const connection = stream.useSharedConnection('main');
 
-	stream.on('connected', connection => {
-		attach(connection);
+	connection.on('notification', notification => {
+		const _n = composeNotification('notification', notification);
+		const n = new Notification(_n.title, {
+			body: _n.body,
+			icon: _n.icon
+		});
+		setTimeout(n.close.bind(n), 6000);
 	});
 
-	function attach(connection) {
-		connection.on('notification', notification => {
-			const _n = composeNotification('notification', notification);
-			const n = new Notification(_n.title, {
-				body: _n.body,
-				icon: _n.icon
-			});
-			setTimeout(n.close.bind(n), 6000);
+	connection.on('driveFileCreated', file => {
+		const _n = composeNotification('driveFileCreated', file);
+		const n = new Notification(_n.title, {
+			body: _n.body,
+			icon: _n.icon
 		});
+		setTimeout(n.close.bind(n), 5000);
+	});
 
-		connection.on('drive_file_created', file => {
-			const _n = composeNotification('drive_file_created', file);
-			const n = new Notification(_n.title, {
-				body: _n.body,
-				icon: _n.icon
-			});
-			setTimeout(n.close.bind(n), 5000);
+	connection.on('unreadMessagingMessage', message => {
+		const _n = composeNotification('unreadMessagingMessage', message);
+		const n = new Notification(_n.title, {
+			body: _n.body,
+			icon: _n.icon
 		});
+		n.onclick = () => {
+			n.close();
+			/*(riot as any).mount(document.body.appendChild(document.createElement('mk-messaging-room-window')), {
+				user: message.user
+			});*/
+		};
+		setTimeout(n.close.bind(n), 7000);
+	});
 
-		connection.on('unread_messaging_message', message => {
-			const _n = composeNotification('unread_messaging_message', message);
-			const n = new Notification(_n.title, {
-				body: _n.body,
-				icon: _n.icon
-			});
-			n.onclick = () => {
-				n.close();
-				/*(riot as any).mount(document.body.appendChild(document.createElement('mk-messaging-room-window')), {
-					user: message.user
-				});*/
-			};
-			setTimeout(n.close.bind(n), 7000);
+	connection.on('reversiInvited', matching => {
+		const _n = composeNotification('reversiInvited', matching);
+		const n = new Notification(_n.title, {
+			body: _n.body,
+			icon: _n.icon
 		});
-
-		connection.on('reversi_invited', matching => {
-			const _n = composeNotification('reversi_invited', matching);
-			const n = new Notification(_n.title, {
-				body: _n.body,
-				icon: _n.icon
-			});
-		});
-	}
+	});
 }
diff --git a/src/client/app/desktop/views/components/drive.vue b/src/client/app/desktop/views/components/drive.vue
index f9b7eea64e..1376a04d99 100644
--- a/src/client/app/desktop/views/components/drive.vue
+++ b/src/client/app/desktop/views/components/drive.vue
@@ -98,8 +98,7 @@ export default Vue.extend({
 			hierarchyFolders: [],
 			selectedFiles: [],
 			uploadings: [],
-			connection: null,
-			connectionId: null,
+			connection: null
 
 			/**
 			 * ドロップされようとしているか
@@ -116,8 +115,7 @@ export default Vue.extend({
 		};
 	},
 	mounted() {
-		this.connection = (this as any).os.streams.driveStream.getConnection();
-		this.connectionId = (this as any).os.streams.driveStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('drive');
 
 		this.connection.on('file_created', this.onStreamDriveFileCreated);
 		this.connection.on('file_updated', this.onStreamDriveFileUpdated);
@@ -132,12 +130,7 @@ export default Vue.extend({
 		}
 	},
 	beforeDestroy() {
-		this.connection.off('file_created', this.onStreamDriveFileCreated);
-		this.connection.off('file_updated', this.onStreamDriveFileUpdated);
-		this.connection.off('file_deleted', this.onStreamDriveFileDeleted);
-		this.connection.off('folder_created', this.onStreamDriveFolderCreated);
-		this.connection.off('folder_updated', this.onStreamDriveFolderUpdated);
-		(this as any).os.streams.driveStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		onContextmenu(e) {
diff --git a/src/client/app/desktop/views/components/follow-button.vue b/src/client/app/desktop/views/components/follow-button.vue
index 4d4bd5cc5a..4d3d61dfe0 100644
--- a/src/client/app/desktop/views/components/follow-button.vue
+++ b/src/client/app/desktop/views/components/follow-button.vue
@@ -34,23 +34,18 @@ export default Vue.extend({
 		return {
 			u: this.user,
 			wait: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
-
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 		this.connection.on('follow', this.onFollow);
 		this.connection.on('unfollow', this.onUnfollow);
 	},
 
 	beforeDestroy() {
-		this.connection.off('follow', this.onFollow);
-		this.connection.off('unfollow', this.onUnfollow);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/desktop/views/components/home.vue b/src/client/app/desktop/views/components/home.vue
index bdaf2ddf47..9008e26263 100644
--- a/src/client/app/desktop/views/components/home.vue
+++ b/src/client/app/desktop/views/components/home.vue
@@ -141,7 +141,6 @@ export default Vue.extend({
 	data() {
 		return {
 			connection: null,
-			connectionId: null,
 			widgetAdderSelected: null,
 			trash: []
 		};
@@ -176,12 +175,11 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 	},
 
 	beforeDestroy() {
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/desktop/views/components/note-detail.vue b/src/client/app/desktop/views/components/note-detail.vue
index 0c4b560e98..b119f23d7a 100644
--- a/src/client/app/desktop/views/components/note-detail.vue
+++ b/src/client/app/desktop/views/components/note-detail.vue
@@ -93,12 +93,15 @@ import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './notes.note.sub.vue';
 import { sum } from '../../../../../prelude/array';
+import noteSubscriber from '../../../common/scripts/note-subscriber';
 
 export default Vue.extend({
 	components: {
 		XSub
 	},
 
+	mixins: [noteSubscriber('note')],
+
 	props: {
 		note: {
 			type: Object,
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index b628d045aa..3892260181 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -77,6 +77,7 @@ import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './notes.note.sub.vue';
 import { sum } from '../../../../../prelude/array';
+import noteSubscriber from '../../../common/scripts/note-subscriber';
 
 function focus(el, fn) {
 	const target = fn(el);
@@ -94,6 +95,8 @@ export default Vue.extend({
 		XSub
 	},
 
+	mixins: [noteSubscriber('note')],
+
 	props: {
 		note: {
 			type: Object,
@@ -104,9 +107,7 @@ export default Vue.extend({
 	data() {
 		return {
 			showContent: false,
-			isDetailOpened: false,
-			connection: null,
-			connectionId: null
+			isDetailOpened: false
 		};
 	},
 
@@ -168,86 +169,7 @@ export default Vue.extend({
 		}
 	},
 
-	created() {
-		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
-		}
-	},
-
-	mounted() {
-		this.capture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.on('_connected_', this.onStreamConnected);
-		}
-
-		// Draw map
-		if (this.p.geo) {
-			const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
-			if (shouldShowMap) {
-				(this as any).os.getGoogleMaps().then(maps => {
-					const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]);
-					const map = new maps.Map(this.$refs.map, {
-						center: uluru,
-						zoom: 15
-					});
-					new maps.Marker({
-						position: uluru,
-						map: map
-					});
-				});
-			}
-		}
-	},
-
-	beforeDestroy() {
-		this.decapture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.off('_connected_', this.onStreamConnected);
-			(this as any).os.stream.dispose(this.connectionId);
-		}
-	},
-
 	methods: {
-		capture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				const data = {
-					type: 'capture',
-					id: this.p.id
-				} as any;
-				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
-					data.read = true;
-				}
-				this.connection.send(data);
-				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		decapture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
-					type: 'decapture',
-					id: this.p.id
-				});
-				if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		onStreamConnected() {
-			this.capture();
-		},
-
-		onStreamNoteUpdated(data) {
-			const note = data.note;
-			if (note.id == this.note.id) {
-				this.$emit('update:note', note);
-			} else if (note.id == this.note.renoteId) {
-				this.note.renote = note;
-			}
-		},
-
 		reply(viaKeyboard = false) {
 			(this as any).os.new(MkPostFormWindow, {
 				reply: this.p,
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 1f3f62395a..95b8e1355a 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -118,10 +118,10 @@ export default Vue.extend({
 			notifications: [],
 			moreNotifications: false,
 			connection: null,
-			connectionId: null,
 			getNoteSummary
 		};
 	},
+
 	computed: {
 		_notifications(): any[] {
 			return (this.notifications as any).map(notification => {
@@ -133,9 +133,9 @@ export default Vue.extend({
 			});
 		}
 	},
+
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
 		this.connection.on('notification', this.onNotification);
 
@@ -153,10 +153,11 @@ export default Vue.extend({
 			this.fetching = false;
 		});
 	},
+
 	beforeDestroy() {
-		this.connection.off('notification', this.onNotification);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
+
 	methods: {
 		fetchMoreNotifications() {
 			this.fetchingMoreNotifications = true;
@@ -177,10 +178,11 @@ export default Vue.extend({
 				this.fetchingMoreNotifications = false;
 			});
 		},
+
 		onNotification(notification) {
 			// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
 			this.connection.send({
-				type: 'read_notification',
+				type: 'readNotification',
 				id: notification.id
 			});
 
diff --git a/src/client/app/desktop/views/components/settings.signins.vue b/src/client/app/desktop/views/components/settings.signins.vue
index a414c95c27..7d1bb4f4e7 100644
--- a/src/client/app/desktop/views/components/settings.signins.vue
+++ b/src/client/app/desktop/views/components/settings.signins.vue
@@ -23,25 +23,25 @@ export default Vue.extend({
 		return {
 			fetching: true,
 			signins: [],
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
+
 	mounted() {
 		(this as any).api('i/signin_history').then(signins => {
 			this.signins = signins;
 			this.fetching = false;
 		});
 
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
 		this.connection.on('signin', this.onSignin);
 	},
+
 	beforeDestroy() {
-		this.connection.off('signin', this.onSignin);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
+
 	methods: {
 		onSignin(signin) {
 			this.signins.unshift(signin);
diff --git a/src/client/app/desktop/views/components/timeline.core.vue b/src/client/app/desktop/views/components/timeline.core.vue
index aef873dd11..2c17e936eb 100644
--- a/src/client/app/desktop/views/components/timeline.core.vue
+++ b/src/client/app/desktop/views/components/timeline.core.vue
@@ -15,7 +15,6 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { HashtagStream } from '../../../common/scripts/streaming/hashtag';
 
 const fetchLimit = 10;
 
@@ -35,9 +34,7 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
-			streamManager: null,
 			connection: null,
-			connectionId: null,
 			date: null,
 			baseQuery: {
 				includeMyRenotes: this.$store.state.settings.showMyRenotes,
@@ -69,69 +66,33 @@ export default Vue.extend({
 			this.query = {
 				query: this.tagTl.query
 			};
-			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+			this.connection = (this as any).os.stream.connectToChannel('hashtag', { q: this.tagTl.query });
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.connection.close();
-			});
 		} else if (this.src == 'home') {
 			this.endpoint = 'notes/timeline';
 			const onChangeFollowing = () => {
 				this.fetch();
 			};
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('homeTimeline');
 			this.connection.on('note', prepend);
 			this.connection.on('follow', onChangeFollowing);
 			this.connection.on('unfollow', onChangeFollowing);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.connection.off('follow', onChangeFollowing);
-				this.connection.off('unfollow', onChangeFollowing);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'local') {
 			this.endpoint = 'notes/local-timeline';
-			this.streamManager = (this as any).os.streams.localTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('localTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'hybrid') {
 			this.endpoint = 'notes/hybrid-timeline';
-			this.streamManager = (this as any).os.streams.hybridTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('hybridTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'global') {
 			this.endpoint = 'notes/global-timeline';
-			this.streamManager = (this as any).os.streams.globalTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('globalTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'mentions') {
 			this.endpoint = 'notes/mentions';
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 			this.connection.on('mention', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('mention', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'messages') {
 			this.endpoint = 'notes/mentions';
 			this.query = {
@@ -142,21 +103,15 @@ export default Vue.extend({
 					prepend(note);
 				}
 			};
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 			this.connection.on('mention', onNote);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('mention', onNote);
-				this.streamManager.dispose(this.connectionId);
-			});
 		}
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		this.$emit('beforeDestroy');
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/desktop/views/components/ui.header.nav.vue b/src/client/app/desktop/views/components/ui.header.nav.vue
index 4f679db938..122570a696 100644
--- a/src/client/app/desktop/views/components/ui.header.nav.vue
+++ b/src/client/app/desktop/views/components/ui.header.nav.vue
@@ -42,8 +42,7 @@ export default Vue.extend({
 	data() {
 		return {
 			hasGameInvitations: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	computed: {
@@ -53,18 +52,15 @@ export default Vue.extend({
 	},
 	mounted() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 
-			this.connection.on('reversi_invited', this.onReversiInvited);
+			this.connection.on('reversiInvited', this.onReversiInvited);
 			this.connection.on('reversi_no_invites', this.onReversiNoInvites);
 		}
 	},
 	beforeDestroy() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection.off('reversi_invited', this.onReversiInvited);
-			this.connection.off('reversi_no_invites', this.onReversiNoInvites);
-			(this as any).os.stream.dispose(this.connectionId);
+			this.connection.dispose();
 		}
 	},
 	methods: {
diff --git a/src/client/app/desktop/views/components/user-list-timeline.vue b/src/client/app/desktop/views/components/user-list-timeline.vue
index 0a6f758763..3407851fc5 100644
--- a/src/client/app/desktop/views/components/user-list-timeline.vue
+++ b/src/client/app/desktop/views/components/user-list-timeline.vue
@@ -6,7 +6,6 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { UserListStream } from '../../../common/scripts/streaming/user-list';
 
 const fetchLimit = 10;
 
diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index 1b0c5f8125..c0075220bc 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -56,13 +56,11 @@ export default Vue.extend({
 			disableLocalTimeline: false,
 			bannerUrl: null,
 			inviteCode: null,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	created() {
-		this.connection = (this as any).os.streams.serverStatsStream.getConnection();
-		this.connectionId = (this as any).os.streams.serverStatsStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('serverStats');
 
 		(this as any).os.getMeta().then(meta => {
 			this.disableRegistration = meta.disableRegistration;
@@ -75,7 +73,7 @@ export default Vue.extend({
 		});
 	},
 	beforeDestroy() {
-		(this as any).os.streams.serverStatsStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		invite() {
diff --git a/src/client/app/desktop/views/pages/deck/deck.direct.vue b/src/client/app/desktop/views/pages/deck/deck.direct.vue
index ec9e6b9c3d..c771e58a6e 100644
--- a/src/client/app/desktop/views/pages/deck/deck.direct.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.direct.vue
@@ -21,23 +21,19 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
-
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 		this.connection.on('mention', this.onNote);
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		this.connection.off('mention', this.onNote);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue b/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
index f38d5a6df5..02d99d3883 100644
--- a/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.hashtag-tl.vue
@@ -5,7 +5,6 @@
 <script lang="ts">
 import Vue from 'vue';
 import XNotes from './deck.notes.vue';
-import { HashtagStream } from '../../../../common/scripts/streaming/hashtag';
 
 const fetchLimit = 10;
 
@@ -48,7 +47,7 @@ export default Vue.extend({
 
 	mounted() {
 		if (this.connection) this.connection.close();
-		this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+		this.connection = (this as any).os.stream.connectToChannel('hashtag', this.tagTl.query);
 		this.connection.on('note', this.onNote);
 
 		this.fetch();
diff --git a/src/client/app/desktop/views/pages/deck/deck.list-tl.vue b/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
index e82e76e4d0..e543130310 100644
--- a/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.list-tl.vue
@@ -5,7 +5,6 @@
 <script lang="ts">
 import Vue from 'vue';
 import XNotes from './deck.notes.vue';
-import { UserListStream } from '../../../../common/scripts/streaming/user-list';
 
 const fetchLimit = 10;
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.mentions.vue b/src/client/app/desktop/views/pages/deck/deck.mentions.vue
index cecb75f067..17b572f146 100644
--- a/src/client/app/desktop/views/pages/deck/deck.mentions.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.mentions.vue
@@ -21,23 +21,19 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
-
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 		this.connection.on('mention', this.onNote);
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		this.connection.off('mention', this.onNote);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.note.vue b/src/client/app/desktop/views/pages/deck/deck.note.vue
index eac0e78f0f..e843ac54fe 100644
--- a/src/client/app/desktop/views/pages/deck/deck.note.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.note.vue
@@ -70,12 +70,15 @@ import parse from '../../../../../../mfm/parse';
 import MkNoteMenu from '../../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../../common/views/components/reaction-picker.vue';
 import XSub from './deck.note.sub.vue';
+import noteSubscriber from '../../../../common/scripts/note-subscriber';
 
 export default Vue.extend({
 	components: {
 		XSub
 	},
 
+	mixins: [noteSubscriber('note')],
+
 	props: {
 		note: {
 			type: Object,
@@ -90,9 +93,7 @@ export default Vue.extend({
 
 	data() {
 		return {
-			showContent: false,
-			connection: null,
-			connectionId: null
+			showContent: false
 		};
 	},
 
@@ -120,68 +121,7 @@ export default Vue.extend({
 		}
 	},
 
-	created() {
-		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
-		}
-	},
-
-	mounted() {
-		this.capture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.on('_connected_', this.onStreamConnected);
-		}
-	},
-
-	beforeDestroy() {
-		this.decapture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.off('_connected_', this.onStreamConnected);
-			(this as any).os.stream.dispose(this.connectionId);
-		}
-	},
-
 	methods: {
-		capture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				const data = {
-					type: 'capture',
-					id: this.p.id
-				} as any;
-				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
-					data.read = true;
-				}
-				this.connection.send(data);
-				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		decapture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
-					type: 'decapture',
-					id: this.p.id
-				});
-				if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		onStreamConnected() {
-			this.capture();
-		},
-
-		onStreamNoteUpdated(data) {
-			const note = data.note;
-			if (note.id == this.note.id) {
-				this.$emit('update:note', note);
-			} else if (note.id == this.note.renoteId) {
-				this.note.renote = note;
-			}
-		},
-
 		reply() {
 			(this as any).apis.post({
 				reply: this.p
diff --git a/src/client/app/desktop/views/pages/deck/deck.notifications.vue b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
index 1417cc3ee8..29de691fe2 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notifications.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notifications.vue
@@ -38,8 +38,7 @@ export default Vue.extend({
 			notifications: [],
 			queue: [],
 			moreNotifications: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
@@ -62,8 +61,7 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
 		this.connection.on('notification', this.onNotification);
 
@@ -86,8 +84,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off('notification', this.onNotification);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 
 		this.column.$off('top', this.onTop);
 		this.column.$off('bottom', this.onBottom);
@@ -117,7 +114,7 @@ export default Vue.extend({
 		onNotification(notification) {
 			// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
 			this.connection.send({
-				type: 'read_notification',
+				type: 'readNotification',
 				id: notification.id
 			});
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl.vue b/src/client/app/desktop/views/pages/deck/deck.tl.vue
index 120ceb7fc2..8aed80fa1b 100644
--- a/src/client/app/desktop/views/pages/deck/deck.tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.tl.vue
@@ -36,18 +36,17 @@ export default Vue.extend({
 			fetching: true,
 			moreFetching: false,
 			existMore: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 
 	computed: {
 		stream(): any {
 			switch (this.src) {
-				case 'home': return (this as any).os.stream;
-				case 'local': return (this as any).os.streams.localTimelineStream;
-				case 'hybrid': return (this as any).os.streams.hybridTimelineStream;
-				case 'global': return (this as any).os.streams.globalTimelineStream;
+				case 'home': return (this as any).os.stream.useSharedConnection('homeTimeline');
+				case 'local': return (this as any).os.stream.useSharedConnection('localTimeline');
+				case 'hybrid': return (this as any).os.stream.useSharedConnection('hybridTimeline');
+				case 'global': return (this as any).os.stream.useSharedConnection('globalTimeline');
 			}
 		},
 
@@ -68,8 +67,7 @@ export default Vue.extend({
 	},
 
 	mounted() {
-		this.connection = this.stream.getConnection();
-		this.connectionId = this.stream.use();
+		this.connection = this.stream;
 
 		this.connection.on('note', this.onNote);
 		if (this.src == 'home') {
@@ -81,12 +79,7 @@ export default Vue.extend({
 	},
 
 	beforeDestroy() {
-		this.connection.off('note', this.onNote);
-		if (this.src == 'home') {
-			this.connection.off('follow', this.onChangeFollowing);
-			this.connection.off('unfollow', this.onChangeFollowing);
-		}
-		this.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index ed9e3a6aeb..42171e71fa 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -1,3 +1,4 @@
+import autobind from 'autobind-decorator';
 import Vue from 'vue';
 import { EventEmitter } from 'eventemitter3';
 import * as uuid from 'uuid';
@@ -5,19 +6,9 @@ import * as uuid from 'uuid';
 import initStore from './store';
 import { apiUrl, version, lang } from './config';
 import Progress from './common/scripts/loading';
-import Connection from './common/scripts/streaming/stream';
-import { HomeStreamManager } from './common/scripts/streaming/home';
-import { DriveStreamManager } from './common/scripts/streaming/drive';
-import { ServerStatsStreamManager } from './common/scripts/streaming/server-stats';
-import { NotesStatsStreamManager } from './common/scripts/streaming/notes-stats';
-import { MessagingIndexStreamManager } from './common/scripts/streaming/messaging-index';
-import { ReversiStreamManager } from './common/scripts/streaming/games/reversi/reversi';
 
 import Err from './common/views/components/connect-failed.vue';
-import { LocalTimelineStreamManager } from './common/scripts/streaming/local-timeline';
-import { HybridTimelineStreamManager } from './common/scripts/streaming/hybrid-timeline';
-import { GlobalTimelineStreamManager } from './common/scripts/streaming/global-timeline';
-import { erase } from '../../prelude/array';
+import Stream from './common/scripts/stream';
 
 //#region api requests
 let spinner = null;
@@ -102,30 +93,7 @@ export default class MiOS extends EventEmitter {
 	/**
 	 * A connection manager of home stream
 	 */
-	public stream: HomeStreamManager;
-
-	/**
-	 * Connection managers
-	 */
-	public streams: {
-		localTimelineStream: LocalTimelineStreamManager;
-		hybridTimelineStream: HybridTimelineStreamManager;
-		globalTimelineStream: GlobalTimelineStreamManager;
-		driveStream: DriveStreamManager;
-		serverStatsStream: ServerStatsStreamManager;
-		notesStatsStream: NotesStatsStreamManager;
-		messagingIndexStream: MessagingIndexStreamManager;
-		reversiStream: ReversiStreamManager;
-	} = {
-		localTimelineStream: null,
-		hybridTimelineStream: null,
-		globalTimelineStream: null,
-		driveStream: null,
-		serverStatsStream: null,
-		notesStatsStream: null,
-		messagingIndexStream: null,
-		reversiStream: null
-	};
+	public stream: Stream;
 
 	/**
 	 * A registration of service worker
@@ -151,71 +119,36 @@ export default class MiOS extends EventEmitter {
 
 		this.shouldRegisterSw = shouldRegisterSw;
 
-		//#region BIND
-		this.log = this.log.bind(this);
-		this.logInfo = this.logInfo.bind(this);
-		this.logWarn = this.logWarn.bind(this);
-		this.logError = this.logError.bind(this);
-		this.init = this.init.bind(this);
-		this.api = this.api.bind(this);
-		this.getMeta = this.getMeta.bind(this);
-		this.registerSw = this.registerSw.bind(this);
-		//#endregion
-
 		if (this.debug) {
 			(window as any).os = this;
 		}
 	}
 
-	private googleMapsIniting = false;
-
-	public getGoogleMaps() {
-		return new Promise((res, rej) => {
-			if ((window as any).google && (window as any).google.maps) {
-				res((window as any).google.maps);
-			} else {
-				this.once('init-google-maps', () => {
-					res((window as any).google.maps);
-				});
-
-				//#region load google maps api
-				if (!this.googleMapsIniting) {
-					this.googleMapsIniting = true;
-					(window as any).initGoogleMaps = () => {
-						this.emit('init-google-maps');
-					};
-					const head = document.getElementsByTagName('head')[0];
-					const script = document.createElement('script');
-					script.setAttribute('src', `https://maps.googleapis.com/maps/api/js?key=${googleMapsApiKey}&callback=initGoogleMaps`);
-					script.setAttribute('async', 'true');
-					script.setAttribute('defer', 'true');
-					head.appendChild(script);
-				}
-				//#endregion
-			}
-		});
-	}
-
+	@autobind
 	public log(...args) {
 		if (!this.debug) return;
 		console.log.apply(null, args);
 	}
 
+	@autobind
 	public logInfo(...args) {
 		if (!this.debug) return;
 		console.info.apply(null, args);
 	}
 
+	@autobind
 	public logWarn(...args) {
 		if (!this.debug) return;
 		console.warn.apply(null, args);
 	}
 
+	@autobind
 	public logError(...args) {
 		if (!this.debug) return;
 		console.error.apply(null, args);
 	}
 
+	@autobind
 	public signout() {
 		this.store.dispatch('logout');
 		location.href = '/';
@@ -225,27 +158,10 @@ export default class MiOS extends EventEmitter {
 	 * Initialize MiOS (boot)
 	 * @param callback A function that call when initialized
 	 */
+	@autobind
 	public async init(callback) {
 		this.store = initStore(this);
 
-		//#region Init stream managers
-		this.streams.serverStatsStream = new ServerStatsStreamManager(this);
-		this.streams.notesStatsStream = new NotesStatsStreamManager(this);
-		this.streams.localTimelineStream = new LocalTimelineStreamManager(this, this.store.state.i);
-
-		this.once('signedin', () => {
-			// Init home stream manager
-			this.stream = new HomeStreamManager(this, this.store.state.i);
-
-			// Init other stream manager
-			this.streams.hybridTimelineStream = new HybridTimelineStreamManager(this, this.store.state.i);
-			this.streams.globalTimelineStream = new GlobalTimelineStreamManager(this, this.store.state.i);
-			this.streams.driveStream = new DriveStreamManager(this, this.store.state.i);
-			this.streams.messagingIndexStream = new MessagingIndexStreamManager(this, this.store.state.i);
-			this.streams.reversiStream = new ReversiStreamManager(this, this.store.state.i);
-		});
-		//#endregion
-
 		// ユーザーをフェッチしてコールバックする
 		const fetchme = (token, cb) => {
 			let me = null;
@@ -296,6 +212,8 @@ export default class MiOS extends EventEmitter {
 		const fetched = () => {
 			this.emit('signedin');
 
+			this.stream = new Stream(this);
+
 			// Finish init
 			callback();
 
@@ -328,6 +246,8 @@ export default class MiOS extends EventEmitter {
 				} else {
 					// Finish init
 					callback();
+
+					this.stream = new Stream(this);
 				}
 			});
 		}
@@ -336,6 +256,7 @@ export default class MiOS extends EventEmitter {
 	/**
 	 * Register service worker
 	 */
+	@autobind
 	private registerSw() {
 		// Check whether service worker and push manager supported
 		const isSwSupported =
@@ -418,7 +339,8 @@ export default class MiOS extends EventEmitter {
 	 * @param endpoint エンドポイント名
 	 * @param data パラメータ
 	 */
-	public api(endpoint: string, data: { [x: string]: any } = {}): Promise<{ [x: string]: any }> {
+	@autobind
+	public api(endpoint: string, data: { [x: string]: any } = {}, forceFetch = false): Promise<{ [x: string]: any }> {
 		if (++pending === 1) {
 			spinner = document.createElement('div');
 			spinner.setAttribute('id', 'wait');
@@ -430,13 +352,12 @@ export default class MiOS extends EventEmitter {
 		};
 
 		const promise = new Promise((resolve, reject) => {
-			const viaStream = this.stream && this.stream.hasConnection && this.store.state.device.apiViaStream;
+			const viaStream = this.stream && this.store.state.device.apiViaStream && !forceFetch;
 
 			if (viaStream) {
-				const stream = this.stream.borrow();
 				const id = Math.random().toString();
 
-				stream.once(`api-res:${id}`, res => {
+				this.stream.once(`api:${id}`, res => {
 					if (res == null || Object.keys(res).length == 0) {
 						resolve(null);
 					} else if (res.res) {
@@ -446,11 +367,10 @@ export default class MiOS extends EventEmitter {
 					}
 				});
 
-				stream.send({
-					type: 'api',
-					id,
-					endpoint,
-					data
+				this.stream.send('api', {
+					id: id,
+					ep: endpoint,
+					data: data
 				});
 			} else {
 				// Append a credential
@@ -503,6 +423,7 @@ export default class MiOS extends EventEmitter {
 	 * Misskeyのメタ情報を取得します
 	 * @param force キャッシュを無視するか否か
 	 */
+	@autobind
 	public getMeta(force = false) {
 		return new Promise<{ [x: string]: any }>(async (res, rej) => {
 			if (this.isMetaFetching) {
@@ -530,16 +451,6 @@ export default class MiOS extends EventEmitter {
 			}
 		});
 	}
-
-	public connections: Connection[] = [];
-
-	public registerStreamConnection(connection: Connection) {
-		this.connections.push(connection);
-	}
-
-	public unregisterStreamConnection(connection: Connection) {
-		this.connections = erase(connection, this.connections);
-	}
 }
 
 class WindowSystem extends EventEmitter {
diff --git a/src/client/app/mobile/views/components/drive.vue b/src/client/app/mobile/views/components/drive.vue
index 8919462511..469f6da240 100644
--- a/src/client/app/mobile/views/components/drive.vue
+++ b/src/client/app/mobile/views/components/drive.vue
@@ -81,8 +81,7 @@ export default Vue.extend({
 			hierarchyFolders: [],
 			selectedFiles: [],
 			info: null,
-			connection: null,
-			connectionId: null,
+			connection: null
 
 			fetching: true,
 			fetchingMoreFiles: false,
@@ -102,8 +101,7 @@ export default Vue.extend({
 		}
 	},
 	mounted() {
-		this.connection = (this as any).os.streams.driveStream.getConnection();
-		this.connectionId = (this as any).os.streams.driveStream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('drive');
 
 		this.connection.on('file_created', this.onStreamDriveFileCreated);
 		this.connection.on('file_updated', this.onStreamDriveFileUpdated);
@@ -124,12 +122,7 @@ export default Vue.extend({
 		}
 	},
 	beforeDestroy() {
-		this.connection.off('file_created', this.onStreamDriveFileCreated);
-		this.connection.off('file_updated', this.onStreamDriveFileUpdated);
-		this.connection.off('file_deleted', this.onStreamDriveFileDeleted);
-		this.connection.off('folder_created', this.onStreamDriveFolderCreated);
-		this.connection.off('folder_updated', this.onStreamDriveFolderUpdated);
-		(this as any).os.streams.driveStream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 		onStreamDriveFileCreated(file) {
diff --git a/src/client/app/mobile/views/components/follow-button.vue b/src/client/app/mobile/views/components/follow-button.vue
index aea2d285e4..3c8b2f98e6 100644
--- a/src/client/app/mobile/views/components/follow-button.vue
+++ b/src/client/app/mobile/views/components/follow-button.vue
@@ -28,21 +28,17 @@ export default Vue.extend({
 		return {
 			u: this.user,
 			wait: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
 		this.connection.on('follow', this.onFollow);
 		this.connection.on('unfollow', this.onUnfollow);
 	},
 	beforeDestroy() {
-		this.connection.off('follow', this.onFollow);
-		this.connection.off('unfollow', this.onUnfollow);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
 	methods: {
 
diff --git a/src/client/app/mobile/views/components/note-detail.vue b/src/client/app/mobile/views/components/note-detail.vue
index 48d6d32868..082f72f1a9 100644
--- a/src/client/app/mobile/views/components/note-detail.vue
+++ b/src/client/app/mobile/views/components/note-detail.vue
@@ -92,12 +92,15 @@ import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './note.sub.vue';
 import { sum } from '../../../../../prelude/array';
+import noteSubscriber from '../../../common/scripts/note-subscriber';
 
 export default Vue.extend({
 	components: {
 		XSub
 	},
 
+	mixins: [noteSubscriber('note')],
+
 	props: {
 		note: {
 			type: Object,
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index 4af19ade29..db1be4a00e 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -69,19 +69,20 @@ import MkNoteMenu from '../../../common/views/components/note-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
 import XSub from './note.sub.vue';
 import { sum } from '../../../../../prelude/array';
+import noteSubscriber from '../../../common/scripts/note-subscriber';
 
 export default Vue.extend({
 	components: {
 		XSub
 	},
 
+	mixins: [noteSubscriber('note')],
+
 	props: ['note'],
 
 	data() {
 		return {
-			showContent: false,
-			connection: null,
-			connectionId: null
+			showContent: false
 		};
 	},
 
@@ -115,86 +116,7 @@ export default Vue.extend({
 		}
 	},
 
-	created() {
-		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
-		}
-	},
-
-	mounted() {
-		this.capture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.on('_connected_', this.onStreamConnected);
-		}
-
-		// Draw map
-		if (this.p.geo) {
-			const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
-			if (shouldShowMap) {
-				(this as any).os.getGoogleMaps().then(maps => {
-					const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]);
-					const map = new maps.Map(this.$refs.map, {
-						center: uluru,
-						zoom: 15
-					});
-					new maps.Marker({
-						position: uluru,
-						map: map
-					});
-				});
-			}
-		}
-	},
-
-	beforeDestroy() {
-		this.decapture(true);
-
-		if (this.$store.getters.isSignedIn) {
-			this.connection.off('_connected_', this.onStreamConnected);
-			(this as any).os.stream.dispose(this.connectionId);
-		}
-	},
-
 	methods: {
-		capture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				const data = {
-					type: 'capture',
-					id: this.p.id
-				} as any;
-				if ((this.p.visibleUserIds || []).includes(this.$store.state.i.id) || (this.p.mentions || []).includes(this.$store.state.i.id)) {
-					data.read = true;
-				}
-				this.connection.send(data);
-				if (withHandler) this.connection.on('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		decapture(withHandler = false) {
-			if (this.$store.getters.isSignedIn) {
-				this.connection.send({
-					type: 'decapture',
-					id: this.p.id
-				});
-				if (withHandler) this.connection.off('note-updated', this.onStreamNoteUpdated);
-			}
-		},
-
-		onStreamConnected() {
-			this.capture();
-		},
-
-		onStreamNoteUpdated(data) {
-			const note = data.note;
-			if (note.id == this.note.id) {
-				this.$emit('update:note', note);
-			} else if (note.id == this.note.renoteId) {
-				this.note.renote = note;
-			}
-		},
-
 		reply() {
 			(this as any).apis.post({
 				reply: this.p
diff --git a/src/client/app/mobile/views/components/notifications.vue b/src/client/app/mobile/views/components/notifications.vue
index bfb6c1e62a..e1a2967071 100644
--- a/src/client/app/mobile/views/components/notifications.vue
+++ b/src/client/app/mobile/views/components/notifications.vue
@@ -23,6 +23,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
+
 export default Vue.extend({
 	data() {
 		return {
@@ -30,10 +31,10 @@ export default Vue.extend({
 			fetchingMoreNotifications: false,
 			notifications: [],
 			moreNotifications: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
+
 	computed: {
 		_notifications(): any[] {
 			return (this.notifications as any).map(notification => {
@@ -45,9 +46,9 @@ export default Vue.extend({
 			});
 		}
 	},
+
 	mounted() {
-		this.connection = (this as any).os.stream.getConnection();
-		this.connectionId = (this as any).os.stream.use();
+		this.connection = (this as any).os.stream.useSharedConnection('main');
 
 		this.connection.on('notification', this.onNotification);
 
@@ -66,10 +67,11 @@ export default Vue.extend({
 			this.$emit('fetched');
 		});
 	},
+
 	beforeDestroy() {
-		this.connection.off('notification', this.onNotification);
-		(this as any).os.stream.dispose(this.connectionId);
+		this.connection.dispose();
 	},
+
 	methods: {
 		fetchMoreNotifications() {
 			this.fetchingMoreNotifications = true;
@@ -90,10 +92,11 @@ export default Vue.extend({
 				this.fetchingMoreNotifications = false;
 			});
 		},
+
 		onNotification(notification) {
 			// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
 			this.connection.send({
-				type: 'read_notification',
+				type: 'readNotification',
 				id: notification.id
 			});
 
diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue
index 7fd68002e7..9793d03a8c 100644
--- a/src/client/app/mobile/views/components/ui.header.vue
+++ b/src/client/app/mobile/views/components/ui.header.vue
@@ -24,44 +24,47 @@ import { env } from '../../../config';
 
 export default Vue.extend({
 	props: ['func'],
+
 	data() {
 		return {
 			hasGameInvitation: false,
 			connection: null,
-			connectionId: null,
 			env: env
 		};
 	},
+
 	computed: {
 		hasUnreadNotification(): boolean {
 			return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadNotification;
 		},
+
 		hasUnreadMessagingMessage(): boolean {
 			return this.$store.getters.isSignedIn && this.$store.state.i.hasUnreadMessagingMessage;
 		}
 	},
+
 	mounted() {
 		this.$store.commit('setUiHeaderHeight', this.$refs.root.offsetHeight);
 
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 
-			this.connection.on('reversi_invited', this.onReversiInvited);
+			this.connection.on('reversiInvited', this.onReversiInvited);
 			this.connection.on('reversi_no_invites', this.onReversiNoInvites);
 		}
 	},
+
 	beforeDestroy() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection.off('reversi_invited', this.onReversiInvited);
-			this.connection.off('reversi_no_invites', this.onReversiNoInvites);
-			(this as any).os.stream.dispose(this.connectionId);
+			this.connection.dispose();
 		}
 	},
+
 	methods: {
 		onReversiInvited() {
 			this.hasGameInvitation = true;
 		},
+
 		onReversiNoInvites() {
 			this.hasGameInvitation = false;
 		}
diff --git a/src/client/app/mobile/views/components/ui.nav.vue b/src/client/app/mobile/views/components/ui.nav.vue
index ba122cc3e2..c9c0c082b2 100644
--- a/src/client/app/mobile/views/components/ui.nav.vue
+++ b/src/client/app/mobile/views/components/ui.nav.vue
@@ -57,7 +57,6 @@ export default Vue.extend({
 		return {
 			hasGameInvitation: false,
 			connection: null,
-			connectionId: null,
 			aboutUrl: `/docs/${lang}/about`,
 			announcements: []
 		};
@@ -79,19 +78,16 @@ export default Vue.extend({
 		});
 
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 
-			this.connection.on('reversi_invited', this.onReversiInvited);
+			this.connection.on('reversiInvited', this.onReversiInvited);
 			this.connection.on('reversi_no_invites', this.onReversiNoInvites);
 		}
 	},
 
 	beforeDestroy() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection.off('reversi_invited', this.onReversiInvited);
-			this.connection.off('reversi_no_invites', this.onReversiNoInvites);
-			(this as any).os.stream.dispose(this.connectionId);
+			this.connection.dispose();
 		}
 	},
 
diff --git a/src/client/app/mobile/views/components/ui.vue b/src/client/app/mobile/views/components/ui.vue
index d2af15d235..b16c246b10 100644
--- a/src/client/app/mobile/views/components/ui.vue
+++ b/src/client/app/mobile/views/components/ui.vue
@@ -23,40 +23,43 @@ export default Vue.extend({
 		XHeader,
 		XNav
 	},
+
 	props: ['title'],
+
 	data() {
 		return {
 			isDrawerOpening: false,
-			connection: null,
-			connectionId: null
+			connection: null
 		};
 	},
+
 	watch: {
 		'$store.state.uiHeaderHeight'() {
 			this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
 		}
 	},
+
 	mounted() {
 		this.$el.style.paddingTop = this.$store.state.uiHeaderHeight + 'px';
 
 		if (this.$store.getters.isSignedIn) {
-			this.connection = (this as any).os.stream.getConnection();
-			this.connectionId = (this as any).os.stream.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 
 			this.connection.on('notification', this.onNotification);
 		}
 	},
+
 	beforeDestroy() {
 		if (this.$store.getters.isSignedIn) {
-			this.connection.off('notification', this.onNotification);
-			(this as any).os.stream.dispose(this.connectionId);
+			this.connection.dispose();
 		}
 	},
+
 	methods: {
 		onNotification(notification) {
 			// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
 			this.connection.send({
-				type: 'read_notification',
+				type: 'readNotification',
 				id: notification.id
 			});
 
diff --git a/src/client/app/mobile/views/components/user-list-timeline.vue b/src/client/app/mobile/views/components/user-list-timeline.vue
index 9b3f11f5c2..97200eb5b3 100644
--- a/src/client/app/mobile/views/components/user-list-timeline.vue
+++ b/src/client/app/mobile/views/components/user-list-timeline.vue
@@ -6,7 +6,6 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { UserListStream } from '../../../common/scripts/streaming/user-list';
 
 const fetchLimit = 10;
 
diff --git a/src/client/app/mobile/views/pages/home.timeline.vue b/src/client/app/mobile/views/pages/home.timeline.vue
index 225abcff6b..1979747bf7 100644
--- a/src/client/app/mobile/views/pages/home.timeline.vue
+++ b/src/client/app/mobile/views/pages/home.timeline.vue
@@ -13,7 +13,6 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import { HashtagStream } from '../../../common/scripts/streaming/hashtag';
 
 const fetchLimit = 10;
 
@@ -35,7 +34,6 @@ export default Vue.extend({
 			existMore: false,
 			streamManager: null,
 			connection: null,
-			connectionId: null,
 			unreadCount: 0,
 			date: null,
 			baseQuery: {
@@ -68,69 +66,33 @@ export default Vue.extend({
 			this.query = {
 				query: this.tagTl.query
 			};
-			this.connection = new HashtagStream((this as any).os, this.$store.state.i, this.tagTl.query);
+			this.connection = (this as any).os.stream.connectToChannel('hashtag', { q: this.tagTl.query });
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.connection.close();
-			});
 		} else if (this.src == 'home') {
 			this.endpoint = 'notes/timeline';
 			const onChangeFollowing = () => {
 				this.fetch();
 			};
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('homeTimeline');
 			this.connection.on('note', prepend);
 			this.connection.on('follow', onChangeFollowing);
 			this.connection.on('unfollow', onChangeFollowing);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.connection.off('follow', onChangeFollowing);
-				this.connection.off('unfollow', onChangeFollowing);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'local') {
 			this.endpoint = 'notes/local-timeline';
-			this.streamManager = (this as any).os.streams.localTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('localTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'hybrid') {
 			this.endpoint = 'notes/hybrid-timeline';
-			this.streamManager = (this as any).os.streams.hybridTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('hybridTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'global') {
 			this.endpoint = 'notes/global-timeline';
-			this.streamManager = (this as any).os.streams.globalTimelineStream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('globalTimeline');
 			this.connection.on('note', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('note', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'mentions') {
 			this.endpoint = 'notes/mentions';
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 			this.connection.on('mention', prepend);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('mention', prepend);
-				this.streamManager.dispose(this.connectionId);
-			});
 		} else if (this.src == 'messages') {
 			this.endpoint = 'notes/mentions';
 			this.query = {
@@ -141,21 +103,15 @@ export default Vue.extend({
 					prepend(note);
 				}
 			};
-			this.streamManager = (this as any).os.stream;
-			this.connection = this.streamManager.getConnection();
-			this.connectionId = this.streamManager.use();
+			this.connection = (this as any).os.stream.useSharedConnection('main');
 			this.connection.on('mention', onNote);
-			this.$once('beforeDestroy', () => {
-				this.connection.off('mention', onNote);
-				this.streamManager.dispose(this.connectionId);
-			});
 		}
 
 		this.fetch();
 	},
 
 	beforeDestroy() {
-		this.$emit('beforeDestroy');
+		this.connection.dispose();
 	},
 
 	methods: {
diff --git a/src/client/app/tsconfig.json b/src/client/app/tsconfig.json
index e31b52dab1..4a05469673 100644
--- a/src/client/app/tsconfig.json
+++ b/src/client/app/tsconfig.json
@@ -14,7 +14,8 @@
     "removeComments": false,
     "noLib": false,
     "strict": true,
-    "strictNullChecks": false
+    "strictNullChecks": false,
+    "experimentalDecorators": true
   },
   "compileOnSave": false,
   "include": [
diff --git a/src/docs/stream.ja-JP.md b/src/docs/stream.ja-JP.md
index c720299932..a8b0eb0cdc 100644
--- a/src/docs/stream.ja-JP.md
+++ b/src/docs/stream.ja-JP.md
@@ -55,7 +55,7 @@ APIへリクエストすると、レスポンスがストリームから次の
 
 ```json
 {
-	type: 'api-res:xxxxxxxxxxxxxxxx',
+	type: 'api:xxxxxxxxxxxxxxxx',
 	body: {
 		...
 	}
@@ -95,7 +95,7 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
 
 ```json
 {
-	type: 'note-updated',
+	type: 'noteUpdated',
 	body: {
 		note: {
 			...
@@ -108,7 +108,7 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
 
 ---
 
-このように、投稿の情報が更新されると、`note-updated`イベントが流れてくるようになります。`note-updated`イベントが発生するのは、以下の場合です:
+このように、投稿の情報が更新されると、`noteUpdated`イベントが流れてくるようになります。`noteUpdated`イベントが発生するのは、以下の場合です:
 
 - 投稿にリアクションが付いた
 - 投稿に添付されたアンケートに投票がされた
@@ -153,7 +153,7 @@ Misskeyは投稿のキャプチャと呼ばれる仕組みを提供していま
 
 `body`プロパティの中に、投稿情報が含まれています。
 
-### `read_all_notifications`
+### `readAllNotifications`
 
 自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます。
 
diff --git a/src/notify.ts b/src/notify.ts
index ea7423655e..eaef63e3c3 100644
--- a/src/notify.ts
+++ b/src/notify.ts
@@ -2,7 +2,7 @@ import * as mongo from 'mongodb';
 import Notification from './models/notification';
 import Mute from './models/mute';
 import { pack } from './models/notification';
-import { publishUserStream } from './stream';
+import { publishMainStream } from './stream';
 import User from './models/user';
 import pushSw from './push-sw';
 
@@ -30,7 +30,7 @@ export default (
 	const packed = await pack(notification);
 
 	// Publish notification event
-	publishUserStream(notifiee, 'notification', packed);
+	publishMainStream(notifiee, 'notification', packed);
 
 	// Update flag
 	User.update({ _id: notifiee }, {
@@ -54,7 +54,7 @@ export default (
 			}
 			//#endregion
 
-			publishUserStream(notifiee, 'unread_notification', packed);
+			publishMainStream(notifiee, 'unreadNotification', packed);
 
 			pushSw(notifiee, 'notification', packed);
 		}
diff --git a/src/server/api/call.ts b/src/server/api/call.ts
index ee79e0a13c..7419bdc95d 100644
--- a/src/server/api/call.ts
+++ b/src/server/api/call.ts
@@ -9,6 +9,10 @@ export default (endpoint: string, user: IUser, app: IApp, data: any, file?: any)
 
 	const ep = endpoints.find(e => e.name === endpoint);
 
+	if (ep == null) {
+		return rej('ENDPOINT_NOT_FOUND');
+	}
+
 	if (ep.meta.secure && !isSecure) {
 		return rej('ACCESS_DENIED');
 	}
diff --git a/src/server/api/common/read-messaging-message.ts b/src/server/api/common/read-messaging-message.ts
index 005240a37c..075e369832 100644
--- a/src/server/api/common/read-messaging-message.ts
+++ b/src/server/api/common/read-messaging-message.ts
@@ -1,7 +1,7 @@
 import * as mongo from 'mongodb';
 import Message from '../../../models/messaging-message';
 import { IMessagingMessage as IMessage } from '../../../models/messaging-message';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 import { publishMessagingStream } from '../../../stream';
 import { publishMessagingIndexStream } from '../../../stream';
 import User from '../../../models/user';
@@ -71,6 +71,6 @@ export default (
 		});
 
 		// 全ての(いままで未読だった)自分宛てのメッセージを(これで)読みましたよというイベントを発行
-		publishUserStream(userId, 'read_all_messaging_messages');
+		publishMainStream(userId, 'readAllMessagingMessages');
 	}
 });
diff --git a/src/server/api/common/read-notification.ts b/src/server/api/common/read-notification.ts
index 0b0f3e4e5a..2d58ada4ce 100644
--- a/src/server/api/common/read-notification.ts
+++ b/src/server/api/common/read-notification.ts
@@ -1,6 +1,6 @@
 import * as mongo from 'mongodb';
 import { default as Notification, INotification } from '../../../models/notification';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 import Mute from '../../../models/mute';
 import User from '../../../models/user';
 
@@ -66,6 +66,6 @@ export default (
 		});
 
 		// 全ての(いままで未読だった)通知を(これで)読みましたよというイベントを発行
-		publishUserStream(userId, 'read_all_notifications');
+		publishMainStream(userId, 'readAllNotifications');
 	}
 });
diff --git a/src/server/api/endpoints/games/reversi/match.ts b/src/server/api/endpoints/games/reversi/match.ts
index aba400af1d..d7483a0bfd 100644
--- a/src/server/api/endpoints/games/reversi/match.ts
+++ b/src/server/api/endpoints/games/reversi/match.ts
@@ -2,7 +2,7 @@ import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Matching, { pack as packMatching } from '../../../../../models/games/reversi/matching';
 import ReversiGame, { pack as packGame } from '../../../../../models/games/reversi/game';
 import User, { ILocalUser } from '../../../../../models/user';
-import { publishUserStream, publishReversiStream } from '../../../../../stream';
+import { publishMainStream, publishReversiStream } from '../../../../../stream';
 import { eighteight } from '../../../../../games/reversi/maps';
 
 export const meta = {
@@ -58,7 +58,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		});
 
 		if (other == 0) {
-			publishUserStream(user._id, 'reversi_no_invites');
+			publishMainStream(user._id, 'reversi_no_invites');
 		}
 	} else {
 		// Fetch child
@@ -94,6 +94,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		// 招待
 		publishReversiStream(child._id, 'invited', packed);
 
-		publishUserStream(child._id, 'reversi_invited', packed);
+		publishMainStream(child._id, 'reversiInvited', packed);
 	}
 });
diff --git a/src/server/api/endpoints/i/regenerate_token.ts b/src/server/api/endpoints/i/regenerate_token.ts
index fe4a5cd118..2d85f06cfa 100644
--- a/src/server/api/endpoints/i/regenerate_token.ts
+++ b/src/server/api/endpoints/i/regenerate_token.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy';
 import * as bcrypt from 'bcryptjs';
 import User, { ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 import generateUserToken from '../../common/generate-native-user-token';
 
 export const meta = {
@@ -33,5 +33,5 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	res();
 
 	// Publish event
-	publishUserStream(user._id, 'my_token_regenerated');
+	publishMainStream(user._id, 'myTokenRegenerated');
 });
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index c1be0b6ebc..548ce5cadb 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack, ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 import DriveFile from '../../../../models/drive-file';
 import acceptAllFollowRequests from '../../../../services/following/requests/accept-all';
 import { IApp } from '../../../../models/app';
@@ -177,7 +177,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 	res(iObj);
 
 	// Publish meUpdated event
-	publishUserStream(user._id, 'meUpdated', iObj);
+	publishMainStream(user._id, 'meUpdated', iObj);
 
 	// 鍵垢を解除したとき、溜まっていたフォローリクエストがあるならすべて承認
 	if (user.isLocked && ps.isLocked === false) {
diff --git a/src/server/api/endpoints/i/update_client_setting.ts b/src/server/api/endpoints/i/update_client_setting.ts
index aed93c792f..2c05299dff 100644
--- a/src/server/api/endpoints/i/update_client_setting.ts
+++ b/src/server/api/endpoints/i/update_client_setting.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 
 export const meta = {
 	requireCredential: true,
@@ -26,7 +26,7 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	res();
 
 	// Publish event
-	publishUserStream(user._id, 'clientSettingUpdated', {
+	publishMainStream(user._id, 'clientSettingUpdated', {
 		key: name,
 		value
 	});
diff --git a/src/server/api/endpoints/i/update_home.ts b/src/server/api/endpoints/i/update_home.ts
index ffca9b90b3..27afc9fe5a 100644
--- a/src/server/api/endpoints/i/update_home.ts
+++ b/src/server/api/endpoints/i/update_home.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 
 export const meta = {
 	requireCredential: true,
@@ -25,5 +25,5 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 
 	res();
 
-	publishUserStream(user._id, 'home_updated', home);
+	publishMainStream(user._id, 'homeUpdated', home);
 });
diff --git a/src/server/api/endpoints/i/update_mobile_home.ts b/src/server/api/endpoints/i/update_mobile_home.ts
index 0b72fbe2c1..1d4df389e4 100644
--- a/src/server/api/endpoints/i/update_mobile_home.ts
+++ b/src/server/api/endpoints/i/update_mobile_home.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 
 export const meta = {
 	requireCredential: true,
@@ -24,5 +24,5 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 
 	res();
 
-	publishUserStream(user._id, 'mobile_home_updated', home);
+	publishMainStream(user._id, 'mobileHomeUpdated', home);
 });
diff --git a/src/server/api/endpoints/i/update_widget.ts b/src/server/api/endpoints/i/update_widget.ts
index 5cbe7c07a3..92499493eb 100644
--- a/src/server/api/endpoints/i/update_widget.ts
+++ b/src/server/api/endpoints/i/update_widget.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 
 export const meta = {
 	requireCredential: true,
@@ -73,7 +73,7 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	//#endregion
 
 	if (widget) {
-		publishUserStream(user._id, 'widgetUpdated', {
+		publishMainStream(user._id, 'widgetUpdated', {
 			id, data
 		});
 
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index 9a49e09248..f504f92326 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -6,7 +6,7 @@ import User, { ILocalUser } from '../../../../../models/user';
 import Mute from '../../../../../models/mute';
 import DriveFile from '../../../../../models/drive-file';
 import { pack } from '../../../../../models/messaging-message';
-import { publishUserStream } from '../../../../../stream';
+import { publishMainStream } from '../../../../../stream';
 import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream';
 import pushSw from '../../../../../push-sw';
 
@@ -88,12 +88,12 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	// 自分のストリーム
 	publishMessagingStream(message.userId, message.recipientId, 'message', messageObj);
 	publishMessagingIndexStream(message.userId, 'message', messageObj);
-	publishUserStream(message.userId, 'messaging_message', messageObj);
+	publishMainStream(message.userId, 'messagingMessage', messageObj);
 
 	// 相手のストリーム
 	publishMessagingStream(message.recipientId, message.userId, 'message', messageObj);
 	publishMessagingIndexStream(message.recipientId, 'message', messageObj);
-	publishUserStream(message.recipientId, 'messaging_message', messageObj);
+	publishMainStream(message.recipientId, 'messagingMessage', messageObj);
 
 	// Update flag
 	User.update({ _id: recipient._id }, {
@@ -117,8 +117,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 			}
 			//#endregion
 
-			publishUserStream(message.recipientId, 'unread_messaging_message', messageObj);
-			pushSw(message.recipientId, 'unread_messaging_message', messageObj);
+			publishMainStream(message.recipientId, 'unreadMessagingMessage', messageObj);
+			pushSw(message.recipientId, 'unreadMessagingMessage', messageObj);
 		}
 	}, 3000);
 
diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts
index ab80e7f5d0..3b78d62fd3 100644
--- a/src/server/api/endpoints/notes/polls/vote.ts
+++ b/src/server/api/endpoints/notes/polls/vote.ts
@@ -72,7 +72,10 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		$inc: inc
 	});
 
-	publishNoteStream(note._id, 'poll_voted');
+	publishNoteStream(note._id, 'pollVoted', {
+		choice: choice,
+		userId: user._id.toHexString()
+	});
 
 	// Notify
 	notify(note.userId, user._id, 'poll_vote', {
diff --git a/src/server/api/endpoints/notifications/mark_all_as_read.ts b/src/server/api/endpoints/notifications/mark_all_as_read.ts
index e2bde777b3..6487cd8b48 100644
--- a/src/server/api/endpoints/notifications/mark_all_as_read.ts
+++ b/src/server/api/endpoints/notifications/mark_all_as_read.ts
@@ -1,5 +1,5 @@
 import Notification from '../../../../models/notification';
-import { publishUserStream } from '../../../../stream';
+import { publishMainStream } from '../../../../stream';
 import User, { ILocalUser } from '../../../../models/user';
 
 export const meta = {
@@ -40,5 +40,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	});
 
 	// 全ての通知を読みましたよというイベントを発行
-	publishUserStream(user._id, 'read_all_notifications');
+	publishMainStream(user._id, 'readAllNotifications');
 });
diff --git a/src/server/api/private/signin.ts b/src/server/api/private/signin.ts
index c42fb7bd8c..0e44c2ddd6 100644
--- a/src/server/api/private/signin.ts
+++ b/src/server/api/private/signin.ts
@@ -3,7 +3,7 @@ import * as bcrypt from 'bcryptjs';
 import * as speakeasy from 'speakeasy';
 import User, { ILocalUser } from '../../../models/user';
 import Signin, { pack } from '../../../models/signin';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 import signin from '../common/signin';
 import config from '../../../config';
 
@@ -87,5 +87,5 @@ export default async (ctx: Koa.Context) => {
 	});
 
 	// Publish signin event
-	publishUserStream(user._id, 'signin', await pack(record));
+	publishMainStream(user._id, 'signin', await pack(record));
 };
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index aad2846bb4..f71e588628 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -4,7 +4,7 @@ import * as uuid from 'uuid';
 import autwh from 'autwh';
 import redis from '../../../db/redis';
 import User, { pack, ILocalUser } from '../../../models/user';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 import config from '../../../config';
 import signin from '../common/signin';
 
@@ -49,7 +49,7 @@ router.get('/disconnect/twitter', async ctx => {
 	ctx.body = `Twitterの連携を解除しました :v:`;
 
 	// Publish i updated event
-	publishUserStream(user._id, 'meUpdated', await pack(user, user, {
+	publishMainStream(user._id, 'meUpdated', await pack(user, user, {
 		detail: true,
 		includeSecrets: true
 	}));
@@ -174,7 +174,7 @@ if (config.twitter == null) {
 			ctx.body = `Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`;
 
 			// Publish i updated event
-			publishUserStream(user._id, 'meUpdated', await pack(user, user, {
+			publishMainStream(user._id, 'meUpdated', await pack(user, user, {
 				detail: true,
 				includeSecrets: true
 			}));
diff --git a/src/server/api/stream/channel.ts b/src/server/api/stream/channel.ts
new file mode 100644
index 0000000000..e2726060dc
--- /dev/null
+++ b/src/server/api/stream/channel.ts
@@ -0,0 +1,39 @@
+import autobind from 'autobind-decorator';
+import Connection from '.';
+
+/**
+ * Stream channel
+ */
+export default abstract class Channel {
+	protected connection: Connection;
+	public id: string;
+
+	protected get user() {
+		return this.connection.user;
+	}
+
+	protected get subscriber() {
+		return this.connection.subscriber;
+	}
+
+	constructor(id: string, connection: Connection) {
+		this.id = id;
+		this.connection = connection;
+	}
+
+	@autobind
+	public send(typeOrPayload: any, payload?: any) {
+		const type = payload === undefined ? typeOrPayload.type : typeOrPayload;
+		const body = payload === undefined ? typeOrPayload.body : payload;
+
+		this.connection.sendMessageToWs('channel', {
+			id: this.id,
+			type: type,
+			body: body
+		});
+	}
+
+	public abstract init(params: any): void;
+	public dispose?(): void;
+	public onMessage?(type: string, body: any): void;
+}
diff --git a/src/server/api/stream/channels/drive.ts b/src/server/api/stream/channels/drive.ts
new file mode 100644
index 0000000000..807fc93cd0
--- /dev/null
+++ b/src/server/api/stream/channels/drive.ts
@@ -0,0 +1,12 @@
+import autobind from 'autobind-decorator';
+import Channel from '../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		// Subscribe drive stream
+		this.subscriber.on(`driveStream:${this.user._id}`, data => {
+			this.send(data);
+		});
+	}
+}
diff --git a/src/server/api/stream/channels/games/reversi-game.ts b/src/server/api/stream/channels/games/reversi-game.ts
new file mode 100644
index 0000000000..11f1fb1feb
--- /dev/null
+++ b/src/server/api/stream/channels/games/reversi-game.ts
@@ -0,0 +1,309 @@
+import autobind from 'autobind-decorator';
+import * as CRC32 from 'crc-32';
+import ReversiGame, { pack } from '../../../../../models/games/reversi/game';
+import { publishReversiGameStream } from '../../../../../stream';
+import Reversi from '../../../../../games/reversi/core';
+import * as maps from '../../../../../games/reversi/maps';
+import Channel from '../../channel';
+
+export default class extends Channel {
+	private gameId: string;
+
+	@autobind
+	public async init(params: any) {
+		this.gameId = params.gameId as string;
+
+		// Subscribe game stream
+		this.subscriber.on(`reversiGameStream:${this.gameId}`, data => {
+			this.send(data);
+		});
+	}
+
+	@autobind
+	public onMessage(type: string, body: any) {
+		switch (type) {
+			case 'accept': this.accept(true); break;
+			case 'cancel-accept': this.accept(false); break;
+			case 'update-settings': this.updateSettings(body.settings); break;
+			case 'init-form': this.initForm(body); break;
+			case 'update-form': this.updateForm(body.id, body.value); break;
+			case 'message': this.message(body); break;
+			case 'set': this.set(body.pos); break;
+			case 'check': this.check(body.crc32); break;
+		}
+	}
+
+	@autobind
+	private async updateSettings(settings: any) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (game.isStarted) return;
+		if (!game.user1Id.equals(this.user._id) && !game.user2Id.equals(this.user._id)) return;
+		if (game.user1Id.equals(this.user._id) && game.user1Accepted) return;
+		if (game.user2Id.equals(this.user._id) && game.user2Accepted) return;
+
+		await ReversiGame.update({ _id: this.gameId }, {
+			$set: {
+				settings
+			}
+		});
+
+		publishReversiGameStream(this.gameId, 'updateSettings', settings);
+	}
+
+	@autobind
+	private async initForm(form: any) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (game.isStarted) return;
+		if (!game.user1Id.equals(this.user._id) && !game.user2Id.equals(this.user._id)) return;
+
+		const set = game.user1Id.equals(this.user._id) ? {
+			form1: form
+		} : {
+				form2: form
+			};
+
+		await ReversiGame.update({ _id: this.gameId }, {
+			$set: set
+		});
+
+		publishReversiGameStream(this.gameId, 'initForm', {
+			userId: this.user._id,
+			form
+		});
+	}
+
+	@autobind
+	private async updateForm(id: string, value: any) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (game.isStarted) return;
+		if (!game.user1Id.equals(this.user._id) && !game.user2Id.equals(this.user._id)) return;
+
+		const form = game.user1Id.equals(this.user._id) ? game.form2 : game.form1;
+
+		const item = form.find((i: any) => i.id == id);
+
+		if (item == null) return;
+
+		item.value = value;
+
+		const set = game.user1Id.equals(this.user._id) ? {
+			form2: form
+		} : {
+				form1: form
+			};
+
+		await ReversiGame.update({ _id: this.gameId }, {
+			$set: set
+		});
+
+		publishReversiGameStream(this.gameId, 'updateForm', {
+			userId: this.user._id,
+			id,
+			value
+		});
+	}
+
+	@autobind
+	private async message(message: any) {
+		message.id = Math.random();
+		publishReversiGameStream(this.gameId, 'message', {
+			userId: this.user._id,
+			message
+		});
+	}
+
+	@autobind
+	private async accept(accept: boolean) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (game.isStarted) return;
+
+		let bothAccepted = false;
+
+		if (game.user1Id.equals(this.user._id)) {
+			await ReversiGame.update({ _id: this.gameId }, {
+				$set: {
+					user1Accepted: accept
+				}
+			});
+
+			publishReversiGameStream(this.gameId, 'changeAccepts', {
+				user1: accept,
+				user2: game.user2Accepted
+			});
+
+			if (accept && game.user2Accepted) bothAccepted = true;
+		} else if (game.user2Id.equals(this.user._id)) {
+			await ReversiGame.update({ _id: this.gameId }, {
+				$set: {
+					user2Accepted: accept
+				}
+			});
+
+			publishReversiGameStream(this.gameId, 'changeAccepts', {
+				user1: game.user1Accepted,
+				user2: accept
+			});
+
+			if (accept && game.user1Accepted) bothAccepted = true;
+		} else {
+			return;
+		}
+
+		if (bothAccepted) {
+			// 3秒後、まだacceptされていたらゲーム開始
+			setTimeout(async () => {
+				const freshGame = await ReversiGame.findOne({ _id: this.gameId });
+				if (freshGame == null || freshGame.isStarted || freshGame.isEnded) return;
+				if (!freshGame.user1Accepted || !freshGame.user2Accepted) return;
+
+				let bw: number;
+				if (freshGame.settings.bw == 'random') {
+					bw = Math.random() > 0.5 ? 1 : 2;
+				} else {
+					bw = freshGame.settings.bw as number;
+				}
+
+				function getRandomMap() {
+					const mapCount = Object.entries(maps).length;
+					const rnd = Math.floor(Math.random() * mapCount);
+					return Object.values(maps)[rnd].data;
+				}
+
+				const map = freshGame.settings.map != null ? freshGame.settings.map : getRandomMap();
+
+				await ReversiGame.update({ _id: this.gameId }, {
+					$set: {
+						startedAt: new Date(),
+						isStarted: true,
+						black: bw,
+						'settings.map': map
+					}
+				});
+
+				//#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理
+				const o = new Reversi(map, {
+					isLlotheo: freshGame.settings.isLlotheo,
+					canPutEverywhere: freshGame.settings.canPutEverywhere,
+					loopedBoard: freshGame.settings.loopedBoard
+				});
+
+				if (o.isEnded) {
+					let winner;
+					if (o.winner === true) {
+						winner = freshGame.black == 1 ? freshGame.user1Id : freshGame.user2Id;
+					} else if (o.winner === false) {
+						winner = freshGame.black == 1 ? freshGame.user2Id : freshGame.user1Id;
+					} else {
+						winner = null;
+					}
+
+					await ReversiGame.update({
+						_id: this.gameId
+					}, {
+							$set: {
+								isEnded: true,
+								winnerId: winner
+							}
+						});
+
+					publishReversiGameStream(this.gameId, 'ended', {
+						winnerId: winner,
+						game: await pack(this.gameId, this.user)
+					});
+				}
+				//#endregion
+
+				publishReversiGameStream(this.gameId, 'started', await pack(this.gameId, this.user));
+			}, 3000);
+		}
+	}
+
+	// 石を打つ
+	@autobind
+	private async set(pos: number) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (!game.isStarted) return;
+		if (game.isEnded) return;
+		if (!game.user1Id.equals(this.user._id) && !game.user2Id.equals(this.user._id)) return;
+
+		const o = new Reversi(game.settings.map, {
+			isLlotheo: game.settings.isLlotheo,
+			canPutEverywhere: game.settings.canPutEverywhere,
+			loopedBoard: game.settings.loopedBoard
+		});
+
+		game.logs.forEach(log => {
+			o.put(log.color, log.pos);
+		});
+
+		const myColor =
+			(game.user1Id.equals(this.user._id) && game.black == 1) || (game.user2Id.equals(this.user._id) && game.black == 2)
+				? true
+				: false;
+
+		if (!o.canPut(myColor, pos)) return;
+		o.put(myColor, pos);
+
+		let winner;
+		if (o.isEnded) {
+			if (o.winner === true) {
+				winner = game.black == 1 ? game.user1Id : game.user2Id;
+			} else if (o.winner === false) {
+				winner = game.black == 1 ? game.user2Id : game.user1Id;
+			} else {
+				winner = null;
+			}
+		}
+
+		const log = {
+			at: new Date(),
+			color: myColor,
+			pos
+		};
+
+		const crc32 = CRC32.str(game.logs.map(x => x.pos.toString()).join('') + pos.toString());
+
+		await ReversiGame.update({
+			_id: this.gameId
+		}, {
+				$set: {
+					crc32,
+					isEnded: o.isEnded,
+					winnerId: winner
+				},
+				$push: {
+					logs: log
+				}
+			});
+
+		publishReversiGameStream(this.gameId, 'set', Object.assign(log, {
+			next: o.turn
+		}));
+
+		if (o.isEnded) {
+			publishReversiGameStream(this.gameId, 'ended', {
+				winnerId: winner,
+				game: await pack(this.gameId, this.user)
+			});
+		}
+	}
+
+	@autobind
+	private async check(crc32: string) {
+		const game = await ReversiGame.findOne({ _id: this.gameId });
+
+		if (!game.isStarted) return;
+
+		// 互換性のため
+		if (game.crc32 == null) return;
+
+		if (crc32 !== game.crc32) {
+			this.send('rescue', await pack(game, this.user));
+		}
+	}
+}
diff --git a/src/server/api/stream/channels/games/reversi.ts b/src/server/api/stream/channels/games/reversi.ts
new file mode 100644
index 0000000000..d75025c944
--- /dev/null
+++ b/src/server/api/stream/channels/games/reversi.ts
@@ -0,0 +1,30 @@
+import autobind from 'autobind-decorator';
+import * as mongo from 'mongodb';
+import Matching, { pack } from '../../../../../models/games/reversi/matching';
+import { publishMainStream } from '../../../../../stream';
+import Channel from '../../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		// Subscribe reversi stream
+		this.subscriber.on(`reversiStream:${this.user._id}`, data => {
+			this.send(data);
+		});
+	}
+
+	@autobind
+	public async onMessage(type: string, body: any) {
+		switch (type) {
+			case 'ping':
+				if (body.id == null) return;
+				const matching = await Matching.findOne({
+					parentId: this.user._id,
+					childId: new mongo.ObjectID(body.id)
+				});
+				if (matching == null) return;
+				publishMainStream(matching.childId, 'reversiInvited', await pack(matching, matching.childId));
+				break;
+		}
+	}
+}
diff --git a/src/server/api/stream/channels/global-timeline.ts b/src/server/api/stream/channels/global-timeline.ts
new file mode 100644
index 0000000000..ab0fe5d094
--- /dev/null
+++ b/src/server/api/stream/channels/global-timeline.ts
@@ -0,0 +1,39 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import { pack } from '../../../../models/note';
+import shouldMuteThisNote from '../../../../misc/should-mute-this-note';
+import Channel from '../channel';
+
+export default class extends Channel {
+	private mutedUserIds: string[] = [];
+
+	@autobind
+	public async init(params: any) {
+		// Subscribe events
+		this.subscriber.on('globalTimeline', this.onNote);
+
+		const mute = await Mute.find({ muterId: this.user._id });
+		this.mutedUserIds = mute.map(m => m.muteeId.toString());
+	}
+
+	@autobind
+	private async onNote(note: any) {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, this.user, {
+				detail: true
+			});
+		}
+
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, this.mutedUserIds)) return;
+
+		this.send('note', note);
+	}
+
+	@autobind
+	public dispose() {
+		// Unsubscribe events
+		this.subscriber.off('globalTimeline', this.onNote);
+	}
+}
diff --git a/src/server/api/stream/channels/hashtag.ts b/src/server/api/stream/channels/hashtag.ts
new file mode 100644
index 0000000000..652b0caa5b
--- /dev/null
+++ b/src/server/api/stream/channels/hashtag.ts
@@ -0,0 +1,33 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import { pack } from '../../../../models/note';
+import shouldMuteThisNote from '../../../../misc/should-mute-this-note';
+import Channel from '../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		const mute = this.user ? await Mute.find({ muterId: this.user._id }) : null;
+		const mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
+
+		const q: Array<string[]> = params.q;
+
+		// Subscribe stream
+		this.subscriber.on('hashtag', async note => {
+			const matched = q.some(tags => tags.every(tag => note.tags.map((t: string) => t.toLowerCase()).includes(tag.toLowerCase())));
+			if (!matched) return;
+
+			// Renoteなら再pack
+			if (note.renoteId != null) {
+				note.renote = await pack(note.renoteId, this.user, {
+					detail: true
+				});
+			}
+
+			// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+			if (shouldMuteThisNote(note, mutedUserIds)) return;
+
+			this.send('note', note);
+		});
+	}
+}
diff --git a/src/server/api/stream/channels/home-timeline.ts b/src/server/api/stream/channels/home-timeline.ts
new file mode 100644
index 0000000000..4c674e75ef
--- /dev/null
+++ b/src/server/api/stream/channels/home-timeline.ts
@@ -0,0 +1,39 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import { pack } from '../../../../models/note';
+import shouldMuteThisNote from '../../../../misc/should-mute-this-note';
+import Channel from '../channel';
+
+export default class extends Channel {
+	private mutedUserIds: string[] = [];
+
+	@autobind
+	public async init(params: any) {
+		// Subscribe events
+		this.subscriber.on(`homeTimeline:${this.user._id}`, this.onNote);
+
+		const mute = await Mute.find({ muterId: this.user._id });
+		this.mutedUserIds = mute.map(m => m.muteeId.toString());
+	}
+
+	@autobind
+	private async onNote(note: any) {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, this.user, {
+				detail: true
+			});
+		}
+
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, this.mutedUserIds)) return;
+
+		this.send('note', note);
+	}
+
+	@autobind
+	public dispose() {
+		// Unsubscribe events
+		this.subscriber.off(`homeTimeline:${this.user._id}`, this.onNote);
+	}
+}
diff --git a/src/server/api/stream/channels/hybrid-timeline.ts b/src/server/api/stream/channels/hybrid-timeline.ts
new file mode 100644
index 0000000000..0b12ab3a8f
--- /dev/null
+++ b/src/server/api/stream/channels/hybrid-timeline.ts
@@ -0,0 +1,41 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import { pack } from '../../../../models/note';
+import shouldMuteThisNote from '../../../../misc/should-mute-this-note';
+import Channel from '../channel';
+
+export default class extends Channel {
+	private mutedUserIds: string[] = [];
+
+	@autobind
+	public async init(params: any) {
+		// Subscribe events
+		this.subscriber.on('hybridTimeline', this.onNewNote);
+		this.subscriber.on(`hybridTimeline:${this.user._id}`, this.onNewNote);
+
+		const mute = await Mute.find({ muterId: this.user._id });
+		this.mutedUserIds = mute.map(m => m.muteeId.toString());
+	}
+
+	@autobind
+	private async onNewNote(note: any) {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, this.user, {
+				detail: true
+			});
+		}
+
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, this.mutedUserIds)) return;
+
+		this.send('note', note);
+	}
+
+	@autobind
+	public dispose() {
+		// Unsubscribe events
+		this.subscriber.off('hybridTimeline', this.onNewNote);
+		this.subscriber.off(`hybridTimeline:${this.user._id}`, this.onNewNote);
+	}
+}
diff --git a/src/server/api/stream/channels/index.ts b/src/server/api/stream/channels/index.ts
new file mode 100644
index 0000000000..7e71590d00
--- /dev/null
+++ b/src/server/api/stream/channels/index.ts
@@ -0,0 +1,31 @@
+import main from './main';
+import homeTimeline from './home-timeline';
+import localTimeline from './local-timeline';
+import hybridTimeline from './hybrid-timeline';
+import globalTimeline from './global-timeline';
+import notesStats from './notes-stats';
+import serverStats from './server-stats';
+import userList from './user-list';
+import messaging from './messaging';
+import messagingIndex from './messaging-index';
+import drive from './drive';
+import hashtag from './hashtag';
+import gamesReversi from './games/reversi';
+import gamesReversiGame from './games/reversi-game';
+
+export default {
+	main,
+	homeTimeline,
+	localTimeline,
+	hybridTimeline,
+	globalTimeline,
+	notesStats,
+	serverStats,
+	userList,
+	messaging,
+	messagingIndex,
+	drive,
+	hashtag,
+	gamesReversi,
+	gamesReversiGame
+};
diff --git a/src/server/api/stream/channels/local-timeline.ts b/src/server/api/stream/channels/local-timeline.ts
new file mode 100644
index 0000000000..769ec6392f
--- /dev/null
+++ b/src/server/api/stream/channels/local-timeline.ts
@@ -0,0 +1,39 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import { pack } from '../../../../models/note';
+import shouldMuteThisNote from '../../../../misc/should-mute-this-note';
+import Channel from '../channel';
+
+export default class extends Channel {
+	private mutedUserIds: string[] = [];
+
+	@autobind
+	public async init(params: any) {
+		// Subscribe events
+		this.subscriber.on('localTimeline', this.onNote);
+
+		const mute = this.user ? await Mute.find({ muterId: this.user._id }) : null;
+		this.mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
+	}
+
+	@autobind
+	private async onNote(note: any) {
+		// Renoteなら再pack
+		if (note.renoteId != null) {
+			note.renote = await pack(note.renoteId, this.user, {
+				detail: true
+			});
+		}
+
+		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
+		if (shouldMuteThisNote(note, this.mutedUserIds)) return;
+
+		this.send('note', note);
+	}
+
+	@autobind
+	public dispose() {
+		// Unsubscribe events
+		this.subscriber.off('localTimeline', this.onNote);
+	}
+}
diff --git a/src/server/api/stream/channels/main.ts b/src/server/api/stream/channels/main.ts
new file mode 100644
index 0000000000..a6c5b12760
--- /dev/null
+++ b/src/server/api/stream/channels/main.ts
@@ -0,0 +1,25 @@
+import autobind from 'autobind-decorator';
+import Mute from '../../../../models/mute';
+import Channel from '../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		const mute = await Mute.find({ muterId: this.user._id });
+		const mutedUserIds = mute.map(m => m.muteeId.toString());
+
+		// Subscribe main stream channel
+		this.subscriber.on(`mainStream:${this.user._id}`, async data => {
+			const { type, body } = data;
+
+			switch (type) {
+				case 'notification': {
+					if (!mutedUserIds.includes(body.userId)) {
+						this.send('notification', body);
+					}
+					break;
+				}
+			}
+		});
+	}
+}
diff --git a/src/server/api/stream/channels/messaging-index.ts b/src/server/api/stream/channels/messaging-index.ts
new file mode 100644
index 0000000000..6e87cca7f4
--- /dev/null
+++ b/src/server/api/stream/channels/messaging-index.ts
@@ -0,0 +1,12 @@
+import autobind from 'autobind-decorator';
+import Channel from '../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		// Subscribe messaging index stream
+		this.subscriber.on(`messagingIndexStream:${this.user._id}`, data => {
+			this.send(data);
+		});
+	}
+}
diff --git a/src/server/api/stream/channels/messaging.ts b/src/server/api/stream/channels/messaging.ts
new file mode 100644
index 0000000000..e1a78c8678
--- /dev/null
+++ b/src/server/api/stream/channels/messaging.ts
@@ -0,0 +1,26 @@
+import autobind from 'autobind-decorator';
+import read from '../../common/read-messaging-message';
+import Channel from '../channel';
+
+export default class extends Channel {
+	private otherpartyId: string;
+
+	@autobind
+	public async init(params: any) {
+		this.otherpartyId = params.otherparty as string;
+
+		// Subscribe messaging stream
+		this.subscriber.on(`messagingStream:${this.user._id}-${this.otherpartyId}`, data => {
+			this.send(data);
+		});
+	}
+
+	@autobind
+	public onMessage(type: string, body: any) {
+		switch (type) {
+			case 'read':
+				read(this.user._id, this.otherpartyId, body.id);
+				break;
+		}
+	}
+}
diff --git a/src/server/api/stream/channels/notes-stats.ts b/src/server/api/stream/channels/notes-stats.ts
new file mode 100644
index 0000000000..cc68d9886d
--- /dev/null
+++ b/src/server/api/stream/channels/notes-stats.ts
@@ -0,0 +1,34 @@
+import autobind from 'autobind-decorator';
+import Xev from 'xev';
+import Channel from '../channel';
+
+const ev = new Xev();
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		ev.addListener('notesStats', this.onStats);
+	}
+
+	@autobind
+	private onStats(stats: any) {
+		this.send('stats', stats);
+	}
+
+	@autobind
+	public onMessage(type: string, body: any) {
+		switch (type) {
+			case 'requestLog':
+				ev.once(`notesStatsLog:${body.id}`, statsLog => {
+					this.send('statsLog', statsLog);
+				});
+				ev.emit('requestNotesStatsLog', body.id);
+				break;
+		}
+	}
+
+	@autobind
+	public dispose() {
+		ev.removeListener('notesStats', this.onStats);
+	}
+}
diff --git a/src/server/api/stream/channels/server-stats.ts b/src/server/api/stream/channels/server-stats.ts
new file mode 100644
index 0000000000..28a566e8ae
--- /dev/null
+++ b/src/server/api/stream/channels/server-stats.ts
@@ -0,0 +1,37 @@
+import autobind from 'autobind-decorator';
+import Xev from 'xev';
+import Channel from '../channel';
+
+const ev = new Xev();
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		ev.addListener('serverStats', this.onStats);
+	}
+
+	@autobind
+	private onStats(stats: any) {
+		this.send('stats', stats);
+	}
+
+	@autobind
+	public onMessage(type: string, body: any) {
+		switch (type) {
+			case 'requestLog':
+				ev.once(`serverStatsLog:${body.id}`, statsLog => {
+					this.send('statsLog', statsLog);
+				});
+				ev.emit('requestServerStatsLog', {
+					id: body.id,
+					length: body.length
+				});
+				break;
+		}
+	}
+
+	@autobind
+	public dispose() {
+		ev.removeListener('serverStats', this.onStats);
+	}
+}
diff --git a/src/server/api/stream/channels/user-list.ts b/src/server/api/stream/channels/user-list.ts
new file mode 100644
index 0000000000..4ace308923
--- /dev/null
+++ b/src/server/api/stream/channels/user-list.ts
@@ -0,0 +1,14 @@
+import autobind from 'autobind-decorator';
+import Channel from '../channel';
+
+export default class extends Channel {
+	@autobind
+	public async init(params: any) {
+		const listId = params.listId as string;
+
+		// Subscribe stream
+		this.subscriber.on(`userListStream:${listId}`, data => {
+			this.send(data);
+		});
+	}
+}
diff --git a/src/server/api/stream/drive.ts b/src/server/api/stream/drive.ts
deleted file mode 100644
index 28c241e1bc..0000000000
--- a/src/server/api/stream/drive.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user: any): void {
-	// Subscribe drive stream
-	subscriber.on(`drive-stream:${user._id}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-}
diff --git a/src/server/api/stream/games/reversi-game.ts b/src/server/api/stream/games/reversi-game.ts
deleted file mode 100644
index 5cbbf42d59..0000000000
--- a/src/server/api/stream/games/reversi-game.ts
+++ /dev/null
@@ -1,332 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-import * as CRC32 from 'crc-32';
-import ReversiGame, { pack } from '../../../../models/games/reversi/game';
-import { publishReversiGameStream } from '../../../../stream';
-import Reversi from '../../../../games/reversi/core';
-import * as maps from '../../../../games/reversi/maps';
-import { ParsedUrlQuery } from 'querystring';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user?: any): void {
-	const q = request.resourceURL.query as ParsedUrlQuery;
-	const gameId = q.game as string;
-
-	// Subscribe game stream
-	subscriber.on(`reversi-game-stream:${gameId}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-
-	connection.on('message', async (data) => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'accept':
-				accept(true);
-				break;
-
-			case 'cancel-accept':
-				accept(false);
-				break;
-
-			case 'update-settings':
-				if (msg.settings == null) return;
-				updateSettings(msg.settings);
-				break;
-
-			case 'init-form':
-				if (msg.body == null) return;
-				initForm(msg.body);
-				break;
-
-			case 'update-form':
-				if (msg.id == null || msg.value === undefined) return;
-				updateForm(msg.id, msg.value);
-				break;
-
-			case 'message':
-				if (msg.body == null) return;
-				message(msg.body);
-				break;
-
-			case 'set':
-				if (msg.pos == null) return;
-				set(msg.pos);
-				break;
-
-			case 'check':
-				if (msg.crc32 == null) return;
-				check(msg.crc32);
-				break;
-		}
-	});
-
-	async function updateSettings(settings: any) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (game.isStarted) return;
-		if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) return;
-		if (game.user1Id.equals(user._id) && game.user1Accepted) return;
-		if (game.user2Id.equals(user._id) && game.user2Accepted) return;
-
-		await ReversiGame.update({ _id: gameId }, {
-			$set: {
-				settings
-			}
-		});
-
-		publishReversiGameStream(gameId, 'update-settings', settings);
-	}
-
-	async function initForm(form: any) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (game.isStarted) return;
-		if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) return;
-
-		const set = game.user1Id.equals(user._id) ? {
-			form1: form
-		} : {
-				form2: form
-			};
-
-		await ReversiGame.update({ _id: gameId }, {
-			$set: set
-		});
-
-		publishReversiGameStream(gameId, 'init-form', {
-			userId: user._id,
-			form
-		});
-	}
-
-	async function updateForm(id: string, value: any) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (game.isStarted) return;
-		if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) return;
-
-		const form = game.user1Id.equals(user._id) ? game.form2 : game.form1;
-
-		const item = form.find((i: any) => i.id == id);
-
-		if (item == null) return;
-
-		item.value = value;
-
-		const set = game.user1Id.equals(user._id) ? {
-			form2: form
-		} : {
-				form1: form
-			};
-
-		await ReversiGame.update({ _id: gameId }, {
-			$set: set
-		});
-
-		publishReversiGameStream(gameId, 'update-form', {
-			userId: user._id,
-			id,
-			value
-		});
-	}
-
-	async function message(message: any) {
-		message.id = Math.random();
-		publishReversiGameStream(gameId, 'message', {
-			userId: user._id,
-			message
-		});
-	}
-
-	async function accept(accept: boolean) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (game.isStarted) return;
-
-		let bothAccepted = false;
-
-		if (game.user1Id.equals(user._id)) {
-			await ReversiGame.update({ _id: gameId }, {
-				$set: {
-					user1Accepted: accept
-				}
-			});
-
-			publishReversiGameStream(gameId, 'change-accepts', {
-				user1: accept,
-				user2: game.user2Accepted
-			});
-
-			if (accept && game.user2Accepted) bothAccepted = true;
-		} else if (game.user2Id.equals(user._id)) {
-			await ReversiGame.update({ _id: gameId }, {
-				$set: {
-					user2Accepted: accept
-				}
-			});
-
-			publishReversiGameStream(gameId, 'change-accepts', {
-				user1: game.user1Accepted,
-				user2: accept
-			});
-
-			if (accept && game.user1Accepted) bothAccepted = true;
-		} else {
-			return;
-		}
-
-		if (bothAccepted) {
-			// 3秒後、まだacceptされていたらゲーム開始
-			setTimeout(async () => {
-				const freshGame = await ReversiGame.findOne({ _id: gameId });
-				if (freshGame == null || freshGame.isStarted || freshGame.isEnded) return;
-				if (!freshGame.user1Accepted || !freshGame.user2Accepted) return;
-
-				let bw: number;
-				if (freshGame.settings.bw == 'random') {
-					bw = Math.random() > 0.5 ? 1 : 2;
-				} else {
-					bw = freshGame.settings.bw as number;
-				}
-
-				function getRandomMap() {
-					const mapCount = Object.entries(maps).length;
-					const rnd = Math.floor(Math.random() * mapCount);
-					return Object.values(maps)[rnd].data;
-				}
-
-				const map = freshGame.settings.map != null ? freshGame.settings.map : getRandomMap();
-
-				await ReversiGame.update({ _id: gameId }, {
-					$set: {
-						startedAt: new Date(),
-						isStarted: true,
-						black: bw,
-						'settings.map': map
-					}
-				});
-
-				//#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理
-				const o = new Reversi(map, {
-					isLlotheo: freshGame.settings.isLlotheo,
-					canPutEverywhere: freshGame.settings.canPutEverywhere,
-					loopedBoard: freshGame.settings.loopedBoard
-				});
-
-				if (o.isEnded) {
-					let winner;
-					if (o.winner === true) {
-						winner = freshGame.black == 1 ? freshGame.user1Id : freshGame.user2Id;
-					} else if (o.winner === false) {
-						winner = freshGame.black == 1 ? freshGame.user2Id : freshGame.user1Id;
-					} else {
-						winner = null;
-					}
-
-					await ReversiGame.update({
-						_id: gameId
-					}, {
-							$set: {
-								isEnded: true,
-								winnerId: winner
-							}
-						});
-
-					publishReversiGameStream(gameId, 'ended', {
-						winnerId: winner,
-						game: await pack(gameId, user)
-					});
-				}
-				//#endregion
-
-				publishReversiGameStream(gameId, 'started', await pack(gameId, user));
-			}, 3000);
-		}
-	}
-
-	// 石を打つ
-	async function set(pos: number) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (!game.isStarted) return;
-		if (game.isEnded) return;
-		if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) return;
-
-		const o = new Reversi(game.settings.map, {
-			isLlotheo: game.settings.isLlotheo,
-			canPutEverywhere: game.settings.canPutEverywhere,
-			loopedBoard: game.settings.loopedBoard
-		});
-
-		game.logs.forEach(log => {
-			o.put(log.color, log.pos);
-		});
-
-		const myColor =
-			(game.user1Id.equals(user._id) && game.black == 1) || (game.user2Id.equals(user._id) && game.black == 2)
-				? true
-				: false;
-
-		if (!o.canPut(myColor, pos)) return;
-		o.put(myColor, pos);
-
-		let winner;
-		if (o.isEnded) {
-			if (o.winner === true) {
-				winner = game.black == 1 ? game.user1Id : game.user2Id;
-			} else if (o.winner === false) {
-				winner = game.black == 1 ? game.user2Id : game.user1Id;
-			} else {
-				winner = null;
-			}
-		}
-
-		const log = {
-			at: new Date(),
-			color: myColor,
-			pos
-		};
-
-		const crc32 = CRC32.str(game.logs.map(x => x.pos.toString()).join('') + pos.toString());
-
-		await ReversiGame.update({
-			_id: gameId
-		}, {
-				$set: {
-					crc32,
-					isEnded: o.isEnded,
-					winnerId: winner
-				},
-				$push: {
-					logs: log
-				}
-			});
-
-		publishReversiGameStream(gameId, 'set', Object.assign(log, {
-			next: o.turn
-		}));
-
-		if (o.isEnded) {
-			publishReversiGameStream(gameId, 'ended', {
-				winnerId: winner,
-				game: await pack(gameId, user)
-			});
-		}
-	}
-
-	async function check(crc32: string) {
-		const game = await ReversiGame.findOne({ _id: gameId });
-
-		if (!game.isStarted) return;
-
-		// 互換性のため
-		if (game.crc32 == null) return;
-
-		if (crc32 !== game.crc32) {
-			connection.send(JSON.stringify({
-				type: 'rescue',
-				body: await pack(game, user)
-			}));
-		}
-	}
-}
diff --git a/src/server/api/stream/games/reversi.ts b/src/server/api/stream/games/reversi.ts
deleted file mode 100644
index f467613b21..0000000000
--- a/src/server/api/stream/games/reversi.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import * as mongo from 'mongodb';
-import * as websocket from 'websocket';
-import Xev from 'xev';
-import Matching, { pack } from '../../../../models/games/reversi/matching';
-import { publishUserStream } from '../../../../stream';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user: any): void {
-	// Subscribe reversi stream
-	subscriber.on(`reversi-stream:${user._id}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-
-	connection.on('message', async (data) => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'ping':
-				if (msg.id == null) return;
-				const matching = await Matching.findOne({
-					parentId: user._id,
-					childId: new mongo.ObjectID(msg.id)
-				});
-				if (matching == null) return;
-				publishUserStream(matching.childId, 'reversi_invited', await pack(matching, matching.childId));
-				break;
-		}
-	});
-}
diff --git a/src/server/api/stream/global-timeline.ts b/src/server/api/stream/global-timeline.ts
deleted file mode 100644
index 03852fb181..0000000000
--- a/src/server/api/stream/global-timeline.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-import { IUser } from '../../../models/user';
-import Mute from '../../../models/mute';
-import shouldMuteThisNote from '../../../misc/should-mute-this-note';
-
-export default async function(
-	request: websocket.request,
-	connection: websocket.connection,
-	subscriber: Xev,
-	user: IUser
-) {
-	const mute = await Mute.find({ muterId: user._id });
-	const mutedUserIds = mute.map(m => m.muteeId.toString());
-
-	// Subscribe stream
-	subscriber.on('global-timeline', async note => {
-		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (shouldMuteThisNote(note, mutedUserIds)) return;
-
-		connection.send(JSON.stringify({
-			type: 'note',
-			body: note
-		}));
-	});
-}
diff --git a/src/server/api/stream/hashtag.ts b/src/server/api/stream/hashtag.ts
deleted file mode 100644
index 54da4f9ad9..0000000000
--- a/src/server/api/stream/hashtag.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-import { IUser } from '../../../models/user';
-import Mute from '../../../models/mute';
-import { pack } from '../../../models/note';
-import shouldMuteThisNote from '../../../misc/should-mute-this-note';
-
-export default async function(
-	request: websocket.request,
-	connection: websocket.connection,
-	subscriber: Xev,
-	user?: IUser
-) {
-	const mute = user ? await Mute.find({ muterId: user._id }) : null;
-	const mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
-
-	const q: Array<string[]> = JSON.parse((request.resourceURL.query as any).q);
-
-	// Subscribe stream
-	subscriber.on('hashtag', async note => {
-		const matched = q.some(tags => tags.every(tag => note.tags.map((t: string) => t.toLowerCase()).includes(tag.toLowerCase())));
-		if (!matched) return;
-
-		// Renoteなら再pack
-		if (note.renoteId != null) {
-			note.renote = await pack(note.renoteId, user, {
-				detail: true
-			});
-		}
-
-		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (shouldMuteThisNote(note, mutedUserIds)) return;
-
-		connection.send(JSON.stringify({
-			type: 'note',
-			body: note
-		}));
-	});
-}
diff --git a/src/server/api/stream/home.ts b/src/server/api/stream/home.ts
deleted file mode 100644
index 5575d0d523..0000000000
--- a/src/server/api/stream/home.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-import * as debug from 'debug';
-
-import User, { IUser } from '../../../models/user';
-import Mute from '../../../models/mute';
-import { pack as packNote, pack } from '../../../models/note';
-import readNotification from '../common/read-notification';
-import call from '../call';
-import { IApp } from '../../../models/app';
-import shouldMuteThisNote from '../../../misc/should-mute-this-note';
-import readNote from '../../../services/note/read';
-
-const log = debug('misskey');
-
-export default async function(
-	request: websocket.request,
-	connection: websocket.connection,
-	subscriber: Xev,
-	user: IUser,
-	app: IApp
-) {
-	const mute = await Mute.find({ muterId: user._id });
-	const mutedUserIds = mute.map(m => m.muteeId.toString());
-
-	async function onNoteStream(noteId: any) {
-		const note = await packNote(noteId, user, {
-			detail: true
-		});
-
-		connection.send(JSON.stringify({
-			type: 'note-updated',
-			body: {
-				note: note
-			}
-		}));
-	}
-
-	// Subscribe Home stream channel
-	subscriber.on(`user-stream:${user._id}`, async x => {
-		// Renoteなら再pack
-		if (x.type == 'note' && x.body.renoteId != null) {
-			x.body.renote = await pack(x.body.renoteId, user, {
-				detail: true
-			});
-		}
-
-		//#region 流れてきたメッセージがミュートしているユーザーが関わるものだったら無視する
-		if (x.type == 'note') {
-			if (shouldMuteThisNote(x.body, mutedUserIds)) return;
-		} else if (x.type == 'notification') {
-			if (mutedUserIds.includes(x.body.userId)) {
-				return;
-			}
-		}
-		//#endregion
-
-		connection.send(JSON.stringify(x));
-	});
-
-	connection.on('message', async data => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'api':
-				// 新鮮なデータを利用するためにユーザーをフェッチ
-				call(msg.endpoint, await User.findOne({ _id: user._id }), app, msg.data).then(res => {
-					connection.send(JSON.stringify({
-						type: `api-res:${msg.id}`,
-						body: { res }
-					}));
-				}).catch(e => {
-					connection.send(JSON.stringify({
-						type: `api-res:${msg.id}`,
-						body: { e }
-					}));
-				});
-				break;
-
-			case 'alive':
-				// Update lastUsedAt
-				User.update({ _id: user._id }, {
-					$set: {
-						'lastUsedAt': new Date()
-					}
-				});
-				break;
-
-			case 'read_notification':
-				if (!msg.id) return;
-				readNotification(user._id, msg.id);
-				break;
-
-			case 'capture':
-				if (!msg.id) return;
-				log(`CAPTURE: ${msg.id} by @${user.username}`);
-				subscriber.on(`note-stream:${msg.id}`, onNoteStream);
-				if (msg.read) {
-					readNote(user._id, msg.id);
-				}
-				break;
-
-			case 'decapture':
-				if (!msg.id) return;
-				log(`DECAPTURE: ${msg.id} by @${user.username}`);
-				subscriber.off(`note-stream:${msg.id}`, onNoteStream);
-				break;
-		}
-	});
-}
diff --git a/src/server/api/stream/hybrid-timeline.ts b/src/server/api/stream/hybrid-timeline.ts
deleted file mode 100644
index 045b822783..0000000000
--- a/src/server/api/stream/hybrid-timeline.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-import { IUser } from '../../../models/user';
-import Mute from '../../../models/mute';
-import { pack } from '../../../models/note';
-import shouldMuteThisNote from '../../../misc/should-mute-this-note';
-
-export default async function(
-	request: websocket.request,
-	connection: websocket.connection,
-	subscriber: Xev,
-	user: IUser
-) {
-	const mute = await Mute.find({ muterId: user._id });
-	const mutedUserIds = mute.map(m => m.muteeId.toString());
-
-	// Subscribe stream
-	subscriber.on('hybrid-timeline', onEvent);
-	subscriber.on(`hybrid-timeline:${user._id}`, onEvent);
-
-	async function onEvent(note: any) {
-		// Renoteなら再pack
-		if (note.renoteId != null) {
-			note.renote = await pack(note.renoteId, user, {
-				detail: true
-			});
-		}
-
-		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (shouldMuteThisNote(note, mutedUserIds)) return;
-
-		connection.send(JSON.stringify({
-			type: 'note',
-			body: note
-		}));
-	}
-}
diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
new file mode 100644
index 0000000000..bd99f2755e
--- /dev/null
+++ b/src/server/api/stream/index.ts
@@ -0,0 +1,213 @@
+import autobind from 'autobind-decorator';
+import * as websocket from 'websocket';
+import Xev from 'xev';
+import * as debug from 'debug';
+
+import User, { IUser } from '../../../models/user';
+import readNotification from '../common/read-notification';
+import call from '../call';
+import { IApp } from '../../../models/app';
+import readNote from '../../../services/note/read';
+
+import Channel from './channel';
+import channels from './channels';
+
+const log = debug('misskey');
+
+/**
+ * Main stream connection
+ */
+export default class Connection {
+	public user?: IUser;
+	public app: IApp;
+	private wsConnection: websocket.connection;
+	public subscriber: Xev;
+	private channels: Channel[] = [];
+	private subscribingNotes: any = {};
+
+	constructor(
+		wsConnection: websocket.connection,
+		subscriber: Xev,
+		user: IUser,
+		app: IApp
+	) {
+		this.wsConnection = wsConnection;
+		this.user = user;
+		this.app = app;
+		this.subscriber = subscriber;
+
+		this.wsConnection.on('message', this.onWsConnectionMessage);
+	}
+
+	/**
+	 * クライアントからメッセージ受信時
+	 */
+	@autobind
+	private async onWsConnectionMessage(data: websocket.IMessage) {
+		const { type, body } = JSON.parse(data.utf8Data);
+
+		switch (type) {
+			case 'api': this.onApiRequest(body); break;
+			case 'alive': this.onAlive(); break;
+			case 'readNotification': this.onReadNotification(body); break;
+			case 'subNote': this.onSubscribeNote(body); break;
+			case 'sn': this.onSubscribeNote(body); break; // alias
+			case 'unsubNote': this.onUnsubscribeNote(body); break;
+			case 'un': this.onUnsubscribeNote(body); break; // alias
+			case 'connect': this.onChannelConnectRequested(body); break;
+			case 'disconnect': this.onChannelDisconnectRequested(body); break;
+			case 'channel': this.onChannelMessageRequested(body); break;
+		}
+	}
+
+	/**
+	 * APIリクエスト要求時
+	 */
+	@autobind
+	private async onApiRequest(payload: any) {
+		// 新鮮なデータを利用するためにユーザーをフェッチ
+		const user = this.user ? await User.findOne({ _id: this.user._id }) : null;
+
+		const endpoint = payload.endpoint || payload.ep; // alias
+
+		// 呼び出し
+		call(endpoint, user, this.app, payload.data).then(res => {
+			this.sendMessageToWs(`api:${payload.id}`, { res });
+		}).catch(e => {
+			this.sendMessageToWs(`api:${payload.id}`, { e });
+		});
+	}
+
+	@autobind
+	private onAlive() {
+		// Update lastUsedAt
+		User.update({ _id: this.user._id }, {
+			$set: {
+				'lastUsedAt': new Date()
+			}
+		});
+	}
+
+	@autobind
+	private onReadNotification(payload: any) {
+		if (!payload.id) return;
+		readNotification(this.user._id, payload.id);
+	}
+
+	/**
+	 * 投稿購読要求時
+	 */
+	@autobind
+	private onSubscribeNote(payload: any) {
+		if (!payload.id) return;
+
+		if (this.subscribingNotes[payload.id] == null) {
+			this.subscribingNotes[payload.id] = 0;
+		}
+
+		this.subscribingNotes[payload.id]++;
+
+		if (this.subscribingNotes[payload.id] == 1) {
+			this.subscriber.on(`noteStream:${payload.id}`, this.onNoteStreamMessage);
+		}
+
+		if (payload.read) {
+			readNote(this.user._id, payload.id);
+		}
+	}
+
+	/**
+	 * 投稿購読解除要求時
+	 */
+	@autobind
+	private onUnsubscribeNote(payload: any) {
+		if (!payload.id) return;
+
+		this.subscribingNotes[payload.id]--;
+		if (this.subscribingNotes[payload.id] <= 0) {
+			delete this.subscribingNotes[payload.id];
+			this.subscriber.off(`noteStream:${payload.id}`, this.onNoteStreamMessage);
+		}
+	}
+
+	@autobind
+	private async onNoteStreamMessage(data: any) {
+		this.sendMessageToWs('noteUpdated', {
+			id: data.body.id,
+			type: data.type,
+			body: data.body.body,
+		});
+	}
+
+	/**
+	 * チャンネル接続要求時
+	 */
+	@autobind
+	private onChannelConnectRequested(payload: any) {
+		const { channel, id, params } = payload;
+		log(`CH CONNECT: ${id} ${channel} by @${this.user.username}`);
+		this.connectChannel(id, params, (channels as any)[channel]);
+	}
+
+	/**
+	 * チャンネル切断要求時
+	 */
+	@autobind
+	private onChannelDisconnectRequested(payload: any) {
+		const { id } = payload;
+		log(`CH DISCONNECT: ${id} by @${this.user.username}`);
+		this.disconnectChannel(id);
+	}
+
+	/**
+	 * クライアントにメッセージ送信
+	 */
+	@autobind
+	public sendMessageToWs(type: string, payload: any) {
+		this.wsConnection.send(JSON.stringify({
+			type: type,
+			body: payload
+		}));
+	}
+
+	/**
+	 * チャンネルに接続
+	 */
+	@autobind
+	private connectChannel(id: string, params: any, channelClass: { new(id: string, connection: Connection): Channel }) {
+		const channel = new channelClass(id, this);
+		this.channels.push(channel);
+		channel.init(params);
+	}
+
+	/**
+	 * チャンネルから切断
+	 */
+	@autobind
+	private disconnectChannel(id: string) {
+		const channel = this.channels.find(c => c.id === id);
+
+		if (channel) {
+			if (channel.dispose) channel.dispose();
+			this.channels = this.channels.filter(c => c.id !== id);
+		}
+	}
+
+	@autobind
+	private onChannelMessageRequested(data: any) {
+		const channel = this.channels.find(c => c.id === data.id);
+		if (channel != null && channel.onMessage != null) {
+			channel.onMessage(data.type, data.body);
+		}
+	}
+
+	/**
+	 * ストリームが切れたとき
+	 */
+	@autobind
+	public dispose() {
+		this.channels.forEach(c => {
+			if (c.dispose) c.dispose();
+		});
+	}
+}
diff --git a/src/server/api/stream/local-timeline.ts b/src/server/api/stream/local-timeline.ts
deleted file mode 100644
index ae054a5f9f..0000000000
--- a/src/server/api/stream/local-timeline.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-import { IUser } from '../../../models/user';
-import Mute from '../../../models/mute';
-import { pack } from '../../../models/note';
-import shouldMuteThisNote from '../../../misc/should-mute-this-note';
-
-export default async function(
-	request: websocket.request,
-	connection: websocket.connection,
-	subscriber: Xev,
-	user?: IUser
-) {
-	const mute = user ? await Mute.find({ muterId: user._id }) : null;
-	const mutedUserIds = mute ? mute.map(m => m.muteeId.toString()) : [];
-
-	// Subscribe stream
-	subscriber.on('local-timeline', async note => {
-		// Renoteなら再pack
-		if (note.renoteId != null) {
-			note.renote = await pack(note.renoteId, user, {
-				detail: true
-			});
-		}
-
-		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
-		if (shouldMuteThisNote(note, mutedUserIds)) return;
-
-		connection.send(JSON.stringify({
-			type: 'note',
-			body: note
-		}));
-	});
-}
diff --git a/src/server/api/stream/messaging-index.ts b/src/server/api/stream/messaging-index.ts
deleted file mode 100644
index 9af63f2812..0000000000
--- a/src/server/api/stream/messaging-index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user: any): void {
-	// Subscribe messaging index stream
-	subscriber.on(`messaging-index-stream:${user._id}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-}
diff --git a/src/server/api/stream/messaging.ts b/src/server/api/stream/messaging.ts
deleted file mode 100644
index 8b352cea3c..0000000000
--- a/src/server/api/stream/messaging.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-import read from '../common/read-messaging-message';
-import { ParsedUrlQuery } from 'querystring';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user: any): void {
-	const q = request.resourceURL.query as ParsedUrlQuery;
-	const otherparty = q.otherparty as string;
-
-	// Subscribe messaging stream
-	subscriber.on(`messaging-stream:${user._id}-${otherparty}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-
-	connection.on('message', async (data) => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'read':
-				if (!msg.id) return;
-				read(user._id, otherparty, msg.id);
-				break;
-		}
-	});
-}
diff --git a/src/server/api/stream/notes-stats.ts b/src/server/api/stream/notes-stats.ts
deleted file mode 100644
index ba99403226..0000000000
--- a/src/server/api/stream/notes-stats.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-const ev = new Xev();
-
-export default function(request: websocket.request, connection: websocket.connection): void {
-	const onStats = (stats: any) => {
-		connection.send(JSON.stringify({
-			type: 'stats',
-			body: stats
-		}));
-	};
-
-	connection.on('message', async data => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'requestLog':
-				ev.once(`notesStatsLog:${msg.id}`, statsLog => {
-					connection.send(JSON.stringify({
-						type: 'statsLog',
-						body: statsLog
-					}));
-				});
-				ev.emit('requestNotesStatsLog', msg.id);
-				break;
-		}
-	});
-
-	ev.addListener('notesStats', onStats);
-
-	connection.on('close', () => {
-		ev.removeListener('notesStats', onStats);
-	});
-}
diff --git a/src/server/api/stream/server-stats.ts b/src/server/api/stream/server-stats.ts
deleted file mode 100644
index d4fbeefa04..0000000000
--- a/src/server/api/stream/server-stats.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-
-const ev = new Xev();
-
-export default function(request: websocket.request, connection: websocket.connection): void {
-	const onStats = (stats: any) => {
-		connection.send(JSON.stringify({
-			type: 'stats',
-			body: stats
-		}));
-	};
-
-	connection.on('message', async data => {
-		const msg = JSON.parse(data.utf8Data);
-
-		switch (msg.type) {
-			case 'requestLog':
-				ev.once(`serverStatsLog:${msg.id}`, statsLog => {
-					connection.send(JSON.stringify({
-						type: 'statsLog',
-						body: statsLog
-					}));
-				});
-				ev.emit('requestServerStatsLog', {
-					id: msg.id,
-					length: msg.length
-				});
-				break;
-		}
-	});
-
-	ev.addListener('serverStats', onStats);
-
-	connection.on('close', () => {
-		ev.removeListener('serverStats', onStats);
-	});
-}
diff --git a/src/server/api/stream/user-list.ts b/src/server/api/stream/user-list.ts
deleted file mode 100644
index 30f94d5251..0000000000
--- a/src/server/api/stream/user-list.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import * as websocket from 'websocket';
-import Xev from 'xev';
-import { ParsedUrlQuery } from 'querystring';
-
-export default function(request: websocket.request, connection: websocket.connection, subscriber: Xev, user: any): void {
-	const q = request.resourceURL.query as ParsedUrlQuery;
-	const listId = q.listId as string;
-
-	// Subscribe stream
-	subscriber.on(`user-list-stream:${listId}`, data => {
-		connection.send(JSON.stringify(data));
-	});
-}
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 09ec23a743..4518d21c3f 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -2,26 +2,12 @@ import * as http from 'http';
 import * as websocket from 'websocket';
 import Xev from 'xev';
 
-import homeStream from './stream/home';
-import localTimelineStream from './stream/local-timeline';
-import hybridTimelineStream from './stream/hybrid-timeline';
-import globalTimelineStream from './stream/global-timeline';
-import userListStream from './stream/user-list';
-import driveStream from './stream/drive';
-import messagingStream from './stream/messaging';
-import messagingIndexStream from './stream/messaging-index';
-import reversiGameStream from './stream/games/reversi-game';
-import reversiStream from './stream/games/reversi';
-import serverStatsStream from './stream/server-stats';
-import notesStatsStream from './stream/notes-stats';
-import hashtagStream from './stream/hashtag';
+import MainStreamConnection from './stream';
 import { ParsedUrlQuery } from 'querystring';
 import authenticate from './authenticate';
 
 module.exports = (server: http.Server) => {
-	/**
-	 * Init websocket server
-	 */
+	// Init websocket server
 	const ws = new websocket.server({
 		httpServer: server
 	});
@@ -29,20 +15,16 @@ module.exports = (server: http.Server) => {
 	ws.on('request', async (request) => {
 		const connection = request.accept();
 
-		if (request.resourceURL.pathname === '/server-stats') {
-			serverStatsStream(request, connection);
-			return;
-		}
-
-		if (request.resourceURL.pathname === '/notes-stats') {
-			notesStatsStream(request, connection);
-			return;
-		}
-
 		const ev = new Xev();
 
+		const q = request.resourceURL.query as ParsedUrlQuery;
+		const [user, app] = await authenticate(q.i as string);
+
+		const main = new MainStreamConnection(connection, ev, user, app);
+
 		connection.once('close', () => {
 			ev.removeAllListeners();
+			main.dispose();
 		});
 
 		connection.on('message', async (data) => {
@@ -50,46 +32,5 @@ module.exports = (server: http.Server) => {
 				connection.send('pong');
 			}
 		});
-
-		const q = request.resourceURL.query as ParsedUrlQuery;
-		const [user, app] = await authenticate(q.i as string);
-
-		if (request.resourceURL.pathname === '/games/reversi-game') {
-			reversiGameStream(request, connection, ev, user);
-			return;
-		}
-
-		if (request.resourceURL.pathname === '/local-timeline') {
-			localTimelineStream(request, connection, ev, user);
-			return;
-		}
-
-		if (request.resourceURL.pathname === '/hashtag') {
-			hashtagStream(request, connection, ev, user);
-			return;
-		}
-
-		if (user == null) {
-			connection.send('authentication-failed');
-			connection.close();
-			return;
-		}
-
-		const channel: any =
-			request.resourceURL.pathname === '/' ? homeStream :
-			request.resourceURL.pathname === '/hybrid-timeline' ? hybridTimelineStream :
-			request.resourceURL.pathname === '/global-timeline' ? globalTimelineStream :
-			request.resourceURL.pathname === '/user-list' ? userListStream :
-			request.resourceURL.pathname === '/drive' ? driveStream :
-			request.resourceURL.pathname === '/messaging' ? messagingStream :
-			request.resourceURL.pathname === '/messaging-index' ? messagingIndexStream :
-			request.resourceURL.pathname === '/games/reversi' ? reversiStream :
-			null;
-
-		if (channel !== null) {
-			channel(request, connection, ev, user, app);
-		} else {
-			connection.close();
-		}
 	});
 };
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 666a6ca742..f8c54b2af4 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -12,7 +12,7 @@ import * as sharp from 'sharp';
 import DriveFile, { IMetadata, getDriveFileBucket, IDriveFile } from '../../models/drive-file';
 import DriveFolder from '../../models/drive-folder';
 import { pack } from '../../models/drive-file';
-import { publishUserStream, publishDriveStream } from '../../stream';
+import { publishMainStream, publishDriveStream } from '../../stream';
 import { isLocalUser, IUser, IRemoteUser } from '../../models/user';
 import delFile from './delete-file';
 import config from '../../config';
@@ -383,8 +383,8 @@ export default async function(
 	log(`drive file has been created ${driveFile._id}`);
 
 	pack(driveFile).then(packedFile => {
-		// Publish drive_file_created event
-		publishUserStream(user._id, 'drive_file_created', packedFile);
+		// Publish driveFileCreated event
+		publishMainStream(user._id, 'driveFileCreated', packedFile);
 		publishDriveStream(user._id, 'file_created', packedFile);
 	});
 
diff --git a/src/services/following/create.ts b/src/services/following/create.ts
index dd2fa544dc..637e3e8093 100644
--- a/src/services/following/create.ts
+++ b/src/services/following/create.ts
@@ -2,7 +2,7 @@ import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../
 import Following from '../../models/following';
 import FollowingLog from '../../models/following-log';
 import FollowedLog from '../../models/followed-log';
-import { publishUserStream } from '../../stream';
+import { publishMainStream } from '../../stream';
 import notify from '../../notify';
 import pack from '../../remote/activitypub/renderer';
 import renderFollow from '../../remote/activitypub/renderer/follow';
@@ -61,12 +61,12 @@ export default async function(follower: IUser, followee: IUser) {
 
 		// Publish follow event
 		if (isLocalUser(follower)) {
-			packUser(followee, follower).then(packed => publishUserStream(follower._id, 'follow', packed));
+			packUser(followee, follower).then(packed => publishMainStream(follower._id, 'follow', packed));
 		}
 
 		// Publish followed event
 		if (isLocalUser(followee)) {
-			packUser(follower, followee).then(packed => publishUserStream(followee._id, 'followed', packed)),
+			packUser(follower, followee).then(packed => publishMainStream(followee._id, 'followed', packed)),
 
 			// 通知を作成
 			notify(followee._id, follower._id, 'follow');
diff --git a/src/services/following/delete.ts b/src/services/following/delete.ts
index 7c285e9eac..2a67acbf05 100644
--- a/src/services/following/delete.ts
+++ b/src/services/following/delete.ts
@@ -2,7 +2,7 @@ import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../
 import Following from '../../models/following';
 import FollowingLog from '../../models/following-log';
 import FollowedLog from '../../models/followed-log';
-import { publishUserStream } from '../../stream';
+import { publishMainStream } from '../../stream';
 import pack from '../../remote/activitypub/renderer';
 import renderFollow from '../../remote/activitypub/renderer/follow';
 import renderUndo from '../../remote/activitypub/renderer/undo';
@@ -52,7 +52,7 @@ export default async function(follower: IUser, followee: IUser) {
 
 	// Publish unfollow event
 	if (isLocalUser(follower)) {
-		packUser(followee, follower).then(packed => publishUserStream(follower._id, 'unfollow', packed));
+		packUser(followee, follower).then(packed => publishMainStream(follower._id, 'unfollow', packed));
 	}
 
 	if (isLocalUser(follower) && isRemoteUser(followee)) {
diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts
index 5e38879a49..e7c8df844a 100644
--- a/src/services/following/requests/accept.ts
+++ b/src/services/following/requests/accept.ts
@@ -7,7 +7,7 @@ import { deliver } from '../../../queue';
 import Following from '../../../models/following';
 import FollowingLog from '../../../models/following-log';
 import FollowedLog from '../../../models/followed-log';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	const following = await Following.insert({
@@ -74,7 +74,7 @@ export default async function(followee: IUser, follower: IUser) {
 
 	packUser(followee, followee, {
 		detail: true
-	}).then(packed => publishUserStream(followee._id, 'meUpdated', packed));
+	}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));
 
-	packUser(followee, follower).then(packed => publishUserStream(follower._id, 'follow', packed));
+	packUser(followee, follower).then(packed => publishMainStream(follower._id, 'follow', packed));
 }
diff --git a/src/services/following/requests/cancel.ts b/src/services/following/requests/cancel.ts
index 9655a95f04..def02d59d9 100644
--- a/src/services/following/requests/cancel.ts
+++ b/src/services/following/requests/cancel.ts
@@ -4,7 +4,7 @@ import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
 import renderUndo from '../../../remote/activitypub/renderer/undo';
 import { deliver } from '../../../queue';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	if (isRemoteUser(followee)) {
@@ -34,5 +34,5 @@ export default async function(followee: IUser, follower: IUser) {
 
 	packUser(followee, followee, {
 		detail: true
-	}).then(packed => publishUserStream(followee._id, 'meUpdated', packed));
+	}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));
 }
diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts
index 946c22568c..5e613fd053 100644
--- a/src/services/following/requests/create.ts
+++ b/src/services/following/requests/create.ts
@@ -1,5 +1,5 @@
 import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../../models/user';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 import notify from '../../../notify';
 import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
@@ -33,11 +33,11 @@ export default async function(follower: IUser, followee: IUser) {
 
 	// Publish receiveRequest event
 	if (isLocalUser(followee)) {
-		packUser(follower, followee).then(packed => publishUserStream(followee._id, 'receiveFollowRequest', packed));
+		packUser(follower, followee).then(packed => publishMainStream(followee._id, 'receiveFollowRequest', packed));
 
 		packUser(followee, followee, {
 			detail: true
-		}).then(packed => publishUserStream(followee._id, 'meUpdated', packed));
+		}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));
 
 		// 通知を作成
 		notify(followee._id, follower._id, 'receiveFollowRequest');
diff --git a/src/services/following/requests/reject.ts b/src/services/following/requests/reject.ts
index eda6716321..91a49db997 100644
--- a/src/services/following/requests/reject.ts
+++ b/src/services/following/requests/reject.ts
@@ -4,7 +4,7 @@ import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
 import renderReject from '../../../remote/activitypub/renderer/reject';
 import { deliver } from '../../../queue';
-import { publishUserStream } from '../../../stream';
+import { publishMainStream } from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	if (isRemoteUser(follower)) {
@@ -23,5 +23,5 @@ export default async function(followee: IUser, follower: IUser) {
 		}
 	});
 
-	packUser(followee, follower).then(packed => publishUserStream(follower._id, 'unfollow', packed));
+	packUser(followee, follower).then(packed => publishMainStream(follower._id, 'unfollow', packed));
 }
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 2f2ac18e9b..3dc411d434 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -1,7 +1,7 @@
 import es from '../../db/elasticsearch';
 import Note, { pack, INote } from '../../models/note';
 import User, { isLocalUser, IUser, isRemoteUser, IRemoteUser, ILocalUser } from '../../models/user';
-import { publishUserStream, publishLocalTimelineStream, publishHybridTimelineStream, publishGlobalTimelineStream, publishUserListStream, publishHashtagStream } from '../../stream';
+import { publishMainStream, publishHomeTimelineStream, publishLocalTimelineStream, publishHybridTimelineStream, publishGlobalTimelineStream, publishUserListStream, publishHashtagStream } from '../../stream';
 import Following from '../../models/following';
 import { deliver } from '../../queue';
 import renderNote from '../../remote/activitypub/renderer/note';
@@ -234,7 +234,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 		// 通知
 		if (isLocalUser(data.reply._user)) {
 			nm.push(data.reply.userId, 'reply');
-			publishUserStream(data.reply.userId, 'reply', noteObj);
+			publishMainStream(data.reply.userId, 'reply', noteObj);
 		}
 	}
 
@@ -257,7 +257,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
 
 		// Publish event
 		if (!user._id.equals(data.renote.userId) && isLocalUser(data.renote._user)) {
-			publishUserStream(data.renote.userId, 'renote', noteObj);
+			publishMainStream(data.renote.userId, 'renote', noteObj);
 		}
 	}
 
@@ -306,11 +306,11 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
 				detail: true
 			});
 			// Publish event to myself's stream
-			publishUserStream(note.userId, 'note', detailPackedNote);
+			publishHomeTimelineStream(note.userId, detailPackedNote);
 			publishHybridTimelineStream(note.userId, detailPackedNote);
 		} else {
 			// Publish event to myself's stream
-			publishUserStream(note.userId, 'note', noteObj);
+			publishHomeTimelineStream(note.userId, noteObj);
 
 			// Publish note to local and hybrid timeline stream
 			if (note.visibility != 'home') {
@@ -495,7 +495,7 @@ async function publishToFollowers(note: INote, user: IUser, noteActivity: any) {
 			}
 
 			// Publish event to followers stream
-			publishUserStream(following.followerId, 'note', detailPackedNote);
+			publishHomeTimelineStream(following.followerId, detailPackedNote);
 
 			if (isRemoteUser(user) || note.visibility != 'public') {
 				publishHybridTimelineStream(following.followerId, detailPackedNote);
@@ -526,7 +526,7 @@ function createMentionedEvents(mentionedUsers: IUser[], note: INote, nm: Notific
 			detail: true
 		});
 
-		publishUserStream(u._id, 'mention', detailPackedNote);
+		publishMainStream(u._id, 'mention', detailPackedNote);
 
 		// Create notification
 		nm.push(u._id, 'mention');
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index b164d59781..b5cf42ec28 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -30,7 +30,7 @@ export default async function(user: IUser, note: INote) {
 		}
 	});
 
-	publishNoteStream(note._id, 'deleted');
+	publishNoteStream(note._id, 'deleted', {});
 
 	//#region ローカルの投稿なら削除アクティビティを配送
 	if (isLocalUser(user)) {
diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts
index 5b6267b0dd..6884014e33 100644
--- a/src/services/note/reaction/create.ts
+++ b/src/services/note/reaction/create.ts
@@ -43,7 +43,9 @@ export default async (user: IUser, note: INote, reaction: string) => new Promise
 		$inc: inc
 	});
 
-	publishNoteStream(note._id, 'reacted');
+	publishNoteStream(note._id, 'reacted', {
+		reaction: reaction
+	});
 
 	// リアクションされたユーザーがローカルユーザーなら通知を作成
 	if (isLocalUser(note._user)) {
diff --git a/src/services/note/read.ts b/src/services/note/read.ts
index 8622597bc0..caf5cf318f 100644
--- a/src/services/note/read.ts
+++ b/src/services/note/read.ts
@@ -1,5 +1,5 @@
 import * as mongo from 'mongodb';
-import { publishUserStream } from '../../stream';
+import { publishMainStream } from '../../stream';
 import User from '../../models/user';
 import NoteUnread from '../../models/note-unread';
 
@@ -56,11 +56,11 @@ export default (
 
 	if (count1 == 0) {
 		// 全て既読になったイベントを発行
-		publishUserStream(userId, 'readAllUnreadMentions');
+		publishMainStream(userId, 'readAllUnreadMentions');
 	}
 
 	if (count2 == 0) {
 		// 全て既読になったイベントを発行
-		publishUserStream(userId, 'readAllUnreadSpecifiedNotes');
+		publishMainStream(userId, 'readAllUnreadSpecifiedNotes');
 	}
 });
diff --git a/src/services/note/unread.ts b/src/services/note/unread.ts
index 2d50976283..5953f61fe1 100644
--- a/src/services/note/unread.ts
+++ b/src/services/note/unread.ts
@@ -2,7 +2,7 @@ import NoteUnread from '../../models/note-unread';
 import User, { IUser } from '../../models/user';
 import { INote } from '../../models/note';
 import Mute from '../../models/mute';
-import { publishUserStream } from '../../stream';
+import { publishMainStream } from '../../stream';
 
 export default async function(user: IUser, note: INote, isSpecified = false) {
 	//#region ミュートしているなら無視
@@ -38,10 +38,10 @@ export default async function(user: IUser, note: INote, isSpecified = false) {
 			}
 		});
 
-		publishUserStream(user._id, 'unreadMention', note._id);
+		publishMainStream(user._id, 'unreadMention', note._id);
 
 		if (isSpecified) {
-			publishUserStream(user._id, 'unreadSpecifiedNote', note._id);
+			publishMainStream(user._id, 'unreadSpecifiedNote', note._id);
 		}
 	}, 3000);
 }
diff --git a/src/stream.ts b/src/stream.ts
index 8a8d8b4cf0..4cd8fc8b2c 100644
--- a/src/stream.ts
+++ b/src/stream.ts
@@ -31,52 +31,59 @@ class Publisher {
 		this.ev.emit(channel, message);
 	}
 
-	public publishUserStream = (userId: ID, type: string, value?: any): void => {
-		this.publish(`user-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+	public publishMainStream = (userId: ID, type: string, value?: any): void => {
+		this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
 	public publishDriveStream = (userId: ID, type: string, value?: any): void => {
-		this.publish(`drive-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`driveStream:${userId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
-	public publishNoteStream = (noteId: ID, type: string): void => {
-		this.publish(`note-stream:${noteId}`, null, noteId);
+	public publishNoteStream = (noteId: ID, type: string, value: any): void => {
+		this.publish(`noteStream:${noteId}`, type, {
+			id: noteId,
+			body: value
+		});
 	}
 
 	public publishUserListStream = (listId: ID, type: string, value?: any): void => {
-		this.publish(`user-list-stream:${listId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`userListStream:${listId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
 	public publishMessagingStream = (userId: ID, otherpartyId: ID, type: string, value?: any): void => {
-		this.publish(`messaging-stream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`messagingStream:${userId}-${otherpartyId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
 	public publishMessagingIndexStream = (userId: ID, type: string, value?: any): void => {
-		this.publish(`messaging-index-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`messagingIndexStream:${userId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
 	public publishReversiStream = (userId: ID, type: string, value?: any): void => {
-		this.publish(`reversi-stream:${userId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`reversiStream:${userId}`, type, typeof value === 'undefined' ? null : value);
 	}
 
 	public publishReversiGameStream = (gameId: ID, type: string, value?: any): void => {
-		this.publish(`reversi-game-stream:${gameId}`, type, typeof value === 'undefined' ? null : value);
+		this.publish(`reversiGameStream:${gameId}`, type, typeof value === 'undefined' ? null : value);
+	}
+
+	public publishHomeTimelineStream = (userId: ID, note: any): void => {
+		this.publish(`homeTimeline:${userId}`, null, note);
 	}
 
 	public publishLocalTimelineStream = async (note: any): Promise<void> => {
 		const meta = await this.getMeta();
 		if (meta.disableLocalTimeline) return;
-		this.publish('local-timeline', null, note);
+		this.publish('localTimeline', null, note);
 	}
 
 	public publishHybridTimelineStream = async (userId: ID, note: any): Promise<void> => {
 		const meta = await this.getMeta();
 		if (meta.disableLocalTimeline) return;
-		this.publish(userId ? `hybrid-timeline:${userId}` : 'hybrid-timeline', null, note);
+		this.publish(userId ? `hybridTimeline:${userId}` : 'hybridTimeline', null, note);
 	}
 
 	public publishGlobalTimelineStream = (note: any): void => {
-		this.publish('global-timeline', null, note);
+		this.publish('globalTimeline', null, note);
 	}
 
 	public publishHashtagStream = (note: any): void => {
@@ -88,7 +95,7 @@ const publisher = new Publisher();
 
 export default publisher;
 
-export const publishUserStream = publisher.publishUserStream;
+export const publishMainStream = publisher.publishMainStream;
 export const publishDriveStream = publisher.publishDriveStream;
 export const publishNoteStream = publisher.publishNoteStream;
 export const publishUserListStream = publisher.publishUserListStream;
@@ -96,6 +103,7 @@ export const publishMessagingStream = publisher.publishMessagingStream;
 export const publishMessagingIndexStream = publisher.publishMessagingIndexStream;
 export const publishReversiStream = publisher.publishReversiStream;
 export const publishReversiGameStream = publisher.publishReversiGameStream;
+export const publishHomeTimelineStream = publisher.publishHomeTimelineStream;
 export const publishLocalTimelineStream = publisher.publishLocalTimelineStream;
 export const publishHybridTimelineStream = publisher.publishHybridTimelineStream;
 export const publishGlobalTimelineStream = publisher.publishGlobalTimelineStream;
diff --git a/tsconfig.json b/tsconfig.json
index 76221c282a..ff4eaf917a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,7 +14,8 @@
     "removeComments": false,
     "noLib": false,
     "strict": true,
-    "strictNullChecks": false
+    "strictNullChecks": false,
+    "experimentalDecorators": true
   },
   "compileOnSave": false,
   "include": [

From 3e897727ca7c8b0b5ba11c9d1866dc87ea136c22 Mon Sep 17 00:00:00 2001
From: sei0o inoue <sei0okun@gmail.com>
Date: Sun, 7 Oct 2018 16:51:46 +0900
Subject: [PATCH 510/539] Fix #2773 (#2841)

* Added an API endpoint to check the existence of the file

* fix #2773: Now we can prevent users from posting the same images

* bug fix
---
 src/client/app/common/scripts/get-md5.ts      |  8 ++
 .../app/common/views/components/uploader.vue  | 94 ++++++++++++-------
 .../endpoints/drive/files/check_existence.ts  | 38 ++++++++
 3 files changed, 106 insertions(+), 34 deletions(-)
 create mode 100644 src/client/app/common/scripts/get-md5.ts
 create mode 100644 src/server/api/endpoints/drive/files/check_existence.ts

diff --git a/src/client/app/common/scripts/get-md5.ts b/src/client/app/common/scripts/get-md5.ts
new file mode 100644
index 0000000000..24ac04c1ad
--- /dev/null
+++ b/src/client/app/common/scripts/get-md5.ts
@@ -0,0 +1,8 @@
+const crypto = require('crypto');
+
+export default (data: ArrayBuffer) => {
+  const buf = new Buffer(data);
+  const hash = crypto.createHash("md5");
+  hash.update(buf);
+  return hash.digest("hex");
+};
\ No newline at end of file
diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue
index 19b0d15708..fed6477c05 100644
--- a/src/client/app/common/views/components/uploader.vue
+++ b/src/client/app/common/views/components/uploader.vue
@@ -20,6 +20,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { apiUrl } from '../../../config';
+import getMD5 from '../../scripts/get-md5';
 
 export default Vue.extend({
 	data() {
@@ -28,53 +29,78 @@ export default Vue.extend({
 		};
 	},
 	methods: {
-		upload(file, folder) {
+		checkExistence(fileData: ArrayBuffer): Promise<any> {
+			return new Promise((resolve, reject) => {
+				const data = new FormData();
+				data.append('md5', getMD5(fileData));
+
+				(this as any).api('drive/files/check_existence', {
+					md5: getMD5(fileData)
+				}).then(resp => {
+					resolve(resp.file);
+				});
+			});
+		},
+
+		upload(file: File, folder: any) {
 			if (folder && typeof folder == 'object') folder = folder.id;
 
 			const id = Math.random();
 
-			const ctx = {
-				id: id,
-				name: file.name || 'untitled',
-				progress: undefined,
-				img: undefined
-			};
-
-			this.uploads.push(ctx);
-			this.$emit('change', this.uploads);
-
 			const reader = new FileReader();
 			reader.onload = (e: any) => {
-				ctx.img = e.target.result;
-			};
-			reader.readAsDataURL(file);
+				this.checkExistence(e.target.result).then(result => {
+					console.log(result);
+					if (result !== null) {
+						this.$emit('uploaded', result);
+						return;
+					}
 
-			const data = new FormData();
-			data.append('i', this.$store.state.i.token);
-			data.append('file', file);
+					// Upload if the file didn't exist yet
+					const buf = new Uint8Array(e.target.result);
+					let bin = "";
+					// We use for-of loop instead of apply() to avoid RangeError
+					// SEE: https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string
+					for (const byte of buf) bin += String.fromCharCode(byte);
+					const ctx = {
+						id: id,
+						name: file.name || 'untitled',
+						progress: undefined,
+						img: 'data:*/*;base64,' + btoa(bin)
+					};
 
-			if (folder) data.append('folderId', folder);
+					this.uploads.push(ctx);
+					this.$emit('change', this.uploads);
 
-			const xhr = new XMLHttpRequest();
-			xhr.open('POST', apiUrl + '/drive/files/create', true);
-			xhr.onload = (e: any) => {
-				const driveFile = JSON.parse(e.target.response);
+					const data = new FormData();
+					data.append('i', this.$store.state.i.token);
+					data.append('file', file);
 
-				this.$emit('uploaded', driveFile);
+					if (folder) data.append('folderId', folder);
 
-				this.uploads = this.uploads.filter(x => x.id != id);
-				this.$emit('change', this.uploads);
-			};
+					const xhr = new XMLHttpRequest();
+					xhr.open('POST', apiUrl + '/drive/files/create', true);
+					xhr.onload = (e: any) => {
+						const driveFile = JSON.parse(e.target.response);
 
-			xhr.upload.onprogress = e => {
-				if (e.lengthComputable) {
-					if (ctx.progress == undefined) ctx.progress = {};
-					ctx.progress.max = e.total;
-					ctx.progress.value = e.loaded;
-				}
-			};
+						this.$emit('uploaded', driveFile);
 
-			xhr.send(data);
+						this.uploads = this.uploads.filter(x => x.id != id);
+						this.$emit('change', this.uploads);
+					};
+
+					xhr.upload.onprogress = e => {
+						if (e.lengthComputable) {
+							if (ctx.progress == undefined) ctx.progress = {};
+							ctx.progress.max = e.total;
+							ctx.progress.value = e.loaded;
+						}
+					};
+
+					xhr.send(data);
+				})
+			}
+			reader.readAsArrayBuffer(file);
 		}
 	}
 });
diff --git a/src/server/api/endpoints/drive/files/check_existence.ts b/src/server/api/endpoints/drive/files/check_existence.ts
new file mode 100644
index 0000000000..73d75b7caf
--- /dev/null
+++ b/src/server/api/endpoints/drive/files/check_existence.ts
@@ -0,0 +1,38 @@
+import $ from 'cafy';
+import DriveFile, { pack } from '../../../../../models/drive-file';
+import { ILocalUser } from '../../../../../models/user';
+
+export const meta = {
+	desc: {
+		'ja-JP': '与えられたMD5ハッシュ値を持つファイルがドライブに存在するかどうかを返します。',
+		'en-US': 'Returns whether the file with the given MD5 hash exists in the user\'s drive.'
+	},
+
+	requireCredential: true,
+
+	kind: 'drive-read',
+
+	params: {
+		md5: $.str.note({
+			desc: {
+				'ja-JP': 'ファイルのMD5ハッシュ'
+			}
+		})
+	}
+};
+
+export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+	const [md5, md5Err] = $.str.get(params.md5);
+	if (md5Err) return rej('invalid md5 param');
+
+	const file = await DriveFile.findOne({
+		md5: md5,
+		'metadata.userId': user._id
+	});
+
+	if (file === null) {
+		res({ file: null });
+	} else {
+		res({ file: await pack(file) });
+	}
+});

From 10af684804bbc5dc059e0f258a0a32d54f080f35 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 17:06:28 +0900
Subject: [PATCH 511/539] Improve readability a little

---
 src/server/api/stream/index.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index bd99f2755e..04136b3506 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -182,6 +182,7 @@ export default class Connection {
 
 	/**
 	 * チャンネルから切断
+	 * @param id チャンネルコネクションID
 	 */
 	@autobind
 	private disconnectChannel(id: string) {
@@ -193,6 +194,10 @@ export default class Connection {
 		}
 	}
 
+	/**
+	 * チャンネルへメッセージ送信要求時
+	 * @param data メッセージ
+	 */
 	@autobind
 	private onChannelMessageRequested(data: any) {
 		const channel = this.channels.find(c => c.id === data.id);

From e05acb8d18059c01e5789db043db82e4abfbd9d5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 17:19:52 +0900
Subject: [PATCH 512/539] =?UTF-8?q?=E5=BE=8C=E6=96=B9=E4=BA=92=E6=8F=9B?=
 =?UTF-8?q?=E6=80=A7=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/stream/index.ts |  4 ++--
 src/server/api/streaming.ts    | 22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index 04136b3506..743d77b2a3 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -174,7 +174,7 @@ export default class Connection {
 	 * チャンネルに接続
 	 */
 	@autobind
-	private connectChannel(id: string, params: any, channelClass: { new(id: string, connection: Connection): Channel }) {
+	public connectChannel(id: string, params: any, channelClass: { new(id: string, connection: Connection): Channel }) {
 		const channel = new channelClass(id, this);
 		this.channels.push(channel);
 		channel.init(params);
@@ -185,7 +185,7 @@ export default class Connection {
 	 * @param id チャンネルコネクションID
 	 */
 	@autobind
-	private disconnectChannel(id: string) {
+	public disconnectChannel(id: string) {
 		const channel = this.channels.find(c => c.id === id);
 
 		if (channel) {
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 4518d21c3f..b7793eb284 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -5,6 +5,7 @@ import Xev from 'xev';
 import MainStreamConnection from './stream';
 import { ParsedUrlQuery } from 'querystring';
 import authenticate from './authenticate';
+import channels from './stream/channels';
 
 module.exports = (server: http.Server) => {
 	// Init websocket server
@@ -22,6 +23,27 @@ module.exports = (server: http.Server) => {
 
 		const main = new MainStreamConnection(connection, ev, user, app);
 
+		// 後方互換性のため
+		if (request.resourceURL.pathname !== '/streaming') {
+			main.sendMessageToWs = (type: string, payload: any) => {
+				if (type == 'channel') {
+					type = payload.type;
+					payload = payload.body;
+				}
+				connection.send(JSON.stringify({
+					type: type,
+					body: payload
+				}));
+			};
+			if (request.resourceURL.pathname === '/') {
+				main.connectChannel(Math.random().toString(), null,
+					request.resourceURL.pathname === '/' ? channels.homeTimeline :
+					request.resourceURL.pathname === '/local-timeline' ? channels.localTimeline :
+					request.resourceURL.pathname === '/hybrid-timeline' ? channels.hybridTimeline :
+					request.resourceURL.pathname === '/global-timeline' ? channels.globalTimeline : null);
+			}
+		}
+
 		connection.once('close', () => {
 			ev.removeAllListeners();
 			main.dispose();

From 75cd580c3adca8dc8de69fdf0d5d023e2b16d38c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 19:30:24 +0900
Subject: [PATCH 513/539] Improve theming

---
 src/client/app/mobile/views/components/post-form.vue | 2 +-
 src/client/theme/dark.json5                          | 1 +
 src/client/theme/light.json5                         | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/client/app/mobile/views/components/post-form.vue b/src/client/app/mobile/views/components/post-form.vue
index e4ec1aa576..3de920cf22 100644
--- a/src/client/app/mobile/views/components/post-form.vue
+++ b/src/client/app/mobile/views/components/post-form.vue
@@ -478,7 +478,7 @@ export default Vue.extend({
 					width 48px
 					height 48px
 					font-size 20px
-					color #657786
+					color var(--mobilePostFormButton)
 					background transparent
 					outline none
 					border none
diff --git a/src/client/theme/dark.json5 b/src/client/theme/dark.json5
index 72362a2305..1f4585d14d 100644
--- a/src/client/theme/dark.json5
+++ b/src/client/theme/dark.json5
@@ -175,6 +175,7 @@
 		mobileNavBackdrop: 'rgba(0, 0, 0, 0.7)',
 		mobilePostFormDivider: 'rgba(0, 0, 0, 0.2)',
 		mobilePostFormTextareaBg: 'rgba(0, 0, 0, 0.3)',
+		mobilePostFormButton: '$text',
 		mobileDriveNavBg: ':alpha<0.75<$secondary',
 		mobileHomeTlItemHover: 'rgba(255, 255, 255, 0.1)',
 		mobileUserPageName: '#fff',
diff --git a/src/client/theme/light.json5 b/src/client/theme/light.json5
index 90d0d40187..acb2a6d682 100644
--- a/src/client/theme/light.json5
+++ b/src/client/theme/light.json5
@@ -175,6 +175,7 @@
 		mobileNavBackdrop: 'rgba(0, 0, 0, 0.2)',
 		mobilePostFormDivider: 'rgba(0, 0, 0, 0.1)',
 		mobilePostFormTextareaBg: '#fff',
+		mobilePostFormButton: '$text',
 		mobileDriveNavBg: ':alpha<0.75<$secondary',
 		mobileHomeTlItemHover: 'rgba(0, 0, 0, 0.05)',
 		mobileUserPageName: '#757c82',

From 0adcb646fe57771d4c6c9e3192d2761831bd6064 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 19:35:25 +0900
Subject: [PATCH 514/539] Fix bug

---
 .../app/common/views/components/stream-indicator.vue      | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/client/app/common/views/components/stream-indicator.vue b/src/client/app/common/views/components/stream-indicator.vue
index 0f25b37cc9..12bf78f130 100644
--- a/src/client/app/common/views/components/stream-indicator.vue
+++ b/src/client/app/common/views/components/stream-indicator.vue
@@ -1,14 +1,14 @@
 <template>
 <div class="mk-stream-indicator">
-	<p v-if=" stream.state == 'initializing' ">
+	<p v-if="stream.state == 'initializing'">
 		%fa:spinner .pulse%
 		<span>%i18n:@connecting%<mk-ellipsis/></span>
 	</p>
-	<p v-if=" stream.state == 'reconnecting' ">
+	<p v-if="stream.state == 'reconnecting'">
 		%fa:spinner .pulse%
 		<span>%i18n:@reconnecting%<mk-ellipsis/></span>
 	</p>
-	<p v-if=" stream.state == 'connected' ">
+	<p v-if="stream.state == 'connected'">
 		%fa:check%
 		<span>%i18n:@connected%</span>
 	</p>
@@ -22,7 +22,7 @@ import * as anime from 'animejs';
 export default Vue.extend({
 	computed: {
 		stream() {
-			return (this as any).os.stream.useSharedConnection('main');
+			return (this as any).os.stream;
 		}
 	},
 	created() {

From 1c65cb3e3637c097e876c38147cd1b95b4d356ca Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 19:58:00 +0900
Subject: [PATCH 515/539] Resolve #2843

---
 src/services/i/pin.ts | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/services/i/pin.ts b/src/services/i/pin.ts
index 142fc18511..ff390eb781 100644
--- a/src/services/i/pin.ts
+++ b/src/services/i/pin.ts
@@ -24,7 +24,15 @@ export async function addPinned(user: IUser, noteId: mongo.ObjectID) {
 		throw new Error('note not found');
 	}
 
-	const pinnedNoteIds = user.pinnedNoteIds || [];
+	let pinnedNoteIds = user.pinnedNoteIds || [];
+
+	//#region 現在ピン留め投稿している投稿が実際にデータベースに存在しているのかチェック
+	// データベースの欠損などで存在していない場合があるので。
+	// 存在していなかったらピン留め投稿から外す
+	const pinnedNotes = (await Promise.all(pinnedNoteIds.map(id => Note.findOne({ _id: id })))).filter(x => x != null);
+
+	pinnedNoteIds = pinnedNoteIds.filter(id => pinnedNotes.some(n => n._id.equals(id)));
+	//#endregion
 
 	if (pinnedNoteIds.length >= 5) {
 		throw new Error('cannot pin more notes');

From b6a330928db0cf62ac0cfe484cd5e148edb9ce12 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 20:08:42 +0900
Subject: [PATCH 516/539] =?UTF-8?q?=E6=8A=95=E7=A8=BF=E3=81=AE=E5=89=8A?=
 =?UTF-8?q?=E9=99=A4=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E3=82=92=E5=8F=97?=
 =?UTF-8?q?=E3=81=91=E5=8F=96=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/scripts/note-subscriber.ts      | 11 +++++++++++
 .../app/desktop/views/components/notes.note.vue       |  2 +-
 src/client/app/mobile/views/components/note.vue       |  2 +-
 src/services/note/delete.ts                           |  8 ++++++--
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/client/app/common/scripts/note-subscriber.ts b/src/client/app/common/scripts/note-subscriber.ts
index 5fc82942d5..c41897e70f 100644
--- a/src/client/app/common/scripts/note-subscriber.ts
+++ b/src/client/app/common/scripts/note-subscriber.ts
@@ -97,6 +97,17 @@ export default prop => ({
 					this.$_ns_target.poll.choices.find(c => c.id === choice).votes++;
 					break;
 				}
+
+				case 'deleted': {
+					Vue.set(this.$_ns_target, 'deletedAt', body.deletedAt);
+					this.$_ns_target.text = null;
+					this.$_ns_target.tags = [];
+					this.$_ns_target.fileIds = [];
+					this.$_ns_target.poll = null;
+					this.$_ns_target.geo = null;
+					this.$_ns_target.cw = null;
+					break;
+				}
 			}
 
 			this.$emit(`update:${prop}`, this.$_ns_note_);
diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 3892260181..2db1479823 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -38,7 +38,7 @@
 					<mk-url-preview v-for="url in urls" :url="url" :key="url"/>
 				</div>
 			</div>
-			<footer>
+			<footer v-if="p.deletedAt == null">
 				<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
 				<button class="replyButton" @click="reply()" title="%i18n:@reply%">
 					<template v-if="p.reply">%fa:reply-all%</template>
diff --git a/src/client/app/mobile/views/components/note.vue b/src/client/app/mobile/views/components/note.vue
index db1be4a00e..f370fbf874 100644
--- a/src/client/app/mobile/views/components/note.vue
+++ b/src/client/app/mobile/views/components/note.vue
@@ -39,7 +39,7 @@
 				</div>
 				<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
 			</div>
-			<footer>
+			<footer v-if="p.deletedAt == null">
 				<mk-reactions-viewer :note="p" ref="reactionsViewer"/>
 				<button @click="reply">
 					<template v-if="p.reply">%fa:reply-all%</template>
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index b5cf42ec28..2b99b4b85e 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -15,12 +15,14 @@ import config from '../../config';
  * @param note 投稿
  */
 export default async function(user: IUser, note: INote) {
+	const deletedAt = new Date();
+
 	await Note.update({
 		_id: note._id,
 		userId: user._id
 	}, {
 		$set: {
-			deletedAt: new Date(),
+			deletedAt: deletedAt,
 			text: null,
 			tags: [],
 			fileIds: [],
@@ -30,7 +32,9 @@ export default async function(user: IUser, note: INote) {
 		}
 	});
 
-	publishNoteStream(note._id, 'deleted', {});
+	publishNoteStream(note._id, 'deleted', {
+		deletedAt: deletedAt
+	});
 
 	//#region ローカルの投稿なら削除アクティビティを配送
 	if (isLocalUser(user)) {

From b9f5fca3333283cda2ccbd7843f7496dd9eae574 Mon Sep 17 00:00:00 2001
From: MeiMei <30769358+mei23@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:20:55 +0900
Subject: [PATCH 517/539] =?UTF-8?q?ActivityPub=E3=82=AA=E3=83=96=E3=82=B8?=
 =?UTF-8?q?=E3=82=A7=E3=82=AF=E3=83=88=E6=8E=A1=E7=95=AAAPI=20(#2832)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Show ActivityPub object API

* Add missing return
---
 src/server/api/endpoints/ap/show.ts | 116 ++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 src/server/api/endpoints/ap/show.ts

diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts
new file mode 100644
index 0000000000..1f390d01aa
--- /dev/null
+++ b/src/server/api/endpoints/ap/show.ts
@@ -0,0 +1,116 @@
+import $ from 'cafy';
+import getParams from '../../get-params';
+import config from '../../../../config';
+import * as mongo from 'mongodb';
+import User, { pack as packUser, IUser } from '../../../../models/user';
+import { createPerson } from '../../../../remote/activitypub/models/person';
+import Note, { pack as packNote, INote } from '../../../../models/note';
+import { createNote } from '../../../../remote/activitypub/models/note';
+import Resolver from '../../../../remote/activitypub/resolver';
+
+export const meta = {
+	desc: {
+		'ja-JP': 'URIを指定してActivityPubオブジェクトを参照します。'
+	},
+
+	requireCredential: false,
+
+	params: {
+		uri: $.str.note({
+			desc: {
+				'ja-JP': 'ActivityPubオブジェクトのURI'
+			}
+		}),
+	},
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
+
+	const object = await fetchAny(ps.uri);
+	if (object !== null) return res(object);
+
+	return rej('object not found');
+});
+
+/***
+ * URIからUserかNoteを解決する
+ */
+async function fetchAny(uri: string) {
+	// URIがこのサーバーを指しているなら、ローカルユーザーIDとしてDBからフェッチ
+	if (uri.startsWith(config.url + '/')) {
+		const id = new mongo.ObjectID(uri.split('/').pop());
+		const [ user, note ] = await Promise.all([
+			User.findOne({ _id: id }),
+			Note.findOne({ _id: id })
+		]);
+
+		const packed = await mergePack(user, note);
+		if (packed !== null) return packed;
+	}
+
+	// URI(AP Object id)としてDB検索
+	{
+		const [ user, note ] = await Promise.all([
+			User.findOne({ uri: uri }),
+			Note.findOne({ uri: uri })
+		]);
+
+		const packed = await mergePack(user, note);
+		if (packed !== null) return packed;
+	}
+
+	// リモートから一旦オブジェクトフェッチ
+	const resolver = new Resolver();
+	const object = await resolver.resolve(uri) as any;
+
+	// /@user のような正規id以外で取得できるURIが指定されていた場合、ここで初めて正規URIが確定する
+	// これはDBに存在する可能性があるため再度DB検索
+	if (uri !== object.id) {
+		const [ user, note ] = await Promise.all([
+			User.findOne({ uri: object.id }),
+			Note.findOne({ uri: object.id })
+		]);
+
+		const packed = await mergePack(user, note);
+		if (packed !== null) return packed;
+	}
+
+	// それでもみつからなければ新規であるため登録
+	if (object.type === 'Person') {
+		const user = await createPerson(object.id);
+		return {
+			type: 'User',
+			object: user
+		};
+	}
+
+	if (object.type === 'Note') {
+		const note = await createNote(object.id);
+		return {
+			type: 'Note',
+			object: note
+		};
+	}
+
+	return null;
+}
+
+async function mergePack(user: IUser, note: INote) {
+	if (user !== null) {
+		return {
+			type: 'User',
+			object: await packUser(user, null, { detail: true })
+		};
+	}
+
+	if (note !== null) {
+		return {
+			type: 'Note',
+			object: await packNote(note, null, { detail: true })
+		};
+	}
+
+	return null;
+}

From ccf04d63ec14b83e52aa736404d797780fc358ea Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:23:13 +0900
Subject: [PATCH 518/539] fix(package): update ws to version 6.1.0 (#2823)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index dc76ad0f81..b19c97c481 100644
--- a/package.json
+++ b/package.json
@@ -229,7 +229,7 @@
 		"webpack": "4.20.2",
 		"webpack-cli": "3.1.2",
 		"websocket": "1.0.28",
-		"ws": "6.0.0",
+		"ws": "6.1.0",
 		"xev": "2.0.1"
 	},
 	"greenkeeper": {

From 3199819ded083bc94ce91427a79e114e2015a905 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 7 Oct 2018 20:26:35 +0900
Subject: [PATCH 519/539] fix(package): update reconnecting-websocket to
 version 4.1.5 (#2845)

Closes #2785
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index b19c97c481..977164c001 100644
--- a/package.json
+++ b/package.json
@@ -175,7 +175,7 @@
 		"qrcode": "1.3.0",
 		"ratelimiter": "3.2.0",
 		"recaptcha-promise": "0.1.3",
-		"reconnecting-websocket": "3.2.2",
+		"reconnecting-websocket": "4.1.5",
 		"redis": "2.8.0",
 		"request": "2.88.0",
 		"request-promise-native": "1.0.5",

From ec541d3cd04495d53201a6abce20dbf56e2b5ae3 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:26:47 +0900
Subject: [PATCH 520/539] fix(package): update systeminformation to version
 3.45.7 (#2825)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 977164c001..53c7cd6ef1 100644
--- a/package.json
+++ b/package.json
@@ -195,7 +195,7 @@
 		"stylus": "0.54.5",
 		"stylus-loader": "3.0.2",
 		"summaly": "2.2.0",
-		"systeminformation": "3.45.6",
+		"systeminformation": "3.45.7",
 		"syuilo-password-strength": "0.0.1",
 		"textarea-caret": "3.1.0",
 		"tinycolor2": "1.4.1",

From 599386190a8d2ee680036567dddbbf12a67520ca Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:27:05 +0900
Subject: [PATCH 521/539] fix(package): update file-loader to version 2.0.0
 (#2827)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 53c7cd6ef1..04e756d157 100644
--- a/package.json
+++ b/package.json
@@ -109,7 +109,7 @@
 		"eslint-plugin-vue": "4.7.1",
 		"eventemitter3": "3.1.0",
 		"exif-js": "2.3.0",
-		"file-loader": "1.1.11",
+		"file-loader": "2.0.0",
 		"file-type": "9.0.0",
 		"fuckadblock": "3.2.1",
 		"gulp": "3.9.1",

From f5cbcf3452a044f92fb29ecceb47e4908eb48833 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:29:43 +0900
Subject: [PATCH 522/539] fix(package): update vue-svg-inline-loader to version
 1.2.0 (#2844)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 04e756d157..42eb8f7943 100644
--- a/package.json
+++ b/package.json
@@ -218,7 +218,7 @@
 		"vue-loader": "15.4.2",
 		"vue-router": "3.0.1",
 		"vue-style-loader": "4.1.2",
-		"vue-svg-inline-loader": "1.1.4",
+		"vue-svg-inline-loader": "1.2.0",
 		"vue-template-compiler": "2.5.17",
 		"vuedraggable": "2.16.0",
 		"vuewordcloud": "18.7.11",

From 361ab00c61ff89a2bf731365b010ecf63b05a105 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Sun, 7 Oct 2018 20:31:57 +0900
Subject: [PATCH 523/539] fix(package): update @types/debug to version 0.0.31
 (#2822)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 42eb8f7943..b7287a6492 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
 		"@prezzemolo/zip": "0.0.3",
 		"@types/bcryptjs": "2.4.2",
 		"@types/dateformat": "1.0.1",
-		"@types/debug": "0.0.30",
+		"@types/debug": "0.0.31",
 		"@types/deep-equal": "1.0.1",
 		"@types/double-ended-queue": "2.1.0",
 		"@types/elasticsearch": "5.0.26",

From 305915611e98094eea832d0441f1d0990096f8ab Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 00:58:10 +0900
Subject: [PATCH 524/539] Fix bug

---
 src/server/api/stream/index.ts |  2 ++
 src/server/api/streaming.ts    | 15 +++++++--------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index 743d77b2a3..ef6397fcd9 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -24,6 +24,7 @@ export default class Connection {
 	public subscriber: Xev;
 	private channels: Channel[] = [];
 	private subscribingNotes: any = {};
+	public sendMessageToWsOverride: any = null; // 後方互換性のため
 
 	constructor(
 		wsConnection: websocket.connection,
@@ -164,6 +165,7 @@ export default class Connection {
 	 */
 	@autobind
 	public sendMessageToWs(type: string, payload: any) {
+		if (this.sendMessageToWsOverride) return this.sendMessageToWsOverride(type, payload); // 後方互換性のため
 		this.wsConnection.send(JSON.stringify({
 			type: type,
 			body: payload
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index b7793eb284..8bfa5574f1 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -25,7 +25,7 @@ module.exports = (server: http.Server) => {
 
 		// 後方互換性のため
 		if (request.resourceURL.pathname !== '/streaming') {
-			main.sendMessageToWs = (type: string, payload: any) => {
+			main.sendMessageToWsOverride = (type: string, payload: any) => {
 				if (type == 'channel') {
 					type = payload.type;
 					payload = payload.body;
@@ -35,13 +35,12 @@ module.exports = (server: http.Server) => {
 					body: payload
 				}));
 			};
-			if (request.resourceURL.pathname === '/') {
-				main.connectChannel(Math.random().toString(), null,
-					request.resourceURL.pathname === '/' ? channels.homeTimeline :
-					request.resourceURL.pathname === '/local-timeline' ? channels.localTimeline :
-					request.resourceURL.pathname === '/hybrid-timeline' ? channels.hybridTimeline :
-					request.resourceURL.pathname === '/global-timeline' ? channels.globalTimeline : null);
-			}
+
+			main.connectChannel(Math.random().toString(), null,
+				request.resourceURL.pathname === '/' ? channels.homeTimeline :
+				request.resourceURL.pathname === '/local-timeline' ? channels.localTimeline :
+				request.resourceURL.pathname === '/hybrid-timeline' ? channels.hybridTimeline :
+				request.resourceURL.pathname === '/global-timeline' ? channels.globalTimeline : null);
 		}
 
 		connection.once('close', () => {

From 4182a0cf4c068926ed21c22d63643e12479480d8 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:03:07 +0900
Subject: [PATCH 525/539] Fix

---
 .../app/desktop/views/components/media-video.vue      | 11 ++---------
 .../app/mobile/views/components/media-video.vue       |  5 +++--
 2 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/client/app/desktop/views/components/media-video.vue b/src/client/app/desktop/views/components/media-video.vue
index 1ff762abc2..7859a59254 100644
--- a/src/client/app/desktop/views/components/media-video.vue
+++ b/src/client/app/desktop/views/components/media-video.vue
@@ -6,19 +6,12 @@
 	</div>
 </div>
 <div class="vwxdhznewyashiknzolsoihtlpicqepe" v-else>
-	<video class="video"
-		:src="video.url"
-		:title="video.name"
-		controls
-		@dblclick.prevent="onClick"
-		ref="video"
-		v-if="inlinePlayable" />
 	<a class="thumbnail"
 		:href="video.url"
 		:style="imageStyle"
 		@click.prevent="onClick"
 		:title="video.name"
-		v-else>
+	>
 		%fa:R play-circle%
 	</a>
 </div>
@@ -46,7 +39,7 @@ export default Vue.extend({
 	computed: {
 		imageStyle(): any {
 			return {
-				'background-image': `url(${this.video.url})`
+				'background-image': null // TODO `url(${this.video.thumbnailUrl})`
 			};
 		}
 	},
diff --git a/src/client/app/mobile/views/components/media-video.vue b/src/client/app/mobile/views/components/media-video.vue
index 1e2c1ea7b0..59ba695b93 100644
--- a/src/client/app/mobile/views/components/media-video.vue
+++ b/src/client/app/mobile/views/components/media-video.vue
@@ -9,7 +9,8 @@
 	:href="video.url"
 	target="_blank"
 	:style="imageStyle"
-	:title="video.name">
+	:title="video.name"
+>
 	%fa:R play-circle%
 </a>
 </template>
@@ -32,7 +33,7 @@ export default Vue.extend({
 	computed: {
 		imageStyle(): any {
 			return {
-				'background-image': `url(${this.video.url})`
+				'background-image': null // TODO `url(${this.video.thumbnailUrl})`
 			};
 		}
 	}

From 03d0ce1f89d04880b55ede067d26cf486744acc5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:10:30 +0900
Subject: [PATCH 526/539] Improve theme

---
 src/client/theme/pink.json5 | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/client/theme/pink.json5 b/src/client/theme/pink.json5
index e228b4b4fa..71e963dc91 100644
--- a/src/client/theme/pink.json5
+++ b/src/client/theme/pink.json5
@@ -1,20 +1,20 @@
 {
 	id: 'e9c8c01d-9c15-48d0-9b5c-3d00843b5b36',
 
-	name: 'Strawberry Milk',
-	author: 'syuilo',
+	name: 'Lavender',
+	author: 'sokuyuku & syuilo',
 
 	base: 'light',
 
 	vars: {
-		primary: 'rgb(251, 78, 112)',
-		secondary: 'rgb(255, 218, 240)',
-		text: 'rgb(113, 91, 102)',
+		primary: 'rgb(206, 147, 191)',
+		secondary: 'rgb(253, 242, 243)',
+		text: 'rgb(161, 139, 146)',
 	},
 
 	props: {
-		renoteGradient: '#ffb1c9',
-		renoteText: '#ff588d',
-		quoteBorder: '#ff6c9b',
+		renoteGradient: '#f7e4ec',
+		renoteText: '$primary',
+		quoteBorder: '$primary',
 	},
 }

From a780e7b936c826d7919b38d60dbd60c627f4dd6f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:14:46 +0900
Subject: [PATCH 527/539] Clean up

---
 src/client/app/common/views/components/messaging-room.vue | 1 -
 src/client/app/common/views/components/uploader.vue       | 5 +----
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index c2cd79e116..488dff528f 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -163,7 +163,6 @@ export default Vue.extend({
 		},
 
 		onMessage(message) {
-			console.log(message);
 			// サウンドを再生する
 			if (this.$store.state.device.enableSounds) {
 				const sound = new Audio(`${url}/assets/message.mp3`);
diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue
index fed6477c05..b812064bbb 100644
--- a/src/client/app/common/views/components/uploader.vue
+++ b/src/client/app/common/views/components/uploader.vue
@@ -50,7 +50,6 @@ export default Vue.extend({
 			const reader = new FileReader();
 			reader.onload = (e: any) => {
 				this.checkExistence(e.target.result).then(result => {
-					console.log(result);
 					if (result !== null) {
 						this.$emit('uploaded', result);
 						return;
@@ -58,7 +57,7 @@ export default Vue.extend({
 
 					// Upload if the file didn't exist yet
 					const buf = new Uint8Array(e.target.result);
-					let bin = "";
+					let bin = '';
 					// We use for-of loop instead of apply() to avoid RangeError
 					// SEE: https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string
 					for (const byte of buf) bin += String.fromCharCode(byte);
@@ -107,8 +106,6 @@ export default Vue.extend({
 </script>
 
 <style lang="stylus" scoped>
-
-
 .mk-uploader
 	overflow auto
 

From 674764a0354fac94116271bbac303c25cb2406cc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:16:32 +0900
Subject: [PATCH 528/539] Fix

---
 src/client/app/common/scripts/stream.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/client/app/common/scripts/stream.ts b/src/client/app/common/scripts/stream.ts
index 7dc130937b..3b1a94adf9 100644
--- a/src/client/app/common/scripts/stream.ts
+++ b/src/client/app/common/scripts/stream.ts
@@ -1,6 +1,6 @@
 import autobind from 'autobind-decorator';
 import { EventEmitter } from 'eventemitter3';
-import * as ReconnectingWebsocket from 'reconnecting-websocket';
+import ReconnectingWebsocket from 'reconnecting-websocket';
 import { wsUrl } from '../../config';
 import MiOS from '../../mios';
 

From 2ede3c0864539945c1944ab0ee33439830ab44a4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:25:34 +0900
Subject: [PATCH 529/539] Clean up

---
 src/models/note.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/models/note.ts b/src/models/note.ts
index 43b8753195..6c16ab054b 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -220,7 +220,6 @@ export const hideNote = async (packedNote: any, meId: mongo.ObjectID) => {
 		packedNote.poll = null;
 		packedNote.cw = null;
 		packedNote.tags = [];
-		packedNote.tagsLower = [];
 		packedNote.geo = null;
 		packedNote.isHidden = true;
 	}
@@ -294,6 +293,9 @@ export const pack = async (
 	_note.id = _note._id;
 	delete _note._id;
 
+	delete _note.prev;
+	delete _note.next;
+	delete _note.tagsLower;
 	delete _note._user;
 	delete _note._reply;
 	delete _note._renote;

From 1003fd393e7b8b1c0b686e4689e95d935bf4419b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 01:56:36 +0900
Subject: [PATCH 530/539] Fix bug

---
 src/server/api/stream/channels/main.ts | 6 +++---
 src/stream.ts                          | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/server/api/stream/channels/main.ts b/src/server/api/stream/channels/main.ts
index a6c5b12760..fd0984c833 100644
--- a/src/server/api/stream/channels/main.ts
+++ b/src/server/api/stream/channels/main.ts
@@ -14,12 +14,12 @@ export default class extends Channel {
 
 			switch (type) {
 				case 'notification': {
-					if (!mutedUserIds.includes(body.userId)) {
-						this.send('notification', body);
-					}
+					if (mutedUserIds.includes(body.userId)) return;
 					break;
 				}
 			}
+
+			this.send(type, body);
 		});
 	}
 }
diff --git a/src/stream.ts b/src/stream.ts
index 4cd8fc8b2c..45b353d904 100644
--- a/src/stream.ts
+++ b/src/stream.ts
@@ -25,7 +25,7 @@ class Publisher {
 
 	private publish = (channel: string, type: string, value?: any): void => {
 		const message = type == null ? value : value == null ?
-			{ type: type } :
+			{ type: type, body: null } :
 			{ type: type, body: value };
 
 		this.ev.emit(channel, message);

From 39bdfb6e0d3270b37c614bc0d54749faeb6c0623 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 02:10:46 +0900
Subject: [PATCH 531/539] Improve usability

---
 src/notify.ts                                         | 4 ++--
 src/server/api/endpoints/messaging/messages/create.ts | 4 ++--
 src/services/note/unread.ts                           | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/notify.ts b/src/notify.ts
index eaef63e3c3..522f4c52dd 100644
--- a/src/notify.ts
+++ b/src/notify.ts
@@ -39,7 +39,7 @@ export default (
 		}
 	});
 
-	// 3秒経っても(今回作成した)通知が既読にならなかったら「未読の通知がありますよ」イベントを発行する
+	// 2秒経っても(今回作成した)通知が既読にならなかったら「未読の通知がありますよ」イベントを発行する
 	setTimeout(async () => {
 		const fresh = await Notification.findOne({ _id: notification._id }, { isRead: true });
 		if (!fresh.isRead) {
@@ -58,5 +58,5 @@ export default (
 
 			pushSw(notifiee, 'notification', packed);
 		}
-	}, 3000);
+	}, 2000);
 });
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index f504f92326..cb115cf987 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -102,7 +102,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 		}
 	});
 
-	// 3秒経っても(今回作成した)メッセージが既読にならなかったら「未読のメッセージがありますよ」イベントを発行する
+	// 2秒経っても(今回作成した)メッセージが既読にならなかったら「未読のメッセージがありますよ」イベントを発行する
 	setTimeout(async () => {
 		const freshMessage = await Message.findOne({ _id: message._id }, { isRead: true });
 		if (!freshMessage.isRead) {
@@ -120,7 +120,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 			publishMainStream(message.recipientId, 'unreadMessagingMessage', messageObj);
 			pushSw(message.recipientId, 'unreadMessagingMessage', messageObj);
 		}
-	}, 3000);
+	}, 2000);
 
 	// 履歴作成(自分)
 	History.update({
diff --git a/src/services/note/unread.ts b/src/services/note/unread.ts
index 5953f61fe1..e84ac2a4bf 100644
--- a/src/services/note/unread.ts
+++ b/src/services/note/unread.ts
@@ -22,7 +22,7 @@ export default async function(user: IUser, note: INote, isSpecified = false) {
 		}
 	});
 
-	// 3秒経っても既読にならなかったら「未読の投稿がありますよ」イベントを発行する
+	// 2秒経っても既読にならなかったら「未読の投稿がありますよ」イベントを発行する
 	setTimeout(async () => {
 		const exist = await NoteUnread.findOne({ _id: unread._id });
 		if (exist == null) return;
@@ -43,5 +43,5 @@ export default async function(user: IUser, note: INote, isSpecified = false) {
 		if (isSpecified) {
 			publishMainStream(user._id, 'unreadSpecifiedNote', note._id);
 		}
-	}, 3000);
+	}, 2000);
 }

From c4d4293c46bed1a1c13db56f6512f98f36fcdabd Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Mon, 8 Oct 2018 02:31:42 +0900
Subject: [PATCH 532/539] fix(package): update file-type to version 10.0.0
 (#2846)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index b7287a6492..88a9c07e16 100644
--- a/package.json
+++ b/package.json
@@ -110,7 +110,7 @@
 		"eventemitter3": "3.1.0",
 		"exif-js": "2.3.0",
 		"file-loader": "2.0.0",
-		"file-type": "9.0.0",
+		"file-type": "10.0.0",
 		"fuckadblock": "3.2.1",
 		"gulp": "3.9.1",
 		"gulp-cssnano": "2.1.3",

From e00b5f11cb97749bb8b1907d3671109033e3829a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 08:58:12 +0900
Subject: [PATCH 533/539] =?UTF-8?q?=E4=BA=92=E6=8F=9B=E6=80=A7=E3=82=92?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/server/api/streaming.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index 8bfa5574f1..aed0e674f9 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -30,6 +30,9 @@ module.exports = (server: http.Server) => {
 					type = payload.type;
 					payload = payload.body;
 				}
+				if (type.startsWith('api:')) {
+					type = payload.type.replace('api:', 'api-res:');
+				}
 				connection.send(JSON.stringify({
 					type: type,
 					body: payload

From 65e46b5cec9b759122c5a000039ebcc7a8ae53d4 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 09:02:11 +0900
Subject: [PATCH 534/539] oops

---
 src/server/api/streaming.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index aed0e674f9..c8c4a8a294 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -31,7 +31,7 @@ module.exports = (server: http.Server) => {
 					payload = payload.body;
 				}
 				if (type.startsWith('api:')) {
-					type = payload.type.replace('api:', 'api-res:');
+					type = type.replace('api:', 'api-res:');
 				}
 				connection.send(JSON.stringify({
 					type: type,

From d9edc1eb1d89831f53039cbc31f3132067f41ff5 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 09:08:02 +0900
Subject: [PATCH 535/539] Improve theme

---
 src/client/app/desktop/views/components/ui.header.clock.vue | 2 +-
 src/client/theme/dark.json5                                 | 2 +-
 src/client/theme/light.json5                                | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/client/app/desktop/views/components/ui.header.clock.vue b/src/client/app/desktop/views/components/ui.header.clock.vue
index 1c3f12f2f2..b8b638bc41 100644
--- a/src/client/app/desktop/views/components/ui.header.clock.vue
+++ b/src/client/app/desktop/views/components/ui.header.clock.vue
@@ -89,7 +89,7 @@ export default Vue.extend({
 			display table-cell
 			vertical-align middle
 			height 48px
-			color #9eaba8
+			color var(--desktopHeaderFg)
 
 			> .yyyymmdd
 				opacity 0.7
diff --git a/src/client/theme/dark.json5 b/src/client/theme/dark.json5
index 1f4585d14d..f993e5ef1f 100644
--- a/src/client/theme/dark.json5
+++ b/src/client/theme/dark.json5
@@ -98,7 +98,7 @@
 
 		calendarWeek: '#43d5dc',
 		calendarSaturdayOrSunday: '#ff6679',
-		calendarDay: '#c5ced6',
+		calendarDay: '$text',
 
 		materBg: 'rgba(0, 0, 0, 0.3)',
 
diff --git a/src/client/theme/light.json5 b/src/client/theme/light.json5
index acb2a6d682..db851b66c4 100644
--- a/src/client/theme/light.json5
+++ b/src/client/theme/light.json5
@@ -98,7 +98,7 @@
 
 		calendarWeek: '#19a2a9',
 		calendarSaturdayOrSunday: '#ef95a0',
-		calendarDay: '#777',
+		calendarDay: '$text',
 
 		materBg: 'rgba(0, 0, 0, 0.1)',
 

From 9b3af6efcdb656a545d98292ceb59a06f6b7e0a7 Mon Sep 17 00:00:00 2001
From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com>
Date: Mon, 8 Oct 2018 14:50:32 +0900
Subject: [PATCH 536/539] fix(package): update jsdom to version 12.2.0 (#2848)

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 88a9c07e16..9a552e943e 100644
--- a/package.json
+++ b/package.json
@@ -134,7 +134,7 @@
 		"is-root": "2.0.0",
 		"is-url": "1.2.4",
 		"js-yaml": "3.12.0",
-		"jsdom": "12.1.0",
+		"jsdom": "12.2.0",
 		"json5": "2.1.0",
 		"json5-loader": "1.0.1",
 		"koa": "2.5.1",

From 567cedc7cc82057d47e2891b8f19e32f2d584d7b Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 15:23:10 +0900
Subject: [PATCH 537/539] Improve usability

---
 locales/ja-JP.yml                             |  2 ++
 .../app/common/views/components/theme.vue     | 24 ++++++++++++++++---
 src/client/theme/dark.json5                   |  1 +
 src/client/theme/light.json5                  |  1 +
 4 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 99c865e2b5..f9cc57d370 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -288,6 +288,8 @@ common/views/components/media-banner.vue:
 common/views/components/theme.vue:
   light-theme: "非ダークモード時に使用するテーマ"
   dark-theme: "ダークモード時に使用するテーマ"
+  light-themes: "明るいテーマ"
+  dark-themes: "暗いテーマ"
   install-a-theme: "テーマのインストール"
   theme-code: "テーマコード"
   install: "インストール"
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index 4b0e6da24c..9eda3c5796 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -3,14 +3,24 @@
 	<label>
 		<span>%i18n:@light-theme%</span>
 		<ui-select v-model="light" placeholder="%i18n:@light-theme%">
-			<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			<optgroup label="%i18n:@light-themes%">
+				<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			</optgroup>
+			<optgroup label="%i18n:@dark-themes%">
+				<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			</optgroup>
 		</ui-select>
 	</label>
 
 	<label>
 		<span>%i18n:@dark-theme%</span>
 		<ui-select v-model="dark" placeholder="%i18n:@dark-theme%">
-			<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			<optgroup label="%i18n:@dark-themes%">
+				<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			</optgroup>
+			<optgroup label="%i18n:@light-themes%">
+				<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
+			</optgroup>
 		</ui-select>
 	</label>
 
@@ -120,7 +130,15 @@ export default Vue.extend({
 
 	computed: {
 		themes(): Theme[] {
-			return this.$store.state.device.themes.concat(builtinThemes);
+			return builtinThemes.concat(this.$store.state.device.themes);
+		},
+
+		darkThemes(): Theme[] {
+			return this.themes.filter(t => t.base == 'dark' || t.kind == 'dark');
+		},
+
+		lightThemes(): Theme[] {
+			return this.themes.filter(t => t.base == 'light' || t.kind == 'light');
 		},
 
 		installedThemes(): Theme[] {
diff --git a/src/client/theme/dark.json5 b/src/client/theme/dark.json5
index f993e5ef1f..4fa38a3ae0 100644
--- a/src/client/theme/dark.json5
+++ b/src/client/theme/dark.json5
@@ -4,6 +4,7 @@
 	name: 'Dark',
 	author: 'syuilo',
 	desc: 'Default dark theme',
+	kind: 'dark',
 
 	vars: {
 		primary: '#fb4e4e',
diff --git a/src/client/theme/light.json5 b/src/client/theme/light.json5
index db851b66c4..9f17a63dda 100644
--- a/src/client/theme/light.json5
+++ b/src/client/theme/light.json5
@@ -4,6 +4,7 @@
 	name: 'Light',
 	author: 'syuilo',
 	desc: 'Default light theme',
+	kind: 'light',
 
 	vars: {
 		primary: '#fb4e4e',

From a70ced8e90dfdff9744bc3ce674d3bb2afa83ab2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 15:23:20 +0900
Subject: [PATCH 538/539] Add new theme

---
 src/client/app/theme.ts      |  2 ++
 src/client/theme/black.json5 | 20 ++++++++++++++++++++
 2 files changed, 22 insertions(+)
 create mode 100644 src/client/theme/black.json5

diff --git a/src/client/app/theme.ts b/src/client/app/theme.ts
index 828ce33862..9c5be74fa1 100644
--- a/src/client/app/theme.ts
+++ b/src/client/app/theme.ts
@@ -13,12 +13,14 @@ export type Theme = {
 export const lightTheme: Theme = require('../theme/light.json5');
 export const darkTheme: Theme = require('../theme/dark.json5');
 export const pinkTheme: Theme = require('../theme/pink.json5');
+export const blackTheme: Theme = require('../theme/black.json5');
 export const halloweenTheme: Theme = require('../theme/halloween.json5');
 
 export const builtinThemes = [
 	lightTheme,
 	darkTheme,
 	pinkTheme,
+	blackTheme,
 	halloweenTheme
 ];
 
diff --git a/src/client/theme/black.json5 b/src/client/theme/black.json5
new file mode 100644
index 0000000000..91a812f88a
--- /dev/null
+++ b/src/client/theme/black.json5
@@ -0,0 +1,20 @@
+{
+	id: 'bb5a8287-a072-4b0a-8ae5-ea2a0d33f4f2',
+
+	name: 'Future',
+	author: 'syuilo',
+
+	base: 'dark',
+
+	vars: {
+		primary: 'rgb(94, 158, 185)',
+		secondary: 'rgb(22, 24, 30)',
+		text: 'rgb(214, 218, 224)',
+	},
+
+	props: {
+		renoteGradient: '#0a2d3c',
+		renoteText: '$primary',
+		quoteBorder: '$primary',
+	},
+}

From c6239c8ad9a6d08e466f9713772f85e55de3aab3 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Mon, 8 Oct 2018 15:36:33 +0900
Subject: [PATCH 539/539] fix(package): update @types/mongodb to version 3.1.10
 (#2849)

Closes #2752
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 9a552e943e..63ab3854f5 100644
--- a/package.json
+++ b/package.json
@@ -58,7 +58,7 @@
 		"@types/minio": "7.0.0",
 		"@types/mkdirp": "0.5.2",
 		"@types/mocha": "5.2.3",
-		"@types/mongodb": "3.1.7",
+		"@types/mongodb": "3.1.10",
 		"@types/ms": "0.7.30",
 		"@types/node": "10.11.4",
 		"@types/portscanner": "2.1.0",