diff --git a/src/account.c b/src/account.c
index 32a045d..564bfd2 100644
--- a/src/account.c
+++ b/src/account.c
@@ -31,13 +31,13 @@
#include "navigation.h"
// Files
-#include "../static/account.chtml"
-#include "../static/account_info.chtml"
-#include "../static/account_follow_btn.chtml"
-#include "../static/favourites_page.chtml"
-#include "../static/bookmarks_page.chtml"
-#include "../static/account_stub.chtml"
-#include "../static/account_sidebar.chtml"
+#include "../static/account.ctmpl"
+#include "../static/account_info.ctmpl"
+#include "../static/account_follow_btn.ctmpl"
+#include "../static/favourites_page.ctmpl"
+#include "../static/bookmarks_page.ctmpl"
+#include "../static/account_stub.ctmpl"
+#include "../static/account_sidebar.ctmpl"
#define FOLLOWS_YOU_HTML "%s"
diff --git a/src/template/main.c b/src/template/main.c
index 4aa76fc..9a1f61b 100644
--- a/src/template/main.c
+++ b/src/template/main.c
@@ -35,7 +35,8 @@ enum tmpl_type
TMPL_INT,
TMPL_UINT,
TMPL_STR,
- TMPL_STRLEN
+ TMPL_STRLEN,
+ TMPL_FLOAT,
};
struct tmpl_token
@@ -86,6 +87,8 @@ char* tkn_typetostr(enum tmpl_type tkn)
return "char*";
case TMPL_UINT:
return "unsigned";
+ case TMPL_FLOAT:
+ return "float";
}
return "";
}
@@ -108,6 +111,9 @@ enum tmpl_type tkn_type(char* str)
strcmp(str, "uint") == 0 ||
strcmp(str, "%u") == 0)
return TMPL_UINT;
+ else if (strcmp(str, "float") == 0 ||
+ strcmp(str, "%f") == 0)
+ return TMPL_FLOAT;
// TODO Real error handling
return TMPL_INT;
@@ -186,6 +192,9 @@ void print_template(char* var, char* buf)
case TMPL_UINT:
chexput("%u", 2);
break;
+ case TMPL_FLOAT:
+ chexput("%f", 2);
+ break;
}
}
diff --git a/static/account.ctmpl b/static/account.ctmpl
new file mode 100644
index 0000000..daf5186
--- /dev/null
+++ b/static/account.ctmpl
@@ -0,0 +1,41 @@
+#ifndef __account
+#define __account
+static const char data_account[] = {0X25,0X73,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X62,0X61,0X6E,0X6E,0X65,0X72,0X22,0X20,0X73,0X74,0X79,0X6C,0X65,0X3D,0X22,0X62,0X61,0X63,0X6B,0X67,0X72,0X6F,0X75,0X6E,0X64,0X2D,0X69,0X6D,0X61,0X67,0X65,0X3A,0X75,0X72,0X6C,0X28,0X27,0X25,0X73,0X27,0X29,0X3B,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X69,0X6E,0X66,0X6F,0X2D,0X64,0X61,0X74,0X61,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X64,0X69,0X73,0X70,0X6C,0X61,0X79,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6D,0X65,0X6E,0X75,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X75,0X73,0X65,0X72,0X2D,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X73,0X2D,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X4D,0X65,0X6E,0X75,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6D,0X65,0X6E,0X75,0X20,0X6D,0X65,0X6E,0X75,0X2D,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X6C,0X69,0X6E,0X6B,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X75,0X73,0X65,0X72,0X2F,0X25,0X73,0X2F,0X61,0X63,0X74,0X69,0X6F,0X6E,0X2F,0X25,0X73,0X73,0X75,0X62,0X73,0X63,0X72,0X69,0X62,0X65,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X6C,0X69,0X6E,0X6B,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X75,0X73,0X65,0X72,0X2F,0X25,0X73,0X2F,0X61,0X63,0X74,0X69,0X6F,0X6E,0X2F,0X25,0X73,0X62,0X6C,0X6F,0X63,0X6B,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X6C,0X69,0X6E,0X6B,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X75,0X73,0X65,0X72,0X2F,0X25,0X73,0X2F,0X61,0X63,0X74,0X69,0X6F,0X6E,0X2F,0X25,0X73,0X6D,0X75,0X74,0X65,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X23,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0XA,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X23,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X61,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X23,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X70,0X66,0X70,0X22,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0XA,0X25,0X73,0XA,0XA,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X73,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X2F,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X73,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X2F,0X6D,0X65,0X64,0X69,0X61,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X2F,0X70,0X69,0X6E,0X6E,0X65,0X64,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct account_template {const char* is_blocked;
+const char* header;
+const char* follows_you;
+const char* display_name;
+const char* acct;
+const char* prefix;
+const char* userid;
+const char* unsubscribe;
+const char* subscribe_text;
+const char* unblock;
+const char* block_text;
+const char* unmute;
+const char* mute_text;
+const char* tab_statuses_text;
+int statuses_count;
+const char* tab_following_count;
+int following_count;
+const char* tab_followers_count;
+int followers_count;
+const char* follow_btn;
+const char* avatar;
+const char* info;
+const char* tab_statuses_focused;
+const char* tab_scrobbles_focused;
+const char* tab_scrobbles_text;
+const char* tab_media_focused;
+const char* tab_media_text;
+const char* tab_pinned_focused;
+const char* tab_pinned_text;
+const char* acct_content;
+};
+char* tmpl_gen_account(struct account_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_account, data->is_blocked?data->is_blocked:"", data->header?data->header:"", data->follows_you?data->follows_you:"", data->display_name?data->display_name:"", data->acct?data->acct:"", data->prefix?data->prefix:"", data->userid?data->userid:"", data->unsubscribe?data->unsubscribe:"", data->subscribe_text?data->subscribe_text:"", data->prefix?data->prefix:"", data->userid?data->userid:"", data->unblock?data->unblock:"", data->block_text?data->block_text:"", data->prefix?data->prefix:"", data->userid?data->userid:"", data->unmute?data->unmute:"", data->mute_text?data->mute_text:"", data->tab_statuses_text?data->tab_statuses_text:"", data->statuses_count, data->tab_following_count?data->tab_following_count:"", data->following_count, data->tab_followers_count?data->tab_followers_count:"", data->followers_count, data->follow_btn?data->follow_btn:"", data->avatar?data->avatar:"", data->info?data->info:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->tab_statuses_focused?data->tab_statuses_focused:"", data->tab_statuses_text?data->tab_statuses_text:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->tab_scrobbles_focused?data->tab_scrobbles_focused:"", data->tab_scrobbles_text?data->tab_scrobbles_text:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->tab_media_focused?data->tab_media_focused:"", data->tab_media_text?data->tab_media_text:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->tab_pinned_focused?data->tab_pinned_focused:"", data->tab_pinned_text?data->tab_pinned_text:"", data->acct_content?data->acct_content:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/account_follow_btn.ctmpl b/static/account_follow_btn.ctmpl
new file mode 100644
index 0000000..50e8744
--- /dev/null
+++ b/static/account_follow_btn.ctmpl
@@ -0,0 +1,16 @@
+#ifndef __account_follow_btn
+#define __account_follow_btn
+static const char data_account_follow_btn[] = {0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X75,0X73,0X65,0X72,0X2F,0X25,0X73,0X2F,0X61,0X63,0X74,0X69,0X6F,0X6E,0X2F,0X25,0X73,0X66,0X6F,0X6C,0X6C,0X6F,0X77,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X6C,0X6C,0X6F,0X77,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X61,0X3E,0};
+struct account_follow_btn_template {const char* prefix;
+const char* userid;
+const char* unfollow;
+const char* active;
+const char* follow_text;
+};
+char* tmpl_gen_account_follow_btn(struct account_follow_btn_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_account_follow_btn, data->prefix?data->prefix:"", data->userid?data->userid:"", data->unfollow?data->unfollow:"", data->active?data->active:"", data->follow_text?data->follow_text:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/account_follow_btn.tmpl b/static/account_follow_btn.tmpl
new file mode 100644
index 0000000..6157957
--- /dev/null
+++ b/static/account_follow_btn.tmpl
@@ -0,0 +1,3 @@
+
+ {{%s:follow_text}}
+
diff --git a/static/account_info.ctmpl b/static/account_info.ctmpl
new file mode 100644
index 0000000..990185d
--- /dev/null
+++ b/static/account_info.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __account_info
+#define __account_info
+static const char data_account_info[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X6E,0X6F,0X74,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct account_info_template {const char* acct_note;
+};
+char* tmpl_gen_account_info(struct account_info_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_account_info, data->acct_note?data->acct_note:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/account_info.tmpl b/static/account_info.tmpl
new file mode 100644
index 0000000..e03edf7
--- /dev/null
+++ b/static/account_info.tmpl
@@ -0,0 +1,3 @@
+
diff --git a/static/account_sidebar.ctmpl b/static/account_sidebar.ctmpl
new file mode 100644
index 0000000..1c9a8d2
--- /dev/null
+++ b/static/account_sidebar.ctmpl
@@ -0,0 +1,19 @@
+#ifndef __account_sidebar
+#define __account_sidebar
+static const char data_account_sidebar[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X70,0X66,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X2D,0X73,0X74,0X61,0X74,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0};
+struct account_sidebar_template {const char* avatar;
+const char* username;
+const char* statuses_text;
+int statuses_count;
+const char* following_text;
+int following_count;
+const char* followers_text;
+int followers_count;
+};
+char* tmpl_gen_account_sidebar(struct account_sidebar_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_account_sidebar, data->avatar?data->avatar:"", data->username?data->username:"", data->statuses_text?data->statuses_text:"", data->statuses_count, data->following_text?data->following_text:"", data->following_count, data->followers_text?data->followers_text:"", data->followers_count);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/account_stub.ctmpl b/static/account_stub.ctmpl
new file mode 100644
index 0000000..ef01647
--- /dev/null
+++ b/static/account_stub.ctmpl
@@ -0,0 +1,16 @@
+#ifndef __account_stub
+#define __account_stub
+static const char data_account_stub[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X74,0X75,0X62,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X74,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X22,0X3E,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X74,0X75,0X62,0X2D,0X69,0X6E,0X66,0X6F,0X2D,0X77,0X72,0X61,0X70,0X70,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X74,0X75,0X62,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X74,0X75,0X62,0X2D,0X74,0X6F,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X2D,0X73,0X74,0X75,0X62,0X2D,0X62,0X6F,0X74,0X74,0X6F,0X6D,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0X40,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0};
+struct account_stub_template {const char* prefix;
+const char* acct;
+const char* avatar;
+const char* display_name;
+const char* full_acct;
+};
+char* tmpl_gen_account_stub(struct account_stub_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_account_stub, data->prefix?data->prefix:"", data->acct?data->acct:"", data->avatar?data->avatar:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->display_name?data->display_name:"", data->full_acct?data->full_acct:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/account_stub.tmpl b/static/account_stub.tmpl
new file mode 100644
index 0000000..6ac97d0
--- /dev/null
+++ b/static/account_stub.tmpl
@@ -0,0 +1,19 @@
+
+
+
+
+ |
+
+
+ |
+
+
diff --git a/static/attachment_audio.ctmpl b/static/attachment_audio.ctmpl
new file mode 100644
index 0000000..c6a3a7c
--- /dev/null
+++ b/static/attachment_audio.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __attachment_audio
+#define __attachment_audio
+static const char data_attachment_audio[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X61,0X75,0X64,0X69,0X6F,0X22,0X3E,0XA,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X48,0X65,0X72,0X65,0X20,0X65,0X76,0X65,0X6E,0X20,0X69,0X66,0X20,0X6E,0X6F,0X74,0X20,0X73,0X65,0X6E,0X73,0X69,0X74,0X69,0X76,0X65,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X65,0X6E,0X73,0X69,0X74,0X69,0X76,0X65,0X2D,0X70,0X6C,0X61,0X63,0X65,0X68,0X6F,0X6C,0X64,0X65,0X72,0X20,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X61,0X75,0X64,0X69,0X6F,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X35,0X36,0X22,0X20,0X63,0X6F,0X6E,0X74,0X72,0X6F,0X6C,0X73,0X20,0X70,0X72,0X65,0X6C,0X6F,0X61,0X64,0X3D,0X22,0X6D,0X65,0X74,0X61,0X64,0X61,0X74,0X61,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X6F,0X75,0X72,0X63,0X65,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X76,0X69,0X64,0X65,0X6F,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachment_audio_template {const char* sensitive;
+const char* src;
+};
+char* tmpl_gen_attachment_audio(struct attachment_audio_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachment_audio, data->sensitive?data->sensitive:"", data->src?data->src:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachment_gifv.ctmpl b/static/attachment_gifv.ctmpl
new file mode 100644
index 0000000..32413c7
--- /dev/null
+++ b/static/attachment_gifv.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __attachment_gifv
+#define __attachment_gifv
+static const char data_attachment_gifv[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X67,0X69,0X66,0X76,0X22,0X3E,0XA,0X20,0X20,0X3C,0X76,0X69,0X64,0X65,0X6F,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X35,0X36,0X22,0X20,0X61,0X75,0X74,0X6F,0X70,0X6C,0X61,0X79,0X20,0X6D,0X75,0X74,0X65,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X6F,0X75,0X72,0X63,0X65,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X5B,0X20,0X47,0X49,0X46,0X56,0X20,0X5D,0XA,0X20,0X20,0X3C,0X2F,0X76,0X69,0X64,0X65,0X6F,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachment_gifv_template {const char* src;
+const char* sensitive;
+};
+char* tmpl_gen_attachment_gifv(struct attachment_gifv_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachment_gifv, data->src?data->src:"", data->sensitive?data->sensitive:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachment_image.ctmpl b/static/attachment_image.ctmpl
new file mode 100644
index 0000000..f639ff5
--- /dev/null
+++ b/static/attachment_image.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __attachment_image
+#define __attachment_image
+static const char data_attachment_image[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X69,0X6D,0X67,0X22,0X3E,0XA,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X35,0X36,0X22,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachment_image_template {const char* src;
+const char* sensitive;
+};
+char* tmpl_gen_attachment_image(struct attachment_image_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachment_image, data->src?data->src:"", data->sensitive?data->sensitive:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachment_link.ctmpl b/static/attachment_link.ctmpl
new file mode 100644
index 0000000..bd785e9
--- /dev/null
+++ b/static/attachment_link.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __attachment_link
+#define __attachment_link
+static const char data_attachment_link[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X6C,0X69,0X6E,0X6B,0X20,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X22,0X3E,0X41,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X3C,0X2F,0X61,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachment_link_template {const char* sensitive;
+const char* url;
+};
+char* tmpl_gen_attachment_link(struct attachment_link_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachment_link, data->sensitive?data->sensitive:"", data->url?data->url:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachment_video.ctmpl b/static/attachment_video.ctmpl
new file mode 100644
index 0000000..4d7d487
--- /dev/null
+++ b/static/attachment_video.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __attachment_video
+#define __attachment_video
+static const char data_attachment_video[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X2D,0X76,0X69,0X64,0X65,0X6F,0X22,0X3E,0XA,0X20,0X20,0X3C,0X76,0X69,0X64,0X65,0X6F,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X35,0X36,0X22,0X20,0X63,0X6F,0X6E,0X74,0X72,0X6F,0X6C,0X73,0X20,0X70,0X72,0X65,0X6C,0X6F,0X61,0X64,0X3D,0X22,0X6D,0X65,0X74,0X61,0X64,0X61,0X74,0X61,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X6F,0X75,0X72,0X63,0X65,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X5B,0X20,0X56,0X49,0X44,0X45,0X4F,0X20,0X5D,0XA,0X20,0X20,0X3C,0X2F,0X76,0X69,0X64,0X65,0X6F,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachment_video_template {const char* src;
+const char* sensitive;
+};
+char* tmpl_gen_attachment_video(struct attachment_video_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachment_video, data->src?data->src:"", data->sensitive?data->sensitive:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachments.ctmpl b/static/attachments.ctmpl
new file mode 100644
index 0000000..3079a7c
--- /dev/null
+++ b/static/attachments.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __attachments
+#define __attachments
+static const char data_attachments[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct attachments_template {const char* attachments;
+};
+char* tmpl_gen_attachments(struct attachments_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_attachments, data->attachments?data->attachments:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/attachments.tmpl b/static/attachments.tmpl
new file mode 100644
index 0000000..9879028
--- /dev/null
+++ b/static/attachments.tmpl
@@ -0,0 +1,3 @@
+
+ {{%s:attachments}}
+
diff --git a/static/bar.ctmpl b/static/bar.ctmpl
new file mode 100644
index 0000000..dcd5e3b
--- /dev/null
+++ b/static/bar.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __bar
+#define __bar
+static const char data_bar[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X73,0X74,0X79,0X6C,0X65,0X3D,0X22,0X6D,0X61,0X78,0X2D,0X68,0X65,0X69,0X67,0X68,0X74,0X3A,0X20,0X25,0X66,0X25,0X25,0X3B,0X22,0X3E,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct bar_template {float value;
+};
+char* tmpl_gen_bar(struct bar_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_bar, data->value);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/bar.tmpl b/static/bar.tmpl
new file mode 100644
index 0000000..c3eceda
--- /dev/null
+++ b/static/bar.tmpl
@@ -0,0 +1,3 @@
+
diff --git a/static/bar_graph.ctmpl b/static/bar_graph.ctmpl
new file mode 100644
index 0000000..b9ac1a4
--- /dev/null
+++ b/static/bar_graph.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __bar_graph
+#define __bar_graph
+static const char data_bar_graph[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X61,0X72,0X2D,0X67,0X72,0X61,0X70,0X68,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct bar_graph_template {const char* graph;
+};
+char* tmpl_gen_bar_graph(struct bar_graph_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_bar_graph, data->graph?data->graph:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/bar_graph.tmpl b/static/bar_graph.tmpl
new file mode 100644
index 0000000..83cd3f6
--- /dev/null
+++ b/static/bar_graph.tmpl
@@ -0,0 +1,3 @@
+
+ {{%s:graph}}
+
diff --git a/static/bookmarks_page.ctmpl b/static/bookmarks_page.ctmpl
new file mode 100644
index 0000000..ecdd572
--- /dev/null
+++ b/static/bookmarks_page.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __bookmarks_page
+#define __bookmarks_page
+static const char data_bookmarks_page[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X42,0X6F,0X6F,0X6B,0X6D,0X61,0X72,0X6B,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X6F,0X6F,0X6B,0X6D,0X61,0X72,0X6B,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X25,0X73,0};
+struct bookmarks_page_template {const char* statuses;
+const char* navigation;
+};
+char* tmpl_gen_bookmarks_page(struct bookmarks_page_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_bookmarks_page, data->statuses?data->statuses:"", data->navigation?data->navigation:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/bookmarks_page.tmpl b/static/bookmarks_page.tmpl
new file mode 100644
index 0000000..0e34b35
--- /dev/null
+++ b/static/bookmarks_page.tmpl
@@ -0,0 +1,7 @@
+
+
Bookmarks
+
+
+ {{%s:statuses}}
+
+{{%s:navigation}}
diff --git a/static/config_appearance.ctmpl b/static/config_appearance.ctmpl
new file mode 100644
index 0000000..0d0eccd
--- /dev/null
+++ b/static/config_appearance.ctmpl
@@ -0,0 +1,5 @@
+#ifndef __config_appearance
+#define __config_appearance
+static const char data_config_appearance[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X61,0X70,0X70,0X65,0X61,0X72,0X61,0X6E,0X63,0X65,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X20,0X65,0X6E,0X63,0X74,0X79,0X70,0X65,0X3D,0X22,0X6D,0X75,0X6C,0X74,0X69,0X70,0X61,0X72,0X74,0X2F,0X66,0X6F,0X72,0X6D,0X2D,0X64,0X61,0X74,0X61,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X4C,0X65,0X74,0X73,0X20,0X73,0X65,0X72,0X76,0X65,0X72,0X20,0X6B,0X6E,0X6F,0X77,0X20,0X77,0X65,0X20,0X73,0X65,0X6E,0X74,0X20,0X69,0X74,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X65,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X31,0X3E,0X41,0X70,0X70,0X65,0X61,0X72,0X61,0X6E,0X63,0X65,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X73,0X69,0X6E,0X67,0X6C,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X53,0X61,0X76,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X54,0X68,0X65,0X6D,0X65,0X20,0X76,0X61,0X72,0X69,0X61,0X6E,0X74,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X74,0X68,0X65,0X6D,0X65,0X76,0X61,0X72,0X22,0X3E,0X54,0X68,0X65,0X6D,0X65,0X20,0X76,0X61,0X72,0X69,0X61,0X6E,0X74,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X65,0X6C,0X65,0X63,0X74,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X74,0X68,0X65,0X6D,0X65,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X74,0X68,0X65,0X6D,0X65,0X76,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X74,0X72,0X65,0X65,0X62,0X69,0X72,0X64,0X32,0X30,0X22,0X20,0X74,0X69,0X74,0X6C,0X65,0X3D,0X22,0X43,0X72,0X65,0X61,0X74,0X65,0X64,0X20,0X62,0X79,0X20,0X6E,0X65,0X6B,0X6F,0X62,0X69,0X74,0X20,0X28,0X40,0X6E,0X65,0X6B,0X6F,0X40,0X72,0X64,0X72,0X61,0X6D,0X61,0X2E,0X63,0X63,0X29,0X20,0X7C,0X20,0X44,0X61,0X72,0X6B,0X20,0X76,0X61,0X72,0X69,0X61,0X6E,0X74,0X20,0X63,0X72,0X65,0X61,0X74,0X65,0X64,0X20,0X62,0X79,0X20,0X47,0X72,0X75,0X6D,0X62,0X75,0X6C,0X6F,0X6E,0X20,0X28,0X40,0X67,0X72,0X75,0X6D,0X62,0X75,0X6C,0X6F,0X6E,0X40,0X66,0X72,0X65,0X65,0X63,0X75,0X6D,0X65,0X78,0X74,0X72,0X65,0X6D,0X69,0X73,0X74,0X2E,0X63,0X6F,0X6D,0X29,0X22,0X3E,0X74,0X72,0X65,0X65,0X62,0X69,0X72,0X64,0X20,0X32,0X2E,0X30,0X20,0X2D,0X20,0X44,0X65,0X66,0X61,0X75,0X6C,0X74,0X2C,0X20,0X73,0X69,0X6D,0X70,0X6C,0X65,0X20,0X74,0X68,0X65,0X6D,0X65,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X73,0X6F,0X6C,0X61,0X72,0X69,0X7A,0X65,0X64,0X22,0X20,0X74,0X69,0X74,0X6C,0X65,0X3D,0X22,0X43,0X72,0X65,0X61,0X74,0X65,0X64,0X20,0X62,0X79,0X20,0X63,0X6F,0X79,0X6F,0X74,0X65,0X20,0X28,0X40,0X63,0X6F,0X79,0X6F,0X74,0X65,0X40,0X70,0X6C,0X2E,0X6C,0X61,0X69,0X6E,0X2E,0X73,0X68,0X29,0X22,0X3E,0X53,0X6F,0X6C,0X61,0X72,0X69,0X7A,0X65,0X64,0X20,0X2D,0X20,0X53,0X6F,0X6C,0X61,0X72,0X69,0X7A,0X65,0X64,0X20,0X63,0X6F,0X6C,0X6F,0X72,0X73,0X20,0X66,0X6F,0X72,0X20,0X70,0X6C,0X65,0X61,0X73,0X61,0X6E,0X74,0X20,0X76,0X69,0X65,0X77,0X69,0X6E,0X67,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X65,0X6C,0X65,0X63,0X74,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X43,0X6F,0X6C,0X6F,0X72,0X20,0X53,0X63,0X68,0X65,0X6D,0X65,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X72,0X61,0X64,0X69,0X6F,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6C,0X69,0X67,0X68,0X74,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X74,0X68,0X65,0X6D,0X65,0X63,0X6C,0X72,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X30,0X22,0X20,0X63,0X68,0X65,0X63,0X6B,0X65,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6C,0X69,0X67,0X68,0X74,0X22,0X3E,0X4C,0X69,0X67,0X68,0X74,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X72,0X61,0X64,0X69,0X6F,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X64,0X61,0X72,0X6B,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X74,0X68,0X65,0X6D,0X65,0X63,0X6C,0X72,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X64,0X61,0X72,0X6B,0X22,0X3E,0X44,0X61,0X72,0X6B,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X42,0X61,0X63,0X6B,0X67,0X72,0X6F,0X75,0X6E,0X64,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X66,0X69,0X6C,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X66,0X69,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X73,0X69,0X6E,0X67,0X6C,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X53,0X61,0X76,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+
+#endif
diff --git a/static/config_general.ctmpl b/static/config_general.ctmpl
new file mode 100644
index 0000000..221fa5e
--- /dev/null
+++ b/static/config_general.ctmpl
@@ -0,0 +1,24 @@
+#ifndef __config_general
+#define __config_general
+static const char data_config_general[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X67,0X65,0X6E,0X65,0X72,0X61,0X6C,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X4C,0X65,0X74,0X73,0X20,0X73,0X65,0X72,0X76,0X65,0X72,0X20,0X6B,0X6E,0X6F,0X77,0X20,0X77,0X65,0X20,0X73,0X65,0X6E,0X74,0X20,0X69,0X74,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X65,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X31,0X3E,0X47,0X65,0X6E,0X65,0X72,0X61,0X6C,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X73,0X69,0X6E,0X67,0X6C,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X53,0X61,0X76,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X4A,0X61,0X76,0X61,0X53,0X63,0X72,0X69,0X70,0X74,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6A,0X73,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X22,0X3E,0X45,0X6E,0X61,0X62,0X6C,0X65,0X20,0X4A,0X61,0X76,0X61,0X53,0X63,0X72,0X69,0X70,0X74,0X20,0X2D,0X20,0X49,0X66,0X20,0X64,0X69,0X73,0X61,0X62,0X6C,0X65,0X64,0X2C,0X20,0X6F,0X76,0X65,0X72,0X72,0X69,0X64,0X65,0X73,0X20,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X73,0X20,0X62,0X65,0X6C,0X6F,0X77,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6A,0X73,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X22,0X3E,0X51,0X75,0X69,0X63,0X6B,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X20,0X2D,0X20,0X4C,0X69,0X6B,0X65,0X73,0X2C,0X20,0X42,0X6F,0X6F,0X73,0X74,0X73,0X2C,0X20,0X65,0X74,0X63,0X20,0X64,0X6F,0X6E,0X65,0X20,0X69,0X6E,0X20,0X62,0X61,0X63,0X6B,0X67,0X72,0X6F,0X75,0X6E,0X64,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X72,0X65,0X70,0X6C,0X79,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6A,0X73,0X72,0X65,0X70,0X6C,0X79,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X72,0X65,0X70,0X6C,0X79,0X22,0X3E,0X51,0X75,0X69,0X63,0X6B,0X20,0X72,0X65,0X70,0X6C,0X79,0X20,0X2D,0X20,0X52,0X65,0X70,0X6C,0X69,0X65,0X73,0X20,0X64,0X6F,0X6E,0X27,0X74,0X20,0X72,0X65,0X71,0X75,0X69,0X72,0X65,0X20,0X72,0X65,0X64,0X69,0X72,0X65,0X63,0X74,0X73,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X6C,0X69,0X76,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6A,0X73,0X6C,0X69,0X76,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6A,0X73,0X6C,0X69,0X76,0X65,0X22,0X3E,0X4C,0X69,0X76,0X65,0X20,0X75,0X70,0X64,0X61,0X74,0X65,0X20,0X2D,0X20,0X53,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X2C,0X20,0X63,0X68,0X61,0X74,0X73,0X2C,0X20,0X61,0X6E,0X64,0X20,0X72,0X65,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X20,0X66,0X65,0X74,0X63,0X68,0X20,0X6F,0X6E,0X20,0X74,0X68,0X65,0X20,0X66,0X6C,0X79,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X53,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X20,0X2D,0X20,0X49,0X66,0X20,0X64,0X69,0X73,0X61,0X62,0X6C,0X65,0X64,0X2C,0X20,0X61,0X74,0X74,0X61,0X63,0X68,0X6D,0X65,0X6E,0X74,0X73,0X20,0X61,0X72,0X65,0X20,0X6C,0X69,0X6E,0X6B,0X73,0X20,0X69,0X6E,0X73,0X74,0X65,0X61,0X64,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X67,0X72,0X65,0X65,0X6E,0X74,0X65,0X78,0X74,0X73,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X67,0X72,0X65,0X65,0X6E,0X74,0X65,0X78,0X74,0X73,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X67,0X72,0X65,0X65,0X6E,0X74,0X65,0X78,0X74,0X73,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X67,0X72,0X65,0X65,0X6E,0X74,0X65,0X78,0X74,0X73,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X64,0X6F,0X70,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X64,0X6F,0X70,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X64,0X6F,0X70,0X65,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X64,0X6F,0X70,0X61,0X6D,0X65,0X6D,0X65,0X20,0X6E,0X75,0X6D,0X62,0X65,0X72,0X73,0X20,0X2D,0X20,0X4C,0X69,0X6B,0X65,0X73,0X2C,0X20,0X63,0X6F,0X6D,0X6D,0X65,0X6E,0X74,0X73,0X2C,0X20,0X61,0X6E,0X64,0X20,0X62,0X6F,0X6F,0X73,0X74,0X20,0X63,0X6F,0X75,0X6E,0X74,0X73,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X6F,0X6E,0X65,0X63,0X6C,0X69,0X63,0X6B,0X73,0X6F,0X66,0X74,0X77,0X61,0X72,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X6F,0X6E,0X65,0X63,0X6C,0X69,0X63,0X6B,0X73,0X6F,0X66,0X74,0X77,0X61,0X72,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X6F,0X6E,0X65,0X63,0X6C,0X69,0X63,0X6B,0X73,0X6F,0X66,0X74,0X77,0X61,0X72,0X65,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X4C,0X69,0X6B,0X65,0X2D,0X42,0X6F,0X6F,0X73,0X74,0X20,0X62,0X75,0X74,0X74,0X6F,0X6E,0X20,0X2D,0X20,0X53,0X68,0X6F,0X77,0X20,0X61,0X20,0X62,0X75,0X74,0X74,0X6F,0X6E,0X20,0X69,0X6E,0X20,0X74,0X68,0X65,0X20,0X73,0X74,0X61,0X74,0X75,0X73,0X20,0X77,0X68,0X69,0X63,0X68,0X20,0X6C,0X69,0X6B,0X65,0X73,0X20,0X61,0X6E,0X64,0X20,0X62,0X6F,0X6F,0X73,0X74,0X73,0X20,0X61,0X20,0X70,0X6F,0X73,0X74,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X65,0X6D,0X6F,0X6A,0X6F,0X6C,0X69,0X6B,0X65,0X73,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X65,0X6D,0X6F,0X6A,0X6F,0X6C,0X69,0X6B,0X65,0X73,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X65,0X6D,0X6F,0X6A,0X6F,0X6C,0X69,0X6B,0X65,0X73,0X22,0X3E,0X43,0X6F,0X6E,0X76,0X65,0X72,0X74,0X20,0X45,0X6D,0X6F,0X6A,0X69,0X20,0X72,0X65,0X61,0X63,0X74,0X73,0X20,0X74,0X6F,0X20,0X6C,0X69,0X6B,0X65,0X73,0X20,0X2D,0X20,0X41,0X6C,0X73,0X6F,0X20,0X64,0X69,0X73,0X61,0X62,0X6C,0X65,0X73,0X20,0X74,0X68,0X65,0X20,0X65,0X6D,0X6F,0X6A,0X69,0X20,0X72,0X65,0X61,0X63,0X74,0X69,0X6F,0X6E,0X20,0X62,0X75,0X74,0X74,0X6F,0X6E,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X68,0X69,0X64,0X65,0X6D,0X75,0X74,0X65,0X64,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X74,0X68,0X69,0X64,0X65,0X6D,0X75,0X74,0X65,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X73,0X74,0X61,0X74,0X68,0X69,0X64,0X65,0X6D,0X75,0X74,0X65,0X64,0X22,0X3E,0X48,0X69,0X64,0X65,0X20,0X73,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X20,0X66,0X72,0X6F,0X6D,0X20,0X6D,0X75,0X74,0X65,0X64,0X20,0X75,0X73,0X65,0X72,0X73,0X20,0X61,0X6E,0X64,0X20,0X74,0X68,0X72,0X65,0X61,0X64,0X73,0X20,0X2D,0X20,0X49,0X66,0X20,0X64,0X69,0X73,0X61,0X62,0X6C,0X65,0X64,0X2C,0X20,0X73,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X20,0X77,0X69,0X6C,0X6C,0X20,0X61,0X70,0X70,0X65,0X61,0X72,0X20,0X63,0X6F,0X6C,0X6C,0X61,0X70,0X73,0X65,0X64,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X49,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X73,0X68,0X6F,0X77,0X73,0X68,0X6F,0X75,0X74,0X62,0X6F,0X78,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X73,0X68,0X6F,0X77,0X73,0X68,0X6F,0X75,0X74,0X62,0X6F,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X73,0X68,0X6F,0X77,0X73,0X68,0X6F,0X75,0X74,0X62,0X6F,0X78,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X20,0X73,0X68,0X6F,0X75,0X74,0X62,0X6F,0X78,0X20,0X28,0X4A,0X53,0X20,0X72,0X65,0X71,0X75,0X69,0X72,0X65,0X64,0X29,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X70,0X61,0X6E,0X65,0X6C,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X70,0X61,0X6E,0X65,0X6C,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X70,0X61,0X6E,0X65,0X6C,0X22,0X3E,0X53,0X68,0X6F,0X77,0X20,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X20,0X70,0X61,0X6E,0X65,0X6C,0X20,0X2D,0X20,0X3C,0X65,0X6D,0X3E,0X41,0X64,0X6D,0X69,0X6E,0X73,0X20,0X73,0X68,0X6F,0X75,0X6C,0X64,0X20,0X3C,0X73,0X74,0X72,0X6F,0X6E,0X67,0X3E,0X6E,0X6F,0X74,0X3C,0X2F,0X73,0X74,0X72,0X6F,0X6E,0X67,0X3E,0X20,0X75,0X73,0X65,0X20,0X74,0X68,0X65,0X20,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X20,0X70,0X61,0X6E,0X65,0X6C,0X20,0X66,0X6F,0X72,0X20,0X6D,0X61,0X6A,0X6F,0X72,0X20,0X61,0X6E,0X6E,0X6F,0X75,0X6E,0X63,0X65,0X6D,0X65,0X6E,0X74,0X73,0X3C,0X2F,0X65,0X6D,0X3E,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X68,0X33,0X3E,0X4E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X3C,0X2F,0X68,0X33,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X63,0X68,0X65,0X63,0X6B,0X62,0X6F,0X78,0X22,0X20,0X69,0X64,0X3D,0X22,0X63,0X66,0X67,0X6E,0X6F,0X74,0X69,0X66,0X65,0X6D,0X62,0X65,0X64,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X65,0X6D,0X62,0X65,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X31,0X22,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X63,0X66,0X67,0X6E,0X6F,0X74,0X69,0X66,0X65,0X6D,0X62,0X65,0X64,0X22,0X3E,0X44,0X69,0X73,0X70,0X6C,0X61,0X79,0X20,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X20,0X69,0X6E,0X20,0X69,0X46,0X72,0X61,0X6D,0X65,0X20,0X2D,0X20,0X69,0X46,0X72,0X61,0X6D,0X65,0X73,0X20,0X73,0X65,0X70,0X61,0X72,0X61,0X74,0X65,0X20,0X6C,0X6F,0X61,0X64,0X69,0X6E,0X67,0X20,0X66,0X72,0X6F,0X6D,0X20,0X74,0X68,0X65,0X20,0X6D,0X61,0X69,0X6E,0X20,0X70,0X61,0X67,0X65,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X73,0X69,0X6E,0X67,0X6C,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X53,0X61,0X76,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct config_general_template {const char* js_on;
+const char* jsactions_on;
+const char* jsreply_on;
+const char* jslive_on;
+const char* status_attachments_on;
+const char* status_greentexts_on;
+const char* status_dopameme_on;
+const char* status_oneclicksoftware_on;
+const char* status_emojo_likes_on;
+const char* status_hide_muted_on;
+const char* instance_show_shoutbox_on;
+const char* instance_panel_on;
+const char* notifications_embed_on;
+};
+char* tmpl_gen_config_general(struct config_general_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_config_general, data->js_on?data->js_on:"", data->jsactions_on?data->jsactions_on:"", data->jsreply_on?data->jsreply_on:"", data->jslive_on?data->jslive_on:"", data->status_attachments_on?data->status_attachments_on:"", data->status_greentexts_on?data->status_greentexts_on:"", data->status_dopameme_on?data->status_dopameme_on:"", data->status_oneclicksoftware_on?data->status_oneclicksoftware_on:"", data->status_emojo_likes_on?data->status_emojo_likes_on:"", data->status_hide_muted_on?data->status_hide_muted_on:"", data->instance_show_shoutbox_on?data->instance_show_shoutbox_on:"", data->instance_panel_on?data->instance_panel_on:"", data->notifications_embed_on?data->notifications_embed_on:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/config_sidebar.ctmpl b/static/config_sidebar.ctmpl
new file mode 100644
index 0000000..305b8cb
--- /dev/null
+++ b/static/config_sidebar.ctmpl
@@ -0,0 +1,17 @@
+#ifndef __config_sidebar
+#define __config_sidebar
+static const char data_config_sidebar[] = {0X3C,0X75,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X2D,0X63,0X6F,0X6E,0X66,0X69,0X67,0X22,0X3E,0XA,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X2D,0X73,0X75,0X62,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X63,0X6F,0X6E,0X66,0X69,0X67,0X2F,0X67,0X65,0X6E,0X65,0X72,0X61,0X6C,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X2D,0X73,0X75,0X62,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X63,0X6F,0X6E,0X66,0X69,0X67,0X2F,0X61,0X70,0X70,0X65,0X61,0X72,0X61,0X6E,0X63,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X2D,0X73,0X75,0X62,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X63,0X6F,0X6E,0X66,0X69,0X67,0X2F,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X3C,0X2F,0X75,0X6C,0X3E,0};
+struct config_sidebar_template {const char* general_active;
+const char* general;
+const char* appearance_active;
+const char* appearance;
+const char* account_active;
+const char* account;
+};
+char* tmpl_gen_config_sidebar(struct config_sidebar_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_config_sidebar, data->general_active?data->general_active:"", data->general?data->general:"", data->appearance_active?data->appearance_active:"", data->appearance?data->appearance:"", data->account_active?data->account_active:"", data->account?data->account:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/config_sidebar.tmpl b/static/config_sidebar.tmpl
new file mode 100644
index 0000000..51e3646
--- /dev/null
+++ b/static/config_sidebar.tmpl
@@ -0,0 +1,5 @@
+
diff --git a/static/emoji.ctmpl b/static/emoji.ctmpl
new file mode 100644
index 0000000..5375431
--- /dev/null
+++ b/static/emoji.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __emoji
+#define __emoji
+static const char data_emoji[] = {0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X72,0X65,0X61,0X63,0X74,0X2F,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0};
+struct emoji_template {const char* status_id;
+const char* emoji;
+};
+char* tmpl_gen_emoji(struct emoji_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_emoji, data->status_id?data->status_id:"", data->emoji?data->emoji:"", data->emoji?data->emoji:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/emoji.tmpl b/static/emoji.tmpl
new file mode 100644
index 0000000..67b6917
--- /dev/null
+++ b/static/emoji.tmpl
@@ -0,0 +1 @@
+{{%s:emoji}}
diff --git a/static/emoji_picker.ctmpl b/static/emoji_picker.ctmpl
new file mode 100644
index 0000000..0b3ebbd
--- /dev/null
+++ b/static/emoji_picker.ctmpl
@@ -0,0 +1,31 @@
+#ifndef __emoji_picker
+#define __emoji_picker
+static const char data_emoji_picker[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X70,0X69,0X63,0X6B,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X73,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X30,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X98,0X83,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X90,0XBB,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X8D,0X94,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X9A,0X80,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XE2,0X9A,0XBD,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X94,0XA7,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X94,0XA2,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0XF0,0X9F,0X8E,0X8C,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0XA,0X20,0X20,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X70,0X69,0X63,0X6B,0X65,0X72,0X2D,0X65,0X6D,0X6F,0X6A,0X6F,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X69,0X67,0X61,0X74,0X69,0X6F,0X6E,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X70,0X72,0X65,0X76,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X2D,0X25,0X73,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X75,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X3E,0X50,0X72,0X65,0X76,0X69,0X6F,0X75,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X6E,0X65,0X78,0X74,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X23,0X69,0X64,0X2D,0X25,0X73,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X6F,0X69,0X6E,0X64,0X65,0X78,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X75,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X62,0X74,0X6E,0X22,0X3E,0X4E,0X65,0X78,0X74,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct emoji_picker_template {const char* cat_smileys;
+int animals;
+const char* cat_animals;
+int food;
+const char* cat_food;
+int travel;
+const char* cat_travel;
+int activities;
+const char* cat_activities;
+int objects;
+const char* cat_objects;
+int symbols;
+const char* cat_symbols;
+int flags;
+const char* cat_flags;
+const char* emojis;
+const char* status_id;
+unsigned index_previous;
+const char* previous_enabled;
+unsigned index_next;
+};
+char* tmpl_gen_emoji_picker(struct emoji_picker_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_emoji_picker, data->cat_smileys?data->cat_smileys:"", data->animals, data->cat_animals?data->cat_animals:"", data->food, data->cat_food?data->cat_food:"", data->travel, data->cat_travel?data->cat_travel:"", data->activities, data->cat_activities?data->cat_activities:"", data->objects, data->cat_objects?data->cat_objects:"", data->symbols, data->cat_symbols?data->cat_symbols:"", data->flags, data->cat_flags?data->cat_flags:"", data->emojis?data->emojis:"", data->status_id?data->status_id:"", data->index_previous, data->previous_enabled?data->previous_enabled:"", data->status_id?data->status_id:"", data->index_next);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/emoji_reaction.ctmpl b/static/emoji_reaction.ctmpl
new file mode 100644
index 0000000..25a9d95
--- /dev/null
+++ b/static/emoji_reaction.ctmpl
@@ -0,0 +1,16 @@
+#ifndef __emoji_reaction
+#define __emoji_reaction
+static const char data_emoji_reaction[] = {0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X72,0X65,0X61,0X63,0X74,0X2F,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X72,0X65,0X61,0X63,0X74,0X2D,0X62,0X6F,0X78,0X20,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X2D,0X61,0X6C,0X74,0X20,0X25,0X73,0X22,0X3E,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X6E,0X75,0X6D,0X22,0X3E,0X25,0X75,0X3C,0X73,0X70,0X61,0X6E,0X3E,0X3C,0X2F,0X61,0X3E,0};
+struct emoji_reaction_template {const char* prefix;
+const char* status_id;
+const char* emoji;
+const char* emoji_active;
+unsigned emoji_count;
+};
+char* tmpl_gen_emoji_reaction(struct emoji_reaction_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_emoji_reaction, data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->emoji?data->emoji:"", data->emoji_active?data->emoji_active:"", data->emoji?data->emoji:"", data->emoji_count);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/emoji_reactions.ctmpl b/static/emoji_reactions.ctmpl
new file mode 100644
index 0000000..b0907a2
--- /dev/null
+++ b/static/emoji_reactions.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __emoji_reactions
+#define __emoji_reactions
+static const char data_emoji_reactions[] = {0X3C,0X75,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X72,0X65,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X75,0X6C,0X3E,0};
+struct emoji_reactions_template {const char* emojis;
+};
+char* tmpl_gen_emoji_reactions(struct emoji_reactions_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_emoji_reactions, data->emojis?data->emojis:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/emoji_reactions.tmpl b/static/emoji_reactions.tmpl
new file mode 100644
index 0000000..0c78115
--- /dev/null
+++ b/static/emoji_reactions.tmpl
@@ -0,0 +1,3 @@
+
diff --git a/static/error.ctmpl b/static/error.ctmpl
new file mode 100644
index 0000000..647eeda
--- /dev/null
+++ b/static/error.ctmpl
@@ -0,0 +1,14 @@
+#ifndef __error
+#define __error
+static const char data_error[] = {0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X2D,0X25,0X73,0X20,0X25,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0};
+struct error_template {const char* err_type;
+const char* is_padded;
+const char* error;
+};
+char* tmpl_gen_error(struct error_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_error, data->err_type?data->err_type:"", data->is_padded?data->is_padded:"", data->error?data->error:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/error.tmpl b/static/error.tmpl
new file mode 100644
index 0000000..37ee540
--- /dev/null
+++ b/static/error.tmpl
@@ -0,0 +1 @@
+{{%s:error}}
diff --git a/static/error_404.ctmpl b/static/error_404.ctmpl
new file mode 100644
index 0000000..8e198ad
--- /dev/null
+++ b/static/error_404.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __error_404
+#define __error_404
+static const char data_error_404[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X34,0X30,0X34,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X20,0X20,0X3C,0X70,0X3E,0X25,0X73,0X3C,0X2F,0X70,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct error_404_template {const char* error;
+};
+char* tmpl_gen_error_404(struct error_404_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_error_404, data->error?data->error:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/error_404.tmpl b/static/error_404.tmpl
new file mode 100644
index 0000000..6291b6b
--- /dev/null
+++ b/static/error_404.tmpl
@@ -0,0 +1,4 @@
+
diff --git a/static/favourites_page.ctmpl b/static/favourites_page.ctmpl
new file mode 100644
index 0000000..f18eeca
--- /dev/null
+++ b/static/favourites_page.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __favourites_page
+#define __favourites_page
+static const char data_favourites_page[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X46,0X61,0X76,0X6F,0X72,0X69,0X74,0X65,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X61,0X76,0X6F,0X75,0X72,0X69,0X74,0X65,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X25,0X73,0};
+struct favourites_page_template {const char* statuses;
+const char* navigation;
+};
+char* tmpl_gen_favourites_page(struct favourites_page_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_favourites_page, data->statuses?data->statuses:"", data->navigation?data->navigation:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/favourites_page.tmpl b/static/favourites_page.tmpl
new file mode 100644
index 0000000..60de2ff
--- /dev/null
+++ b/static/favourites_page.tmpl
@@ -0,0 +1,7 @@
+
+
Favorites
+
+
+ {{%s:statuses}}
+
+{{%s:navigation}}
diff --git a/static/follow_svg.ctmpl b/static/follow_svg.ctmpl
new file mode 100644
index 0000000..9b84add
--- /dev/null
+++ b/static/follow_svg.ctmpl
@@ -0,0 +1,5 @@
+#ifndef __follow_svg
+#define __follow_svg
+static const char data_follow_svg[] = {0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X6C,0X6C,0X6F,0X77,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X31,0X36,0X20,0X32,0X31,0X76,0X2D,0X32,0X61,0X34,0X20,0X34,0X20,0X30,0X20,0X30,0X20,0X30,0X2D,0X34,0X2D,0X34,0X48,0X35,0X61,0X34,0X20,0X34,0X20,0X30,0X20,0X30,0X20,0X30,0X2D,0X34,0X20,0X34,0X76,0X32,0X22,0X3E,0X3C,0X2F,0X70,0X61,0X74,0X68,0X3E,0X3C,0X63,0X69,0X72,0X63,0X6C,0X65,0X20,0X63,0X78,0X3D,0X22,0X38,0X2E,0X35,0X22,0X20,0X63,0X79,0X3D,0X22,0X37,0X22,0X20,0X72,0X3D,0X22,0X34,0X22,0X3E,0X3C,0X2F,0X63,0X69,0X72,0X63,0X6C,0X65,0X3E,0X3C,0X6C,0X69,0X6E,0X65,0X20,0X78,0X31,0X3D,0X22,0X32,0X30,0X22,0X20,0X79,0X31,0X3D,0X22,0X38,0X22,0X20,0X78,0X32,0X3D,0X22,0X32,0X30,0X22,0X20,0X79,0X32,0X3D,0X22,0X31,0X34,0X22,0X3E,0X3C,0X2F,0X6C,0X69,0X6E,0X65,0X3E,0X3C,0X6C,0X69,0X6E,0X65,0X20,0X78,0X31,0X3D,0X22,0X32,0X33,0X22,0X20,0X79,0X31,0X3D,0X22,0X31,0X31,0X22,0X20,0X78,0X32,0X3D,0X22,0X31,0X37,0X22,0X20,0X79,0X32,0X3D,0X22,0X31,0X31,0X22,0X3E,0X3C,0X2F,0X6C,0X69,0X6E,0X65,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0};
+
+#endif
diff --git a/static/follow_svg.tmpl b/static/follow_svg.tmpl
new file mode 100644
index 0000000..1c4063b
--- /dev/null
+++ b/static/follow_svg.tmpl
@@ -0,0 +1 @@
+
diff --git a/static/hashtag.ctmpl b/static/hashtag.ctmpl
new file mode 100644
index 0000000..7d6bed0
--- /dev/null
+++ b/static/hashtag.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __hashtag
+#define __hashtag
+static const char data_hashtag[] = {0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X74,0X61,0X67,0X2F,0X25,0X73,0X22,0X20,0X73,0X74,0X79,0X6C,0X65,0X3D,0X22,0X66,0X6F,0X6E,0X74,0X2D,0X73,0X69,0X7A,0X65,0X3A,0X20,0X25,0X75,0X70,0X78,0X3B,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X61,0X73,0X68,0X74,0X61,0X67,0X2D,0X69,0X74,0X65,0X6D,0X22,0X3E,0X23,0X25,0X73,0X3C,0X2F,0X61,0X3E,0};
+struct hashtag_template {const char* prefix;
+const char* tag;
+};
+char* tmpl_gen_hashtag(struct hashtag_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_hashtag, data->prefix?data->prefix:"", data->tag?data->tag:"", data->tag?data->tag:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/hashtag.tmpl b/static/hashtag.tmpl
new file mode 100644
index 0000000..d551a32
--- /dev/null
+++ b/static/hashtag.tmpl
@@ -0,0 +1 @@
+#{{%s:tag}}
diff --git a/static/hashtag_page.ctmpl b/static/hashtag_page.ctmpl
new file mode 100644
index 0000000..d19664e
--- /dev/null
+++ b/static/hashtag_page.ctmpl
@@ -0,0 +1,15 @@
+#ifndef __hashtag_page
+#define __hashtag_page
+static const char data_hashtag_page[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X48,0X61,0X73,0X68,0X74,0X61,0X67,0X20,0X2D,0X20,0X23,0X25,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X25,0X73,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X61,0X73,0X68,0X74,0X61,0X67,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X25,0X73,0};
+struct hashtag_page_template {const char* tag;
+const char* tag_statistics;
+const char* statuses;
+const char* navigation;
+};
+char* tmpl_gen_hashtag_page(struct hashtag_page_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_hashtag_page, data->tag?data->tag:"", data->tag_statistics?data->tag_statistics:"", data->statuses?data->statuses:"", data->navigation?data->navigation:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/hashtag_page.tmpl b/static/hashtag_page.tmpl
new file mode 100644
index 0000000..c4762da
--- /dev/null
+++ b/static/hashtag_page.tmpl
@@ -0,0 +1,8 @@
+
+
Hashtag - #{{%s:tag}}
+
+{{%s:tag_statistics}}
+
+ {{%s:statuses}}
+
+{{%s:navigation}}
diff --git a/static/in_reply_to.ctmpl b/static/in_reply_to.ctmpl
new file mode 100644
index 0000000..4bb2a95
--- /dev/null
+++ b/static/in_reply_to.ctmpl
@@ -0,0 +1,15 @@
+#ifndef __in_reply_to
+#define __in_reply_to
+static const char data_in_reply_to[] = {0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X2D,0X72,0X65,0X70,0X6C,0X79,0X2D,0X74,0X6F,0X22,0X3E,0XA,0X20,0X20,0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X2D,0X72,0X65,0X70,0X6C,0X79,0X2D,0X74,0X6F,0X2D,0X69,0X63,0X6F,0X6E,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X31,0X34,0X20,0X39,0X6C,0X36,0X20,0X36,0X2D,0X36,0X20,0X36,0X22,0X2F,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X34,0X20,0X34,0X76,0X37,0X61,0X34,0X20,0X34,0X20,0X30,0X20,0X30,0X20,0X30,0X20,0X34,0X20,0X34,0X68,0X31,0X31,0X22,0X2F,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0X20,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X2D,0X72,0X65,0X70,0X6C,0X79,0X2D,0X74,0X6F,0X2D,0X69,0X64,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X23,0X25,0X73,0X22,0X3E,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X2D,0X72,0X65,0X70,0X6C,0X79,0X2D,0X74,0X6F,0X2D,0X74,0X65,0X78,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X63,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0};
+struct in_reply_to_template {const char* prefix;
+const char* status_id;
+const char* in_reply_to_text;
+const char* acct;
+};
+char* tmpl_gen_in_reply_to(struct in_reply_to_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_in_reply_to, data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->in_reply_to_text?data->in_reply_to_text:"", data->acct?data->acct:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/in_reply_to.tmpl b/static/in_reply_to.tmpl
new file mode 100644
index 0000000..0b75e40
--- /dev/null
+++ b/static/in_reply_to.tmpl
@@ -0,0 +1,3 @@
+
+ {{%s:in_reply_to_text}} {{%s:acct}}
+
diff --git a/static/index.ctmpl b/static/index.ctmpl
new file mode 100644
index 0000000..5adebe5
--- /dev/null
+++ b/static/index.ctmpl
@@ -0,0 +1,42 @@
+#ifndef __index
+#define __index
+static const char data_index[] = {0X3C,0X21,0X44,0X4F,0X43,0X54,0X59,0X50,0X45,0X20,0X68,0X74,0X6D,0X6C,0X3E,0XA,0X3C,0X68,0X74,0X6D,0X6C,0X3E,0XA,0X20,0X20,0X3C,0X68,0X65,0X61,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6D,0X65,0X74,0X61,0X20,0X63,0X68,0X61,0X72,0X73,0X65,0X74,0X3D,0X22,0X75,0X74,0X66,0X2D,0X38,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X69,0X74,0X6C,0X65,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X69,0X74,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X6E,0X6B,0X20,0X72,0X65,0X6C,0X3D,0X22,0X69,0X63,0X6F,0X6E,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X69,0X6D,0X61,0X67,0X65,0X2F,0X70,0X6E,0X67,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X2F,0X66,0X61,0X76,0X69,0X63,0X6F,0X6E,0X2E,0X70,0X6E,0X67,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X6E,0X6B,0X20,0X72,0X65,0X6C,0X3D,0X22,0X73,0X74,0X79,0X6C,0X65,0X73,0X68,0X65,0X65,0X74,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X2F,0X63,0X73,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X2F,0X25,0X73,0X25,0X73,0X2E,0X63,0X73,0X73,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X68,0X65,0X61,0X64,0X3E,0XA,0X20,0X20,0X3C,0X62,0X6F,0X64,0X79,0X20,0X25,0X73,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X3E,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X69,0X64,0X3D,0X22,0X6D,0X61,0X69,0X6E,0X2D,0X70,0X61,0X67,0X65,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X69,0X64,0X3D,0X22,0X6D,0X61,0X69,0X6E,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X68,0X65,0X61,0X64,0X65,0X72,0X20,0X69,0X64,0X3D,0X22,0X6E,0X61,0X76,0X62,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X22,0X3E,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X2F,0X74,0X72,0X65,0X65,0X62,0X69,0X72,0X64,0X5F,0X6C,0X6F,0X67,0X6F,0X2E,0X70,0X6E,0X67,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X34,0X32,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X66,0X6F,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X69,0X64,0X3D,0X22,0X6E,0X61,0X76,0X62,0X61,0X72,0X2D,0X72,0X69,0X67,0X68,0X74,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X69,0X64,0X3D,0X22,0X6E,0X61,0X76,0X62,0X61,0X72,0X2D,0X72,0X69,0X67,0X68,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X53,0X65,0X61,0X72,0X63,0X68,0X62,0X6F,0X78,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X65,0X61,0X72,0X63,0X68,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X67,0X65,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X62,0X6F,0X78,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X67,0X72,0X6F,0X75,0X70,0X20,0X67,0X72,0X6F,0X75,0X70,0X2D,0X6C,0X65,0X66,0X74,0X20,0X67,0X72,0X6F,0X75,0X70,0X2D,0X69,0X6E,0X70,0X75,0X74,0X62,0X6F,0X78,0X22,0X20,0X70,0X6C,0X61,0X63,0X65,0X68,0X6F,0X6C,0X64,0X65,0X72,0X3D,0X22,0X25,0X73,0X22,0X20,0X69,0X64,0X3D,0X22,0X73,0X65,0X61,0X72,0X63,0X68,0X62,0X6F,0X78,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X71,0X22,0X3E,0X3C,0X21,0X2D,0X2D,0X20,0X69,0X20,0X68,0X61,0X74,0X65,0X20,0X48,0X54,0X4D,0X4C,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X2D,0X2D,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X67,0X72,0X6F,0X75,0X70,0X20,0X67,0X72,0X6F,0X75,0X70,0X2D,0X72,0X69,0X67,0X68,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X68,0X65,0X61,0X64,0X65,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X69,0X64,0X3D,0X22,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X4E,0X61,0X76,0X69,0X67,0X61,0X74,0X69,0X6F,0X6E,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X69,0X64,0X3D,0X22,0X6C,0X65,0X66,0X74,0X62,0X61,0X72,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X6F,0X63,0X61,0X6C,0X2F,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X66,0X65,0X64,0X65,0X72,0X61,0X74,0X65,0X64,0X2F,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X69,0X73,0X74,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X66,0X61,0X76,0X6F,0X75,0X72,0X69,0X74,0X65,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X62,0X6F,0X6F,0X6B,0X6D,0X61,0X72,0X6B,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X64,0X69,0X72,0X65,0X63,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X63,0X6F,0X6E,0X66,0X69,0X67,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X44,0X69,0X73,0X70,0X6C,0X61,0X79,0X20,0X66,0X6F,0X72,0X20,0X70,0X6F,0X73,0X74,0X73,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X69,0X64,0X3D,0X22,0X6D,0X61,0X69,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X4E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X20,0X61,0X6E,0X64,0X20,0X73,0X75,0X63,0X68,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X69,0X64,0X3D,0X22,0X72,0X69,0X67,0X68,0X74,0X62,0X61,0X72,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X53,0X6F,0X75,0X72,0X63,0X65,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X63,0X72,0X69,0X70,0X74,0X20,0X73,0X72,0X63,0X3D,0X22,0X2F,0X6A,0X73,0X2F,0X6D,0X61,0X69,0X6E,0X2E,0X6A,0X73,0X22,0X3E,0X3C,0X2F,0X73,0X63,0X72,0X69,0X70,0X74,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X62,0X6F,0X64,0X79,0X3E,0XA,0X3C,0X2F,0X68,0X74,0X6D,0X6C,0X3E,0};
+struct index_template {const char* title;
+const char* theme;
+const char* theme_clr;
+const char* background_url;
+const char* prefix;
+const char* name;
+const char* sidebar_cnt;
+const char* placeholder;
+const char* search_btn;
+const char* active_home;
+const char* home;
+const char* active_local;
+const char* local;
+const char* active_federated;
+const char* federated;
+const char* active_notifications;
+const char* notifications;
+const char* active_lists;
+const char* lists;
+const char* active_favourites;
+const char* favourites;
+const char* active_bookmarks;
+const char* bookmarks;
+const char* active_direct;
+const char* direct;
+const char* active_config;
+const char* config;
+const char* sidebar_leftbar;
+const char* instance_panel;
+const char* main;
+const char* sidebar_rightbar;
+};
+char* tmpl_gen_index(struct index_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_index, data->title?data->title:"", data->theme?data->theme:"", data->theme_clr?data->theme_clr:"", data->background_url?data->background_url:"", data->prefix?data->prefix:"", data->name?data->name:"", data->sidebar_cnt?data->sidebar_cnt:"", data->prefix?data->prefix:"", data->placeholder?data->placeholder:"", data->search_btn?data->search_btn:"", data->active_home?data->active_home:"", data->prefix?data->prefix:"", data->home?data->home:"", data->active_local?data->active_local:"", data->prefix?data->prefix:"", data->local?data->local:"", data->active_federated?data->active_federated:"", data->prefix?data->prefix:"", data->federated?data->federated:"", data->active_notifications?data->active_notifications:"", data->prefix?data->prefix:"", data->notifications?data->notifications:"", data->active_lists?data->active_lists:"", data->prefix?data->prefix:"", data->lists?data->lists:"", data->active_favourites?data->active_favourites:"", data->prefix?data->prefix:"", data->favourites?data->favourites:"", data->active_bookmarks?data->active_bookmarks:"", data->prefix?data->prefix:"", data->bookmarks?data->bookmarks:"", data->active_direct?data->active_direct:"", data->prefix?data->prefix:"", data->direct?data->direct:"", data->active_config?data->active_config:"", data->prefix?data->prefix:"", data->config?data->config:"", data->sidebar_leftbar?data->sidebar_leftbar:"", data->instance_panel?data->instance_panel:"", data->main?data->main:"", data->sidebar_rightbar?data->sidebar_rightbar:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/index.tmpl b/static/index.tmpl
new file mode 100644
index 0000000..cf730da
--- /dev/null
+++ b/static/index.tmpl
@@ -0,0 +1,63 @@
+
+
+
+
+ {{ %s : title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ %s : main }}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/instance.ctmpl b/static/instance.ctmpl
new file mode 100644
index 0000000..cacea32
--- /dev/null
+++ b/static/instance.ctmpl
@@ -0,0 +1,5 @@
+#ifndef __instance
+#define __instance
+static const char data_instance[] = {0X49,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X20,0X69,0X6E,0X66,0X6F,0X72,0X6D,0X61,0X74,0X69,0X6F,0X6E,0};
+
+#endif
diff --git a/static/interaction_buttons.ctmpl b/static/interaction_buttons.ctmpl
index 19aa509..82980f3 100644
--- a/static/interaction_buttons.ctmpl
+++ b/static/interaction_buttons.ctmpl
@@ -8,7 +8,7 @@ const char* unrepeat;
const char* repeat_active;
const char* repeats_count;
const char* repeat_text;
-const char* favourite;
+const char* unfavourite;
const char* favourite_active;
const char* favourites_count;
const char* favourites_text;
@@ -18,7 +18,7 @@ const char* rel_time;
};
char* tmpl_gen_interaction_buttons(struct interaction_buttons_template* data, unsigned* size){
char* ret;
-unsigned s = easprintf(&ret, data_interaction_buttons, data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->reply_count?data->reply_count:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unrepeat?data->unrepeat:"", data->repeat_active?data->repeat_active:"", data->repeats_count?data->repeats_count:"", data->repeat_text?data->repeat_text:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->favourite?data->favourite:"", data->favourite_active?data->favourite_active:"", data->favourites_count?data->favourites_count:"", data->favourites_text?data->favourites_text:"", data->likeboost_btn?data->likeboost_btn:"", data->reactions_btn?data->reactions_btn:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->rel_time?data->rel_time:"");
+unsigned s = easprintf(&ret, data_interaction_buttons, data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->reply_count?data->reply_count:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unrepeat?data->unrepeat:"", data->repeat_active?data->repeat_active:"", data->repeats_count?data->repeats_count:"", data->repeat_text?data->repeat_text:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unfavourite?data->unfavourite:"", data->favourite_active?data->favourite_active:"", data->favourites_count?data->favourites_count:"", data->favourites_text?data->favourites_text:"", data->likeboost_btn?data->likeboost_btn:"", data->reactions_btn?data->reactions_btn:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->rel_time?data->rel_time:"");
if (size) *size = s;
return ret;
}
diff --git a/static/like_svg.ctmpl b/static/like_svg.ctmpl
new file mode 100644
index 0000000..6fc89d4
--- /dev/null
+++ b/static/like_svg.ctmpl
@@ -0,0 +1,5 @@
+#ifndef __like_svg
+#define __like_svg
+static const char data_like_svg[] = {0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X69,0X6B,0X65,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X3E,0X3C,0X70,0X6F,0X6C,0X79,0X67,0X6F,0X6E,0X20,0X70,0X6F,0X69,0X6E,0X74,0X73,0X3D,0X22,0X31,0X32,0X20,0X32,0X20,0X31,0X35,0X2E,0X30,0X39,0X20,0X38,0X2E,0X32,0X36,0X20,0X32,0X32,0X20,0X39,0X2E,0X32,0X37,0X20,0X31,0X37,0X20,0X31,0X34,0X2E,0X31,0X34,0X20,0X31,0X38,0X2E,0X31,0X38,0X20,0X32,0X31,0X2E,0X30,0X32,0X20,0X31,0X32,0X20,0X31,0X37,0X2E,0X37,0X37,0X20,0X35,0X2E,0X38,0X32,0X20,0X32,0X31,0X2E,0X30,0X32,0X20,0X37,0X20,0X31,0X34,0X2E,0X31,0X34,0X20,0X32,0X20,0X39,0X2E,0X32,0X37,0X20,0X38,0X2E,0X39,0X31,0X20,0X38,0X2E,0X32,0X36,0X20,0X31,0X32,0X20,0X32,0X22,0X3E,0X3C,0X2F,0X70,0X6F,0X6C,0X79,0X67,0X6F,0X6E,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0};
+
+#endif
diff --git a/static/like_svg.tmpl b/static/like_svg.tmpl
new file mode 100644
index 0000000..3b6527c
--- /dev/null
+++ b/static/like_svg.tmpl
@@ -0,0 +1 @@
+
diff --git a/static/likeboost.ctmpl b/static/likeboost.ctmpl
new file mode 100644
index 0000000..1714867
--- /dev/null
+++ b/static/likeboost.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __likeboost
+#define __likeboost
+static const char data_likeboost[] = {0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X74,0X79,0X70,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X6C,0X69,0X6B,0X65,0X62,0X6F,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X20,0X73,0X74,0X61,0X74,0X62,0X74,0X6E,0X20,0X6C,0X69,0X6B,0X65,0X62,0X6F,0X6F,0X73,0X74,0X2D,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6F,0X6E,0X65,0X2D,0X63,0X6C,0X69,0X63,0X6B,0X2D,0X73,0X6F,0X66,0X74,0X77,0X61,0X72,0X65,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X76,0X65,0X72,0X73,0X69,0X6F,0X6E,0X3D,0X22,0X31,0X2E,0X31,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X3E,0X3C,0X67,0X3E,0X3C,0X67,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X31,0X2E,0X39,0X38,0X22,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X6D,0X31,0X39,0X2E,0X31,0X35,0X20,0X38,0X2E,0X35,0X30,0X36,0X31,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X2D,0X32,0X2E,0X37,0X35,0X39,0X38,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X22,0X2F,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X6D,0X31,0X34,0X2E,0X37,0X35,0X36,0X20,0X31,0X31,0X2E,0X33,0X32,0X35,0X73,0X32,0X2E,0X35,0X34,0X38,0X34,0X2D,0X30,0X2E,0X30,0X35,0X30,0X33,0X32,0X20,0X36,0X2E,0X33,0X32,0X35,0X38,0X20,0X30,0X2E,0X30,0X31,0X30,0X32,0X36,0X6D,0X2D,0X31,0X35,0X2E,0X36,0X33,0X39,0X20,0X31,0X30,0X2E,0X38,0X30,0X37,0X2D,0X32,0X2E,0X37,0X35,0X39,0X38,0X2D,0X32,0X2E,0X37,0X35,0X39,0X38,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X2D,0X32,0X2E,0X37,0X35,0X39,0X38,0X22,0X2F,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X6D,0X32,0X32,0X2E,0X34,0X20,0X31,0X35,0X2E,0X33,0X32,0X37,0X76,0X31,0X2E,0X32,0X32,0X35,0X39,0X63,0X30,0X20,0X31,0X2E,0X31,0X35,0X36,0X2D,0X31,0X2E,0X32,0X33,0X35,0X36,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X2D,0X32,0X2E,0X37,0X35,0X39,0X38,0X20,0X32,0X2E,0X37,0X35,0X39,0X38,0X68,0X2D,0X31,0X36,0X2E,0X36,0X36,0X34,0X22,0X2F,0X3E,0X3C,0X2F,0X67,0X3E,0X3C,0X70,0X6F,0X6C,0X79,0X67,0X6F,0X6E,0X20,0X74,0X72,0X61,0X6E,0X73,0X66,0X6F,0X72,0X6D,0X3D,0X22,0X6D,0X61,0X74,0X72,0X69,0X78,0X28,0X2E,0X36,0X30,0X37,0X33,0X36,0X20,0X30,0X20,0X30,0X20,0X2E,0X36,0X30,0X37,0X33,0X36,0X20,0X2E,0X36,0X30,0X31,0X30,0X36,0X20,0X2E,0X36,0X33,0X35,0X37,0X37,0X29,0X22,0X20,0X70,0X6F,0X69,0X6E,0X74,0X73,0X3D,0X22,0X31,0X38,0X2E,0X31,0X38,0X20,0X32,0X31,0X2E,0X30,0X32,0X20,0X31,0X32,0X20,0X31,0X37,0X2E,0X37,0X37,0X20,0X35,0X2E,0X38,0X32,0X20,0X32,0X31,0X2E,0X30,0X32,0X20,0X37,0X20,0X31,0X34,0X2E,0X31,0X34,0X20,0X32,0X20,0X39,0X2E,0X32,0X37,0X20,0X38,0X2E,0X39,0X31,0X20,0X38,0X2E,0X32,0X36,0X20,0X31,0X32,0X20,0X32,0X20,0X31,0X35,0X2E,0X30,0X39,0X20,0X38,0X2E,0X32,0X36,0X20,0X32,0X32,0X20,0X39,0X2E,0X32,0X37,0X20,0X31,0X37,0X20,0X31,0X34,0X2E,0X31,0X34,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X2E,0X39,0X36,0X35,0X36,0X22,0X2F,0X3E,0X3C,0X2F,0X67,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X4C,0X2B,0X52,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X74,0X64,0X3E,0};
+struct likeboost_template {const char* prefix;
+const char* status_id;
+};
+char* tmpl_gen_likeboost(struct likeboost_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_likeboost, data->prefix?data->prefix:"", data->status_id?data->status_id:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/list.ctmpl b/static/list.ctmpl
new file mode 100644
index 0000000..2e13d25
--- /dev/null
+++ b/static/list.ctmpl
@@ -0,0 +1,14 @@
+#ifndef __list
+#define __list
+static const char data_list[] = {0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X69,0X73,0X74,0X73,0X2F,0X66,0X6F,0X72,0X2F,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X73,0X70,0X6C,0X69,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0};
+struct list_template {const char* prefix;
+const char* list_id;
+const char* list;
+};
+char* tmpl_gen_list(struct list_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_list, data->prefix?data->prefix:"", data->list_id?data->list_id:"", data->list?data->list:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/list.tmpl b/static/list.tmpl
new file mode 100644
index 0000000..54517b2
--- /dev/null
+++ b/static/list.tmpl
@@ -0,0 +1 @@
+ {{%s:list}}
diff --git a/static/lists.ctmpl b/static/lists.ctmpl
new file mode 100644
index 0000000..10caffe
--- /dev/null
+++ b/static/lists.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __lists
+#define __lists
+static const char data_lists[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X69,0X73,0X74,0X73,0X2D,0X76,0X69,0X65,0X77,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X69,0X73,0X74,0X73,0X2D,0X76,0X69,0X65,0X77,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X4C,0X69,0X73,0X74,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X69,0X73,0X74,0X73,0X2D,0X76,0X69,0X65,0X77,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X61,0X72,0X67,0X65,0X2D,0X6C,0X69,0X73,0X74,0X20,0X63,0X65,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0XA,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6C,0X61,0X72,0X67,0X65,0X2D,0X6C,0X69,0X73,0X74,0X20,0X63,0X65,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X69,0X73,0X74,0X73,0X2F,0X63,0X72,0X65,0X61,0X74,0X65,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X73,0X70,0X6C,0X69,0X74,0X20,0X63,0X65,0X6E,0X74,0X65,0X72,0X2D,0X74,0X65,0X78,0X74,0X20,0X62,0X6F,0X6C,0X64,0X2D,0X74,0X65,0X78,0X74,0X22,0X3E,0X43,0X72,0X65,0X61,0X74,0X65,0X20,0X6E,0X65,0X77,0X20,0X6C,0X69,0X73,0X74,0X3C,0X2F,0X61,0X3E,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct lists_template {const char* lists;
+const char* prefix;
+};
+char* tmpl_gen_lists(struct lists_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_lists, data->lists?data->lists:"", data->prefix?data->prefix:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/lists.tmpl b/static/lists.tmpl
new file mode 100644
index 0000000..482f23b
--- /dev/null
+++ b/static/lists.tmpl
@@ -0,0 +1,13 @@
+
diff --git a/static/login.ctmpl b/static/login.ctmpl
new file mode 100644
index 0000000..8d4f48c
--- /dev/null
+++ b/static/login.ctmpl
@@ -0,0 +1,20 @@
+#ifndef __login
+#define __login
+static const char data_login[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X25,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X20,0X20,0XA,0X20,0X20,0X25,0X73,0XA,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X6F,0X67,0X69,0X6E,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3A,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X22,0X20,0X69,0X64,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X3E,0X25,0X73,0X3A,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X20,0X69,0X64,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X3E,0X3C,0X62,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0XA,0X20,0X20,0X3C,0X68,0X36,0X3E,0X25,0X73,0X3C,0X2F,0X68,0X36,0X3E,0XA,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X6F,0X67,0X69,0X6E,0X2F,0X6F,0X61,0X75,0X74,0X68,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X2D,0X75,0X72,0X6C,0X22,0X3E,0X25,0X73,0X3A,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X75,0X72,0X6C,0X22,0X20,0X69,0X64,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X2D,0X75,0X72,0X6C,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct login_template {const char* login_header;
+const char* error;
+const char* prefix;
+const char* username;
+const char* password;
+const char* login_submit;
+const char* instance_text;
+const char* instance_url;
+const char* instance_submit;
+};
+char* tmpl_gen_login(struct login_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_login, data->login_header?data->login_header:"", data->error?data->error:"", data->prefix?data->prefix:"", data->username?data->username:"", data->password?data->password:"", data->login_submit?data->login_submit:"", data->instance_text?data->instance_text:"", data->prefix?data->prefix:"", data->instance_url?data->instance_url:"", data->instance_submit?data->instance_submit:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/login.tmpl b/static/login.tmpl
new file mode 100644
index 0000000..3bfdea8
--- /dev/null
+++ b/static/login.tmpl
@@ -0,0 +1,29 @@
+
+
{{%s:login_header}}
+
+ {{%s:error}}
+
+
+
+
{{%s:instance_text}}
+
+
+
diff --git a/static/navigation.ctmpl b/static/navigation.ctmpl
new file mode 100644
index 0000000..8d5c370
--- /dev/null
+++ b/static/navigation.ctmpl
@@ -0,0 +1,16 @@
+#ifndef __navigation
+#define __navigation
+static const char data_navigation[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X69,0X67,0X61,0X74,0X69,0X6F,0X6E,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X75,0X70,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X62,0X74,0X6E,0X22,0X3E,0X55,0X70,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X70,0X72,0X65,0X76,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X72,0X74,0X5F,0X69,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6D,0X69,0X6E,0X5F,0X69,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X3E,0X50,0X72,0X65,0X76,0X69,0X6F,0X75,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X6E,0X65,0X78,0X74,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X73,0X74,0X61,0X72,0X74,0X5F,0X69,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X6D,0X61,0X78,0X5F,0X69,0X64,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X61,0X76,0X2D,0X62,0X74,0X6E,0X22,0X3E,0X4E,0X65,0X78,0X74,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0};
+struct navigation_template {const char* start_id;
+const char* min_id;
+const char* prev_active;
+const char* prev_submit;
+const char* max_id;
+};
+char* tmpl_gen_navigation(struct navigation_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_navigation, data->start_id?data->start_id:"", data->min_id?data->min_id:"", data->prev_active?data->prev_active:"", data->prev_submit?data->prev_submit:"", data->start_id?data->start_id:"", data->max_id?data->max_id:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/navigation.tmpl b/static/navigation.tmpl
new file mode 100644
index 0000000..07501b5
--- /dev/null
+++ b/static/navigation.tmpl
@@ -0,0 +1,32 @@
+
diff --git a/static/notification.ctmpl b/static/notification.ctmpl
new file mode 100644
index 0000000..c0a165f
--- /dev/null
+++ b/static/notification.ctmpl
@@ -0,0 +1,16 @@
+#ifndef __notification
+#define __notification
+static const char data_notification[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X75,0X73,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X74,0X65,0X78,0X74,0X2D,0X67,0X72,0X6F,0X75,0X70,0X2D,0X77,0X69,0X74,0X68,0X2D,0X69,0X63,0X6F,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X74,0X69,0X6F,0X6E,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X49,0X66,0X20,0X61,0X6E,0X79,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct notification_template {const char* avatar;
+const char* username;
+const char* action;
+const char* action_item;
+const char* content;
+};
+char* tmpl_gen_notification(struct notification_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notification, data->avatar?data->avatar:"", data->username?data->username:"", data->action?data->action:"", data->action_item?data->action_item:"", data->content?data->content:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notification.tmpl b/static/notification.tmpl
new file mode 100644
index 0000000..335b23e
--- /dev/null
+++ b/static/notification.tmpl
@@ -0,0 +1,11 @@
+
+
+
+
+ {{%s:username}}
+ {{%s:action}}
+ {{%s:action_item}}
+
+ {{%s:content}}
+
+
diff --git a/static/notification_action.ctmpl b/static/notification_action.ctmpl
new file mode 100644
index 0000000..cd9eace
--- /dev/null
+++ b/static/notification_action.ctmpl
@@ -0,0 +1,17 @@
+#ifndef __notification_action
+#define __notification_action
+static const char data_notification_action[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X20,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X72,0X65,0X67,0X75,0X6C,0X61,0X72,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X74,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X74,0X61,0X62,0X6C,0X65,0X2D,0X62,0X69,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X69,0X6E,0X66,0X6F,0X2D,0X66,0X6F,0X72,0X6D,0X61,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X74,0X65,0X78,0X74,0X2D,0X67,0X72,0X6F,0X75,0X70,0X2D,0X77,0X69,0X74,0X68,0X2D,0X69,0X63,0X6F,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X74,0X69,0X74,0X6C,0X65,0X3D,0X22,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X74,0X69,0X6F,0X6E,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X22,0X3E,0X40,0X25,0X73,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0};
+struct notification_action_template {const char* avatar;
+const char* acct;
+const char* display_name;
+const char* action;
+const char* idk;
+const char* prefix;
+};
+char* tmpl_gen_notification_action(struct notification_action_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notification_action, data->avatar?data->avatar:"", data->acct?data->acct:"", data->display_name?data->display_name:"", data->action?data->action:"", data->idk?data->idk:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->acct?data->acct:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notification_action.tmpl b/static/notification_action.tmpl
new file mode 100644
index 0000000..3269567
--- /dev/null
+++ b/static/notification_action.tmpl
@@ -0,0 +1,24 @@
+
+
+
+
+ |
+
+
+
+
+
+
+ {{%s:display_name}}
+ {{%s:action}}
+ {{%s:idk}}
+
+
+ @{{%s:acct}}
+
+ |
+
+
+ |
+
+
diff --git a/static/notification_compact.ctmpl b/static/notification_compact.ctmpl
new file mode 100644
index 0000000..102d6fb
--- /dev/null
+++ b/static/notification_compact.ctmpl
@@ -0,0 +1,20 @@
+#ifndef __notification_compact
+#define __notification_compact
+static const char data_notification_compact[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X63,0X6F,0X6D,0X70,0X61,0X63,0X74,0X20,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X63,0X6F,0X6D,0X70,0X61,0X63,0X74,0X2D,0X74,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X74,0X65,0X78,0X74,0X2D,0X67,0X72,0X6F,0X75,0X70,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X74,0X69,0X74,0X6C,0X65,0X3D,0X22,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X63,0X74,0X69,0X6F,0X6E,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X2D,0X73,0X74,0X61,0X74,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0};
+struct notification_compact_template {const char* avatar;
+const char* idk;
+const char* acct;
+const char* display_name;
+const char* action;
+const char* action_item;
+const char* idk2;
+const char* content;
+const char* stats;
+};
+char* tmpl_gen_notification_compact(struct notification_compact_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notification_compact, data->avatar?data->avatar:"", data->idk?data->idk:"", data->acct?data->acct:"", data->display_name?data->display_name:"", data->action?data->action:"", data->action_item?data->action_item:"", data->idk2?data->idk2:"", data->content?data->content:"", data->stats?data->stats:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notification_compact.tmpl b/static/notification_compact.tmpl
new file mode 100644
index 0000000..742c911
--- /dev/null
+++ b/static/notification_compact.tmpl
@@ -0,0 +1,18 @@
+
+
+
+
+ |
+
+
+
+ {{%s:display_name}}
+ {{%s:action}}
+ {{%s:action_item}}
+ {{%s:idk2}}
+
+ {{%s:content}}
+ {{%s:stats}}
+ |
+
+
diff --git a/static/notifications.ctmpl b/static/notifications.ctmpl
new file mode 100644
index 0000000..cb2bc08
--- /dev/null
+++ b/static/notifications.ctmpl
@@ -0,0 +1,12 @@
+#ifndef __notifications
+#define __notifications
+static const char data_notifications[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct notifications_template {const char* notifications;
+};
+char* tmpl_gen_notifications(struct notifications_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notifications, data->notifications?data->notifications:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notifications.tmpl b/static/notifications.tmpl
new file mode 100644
index 0000000..93feac5
--- /dev/null
+++ b/static/notifications.tmpl
@@ -0,0 +1,3 @@
+
+ {{%s:notifications}}
+
diff --git a/static/notifications_embed.ctmpl b/static/notifications_embed.ctmpl
new file mode 100644
index 0000000..ee3698c
--- /dev/null
+++ b/static/notifications_embed.ctmpl
@@ -0,0 +1,15 @@
+#ifndef __notifications_embed
+#define __notifications_embed
+static const char data_notifications_embed[] = {0X3C,0X21,0X44,0X4F,0X43,0X54,0X59,0X50,0X45,0X20,0X68,0X74,0X6D,0X6C,0X3E,0XA,0X3C,0X68,0X74,0X6D,0X6C,0X3E,0XA,0X20,0X20,0X3C,0X68,0X65,0X61,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6D,0X65,0X74,0X61,0X20,0X63,0X68,0X61,0X72,0X73,0X65,0X74,0X3D,0X22,0X75,0X74,0X66,0X2D,0X38,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X69,0X74,0X6C,0X65,0X3E,0X4E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X20,0X65,0X6D,0X62,0X65,0X64,0X3C,0X2F,0X74,0X69,0X74,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X6E,0X6B,0X20,0X72,0X65,0X6C,0X3D,0X22,0X73,0X74,0X79,0X6C,0X65,0X73,0X68,0X65,0X65,0X74,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X2F,0X63,0X73,0X73,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X2F,0X25,0X73,0X25,0X73,0X2E,0X63,0X73,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X74,0X79,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X68,0X74,0X6D,0X6C,0X2C,0X20,0X62,0X6F,0X64,0X79,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X7B,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X62,0X61,0X63,0X6B,0X67,0X72,0X6F,0X75,0X6E,0X64,0X2D,0X63,0X6F,0X6C,0X6F,0X72,0X3A,0X20,0X75,0X6E,0X73,0X65,0X74,0X3B,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X73,0X63,0X72,0X6F,0X6C,0X6C,0X62,0X61,0X72,0X2D,0X63,0X6F,0X6C,0X6F,0X72,0X3A,0X20,0X23,0X38,0X30,0X38,0X30,0X38,0X30,0X20,0X23,0X65,0X61,0X65,0X63,0X66,0X30,0X3B,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X73,0X63,0X72,0X6F,0X6C,0X6C,0X62,0X61,0X72,0X2D,0X77,0X69,0X64,0X74,0X68,0X3A,0X20,0X74,0X68,0X69,0X6E,0X3B,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X7D,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X74,0X79,0X6C,0X65,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X68,0X65,0X61,0X64,0X3E,0XA,0X20,0X20,0X3C,0X62,0X6F,0X64,0X79,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X2D,0X65,0X6D,0X62,0X65,0X64,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X2D,0X65,0X6D,0X62,0X65,0X64,0X2D,0X6E,0X6F,0X74,0X69,0X66,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X62,0X6F,0X64,0X79,0X3E,0XA,0X3C,0X2F,0X68,0X74,0X6D,0X6C,0X3E,0};
+struct notifications_embed_template {const char* theme;
+const char* theme_var;
+const char* navigation_box;
+const char* notifications;
+};
+char* tmpl_gen_notifications_embed(struct notifications_embed_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notifications_embed, data->theme?data->theme:"", data->theme_var?data->theme_var:"", data->navigation_box?data->navigation_box:"", data->notifications?data->notifications:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notifications_page.ctmpl b/static/notifications_page.ctmpl
new file mode 100644
index 0000000..ea20fda
--- /dev/null
+++ b/static/notifications_page.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __notifications_page
+#define __notifications_page
+static const char data_notifications_page[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X4E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6E,0X6F,0X74,0X69,0X66,0X69,0X63,0X61,0X74,0X69,0X6F,0X6E,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X25,0X73,0};
+struct notifications_page_template {const char* notifications;
+const char* navigation;
+};
+char* tmpl_gen_notifications_page(struct notifications_page_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_notifications_page, data->notifications?data->notifications:"", data->navigation?data->navigation:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/notifications_page.tmpl b/static/notifications_page.tmpl
new file mode 100644
index 0000000..cb9cd55
--- /dev/null
+++ b/static/notifications_page.tmpl
@@ -0,0 +1,7 @@
+
+
Notifications
+
+
+ {{%s:notifications}}
+
+{{%s:navigation}}
diff --git a/static/post.ctmpl b/static/post.ctmpl
new file mode 100644
index 0000000..421ae3b
--- /dev/null
+++ b/static/post.ctmpl
@@ -0,0 +1,14 @@
+#ifndef __post
+#define __post
+static const char data_post[] = {0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X63,0X72,0X65,0X61,0X74,0X65,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X20,0X65,0X6E,0X63,0X74,0X79,0X70,0X65,0X3D,0X22,0X6D,0X75,0X6C,0X74,0X69,0X70,0X61,0X72,0X74,0X2F,0X66,0X6F,0X72,0X6D,0X2D,0X64,0X61,0X74,0X61,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X62,0X6F,0X78,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X65,0X78,0X74,0X61,0X72,0X65,0X61,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X20,0X70,0X6C,0X61,0X63,0X65,0X68,0X6F,0X6C,0X64,0X65,0X72,0X3D,0X22,0X4A,0X75,0X73,0X74,0X20,0X6C,0X61,0X6E,0X64,0X65,0X64,0X20,0X69,0X6E,0X20,0X4E,0X2E,0X59,0X2E,0X22,0X20,0X72,0X6F,0X77,0X73,0X3D,0X22,0X35,0X22,0X20,0X74,0X61,0X62,0X69,0X6E,0X64,0X65,0X78,0X3D,0X22,0X31,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X65,0X78,0X74,0X61,0X72,0X65,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X66,0X6F,0X6F,0X74,0X65,0X72,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X66,0X6F,0X6F,0X74,0X65,0X72,0X2D,0X6C,0X65,0X66,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X65,0X6C,0X65,0X63,0X74,0X20,0X74,0X61,0X62,0X69,0X6E,0X64,0X65,0X78,0X3D,0X22,0X33,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X76,0X69,0X73,0X69,0X62,0X69,0X6C,0X69,0X74,0X79,0X22,0X20,0X69,0X64,0X3D,0X22,0X76,0X69,0X73,0X69,0X62,0X69,0X6C,0X69,0X74,0X79,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X70,0X75,0X62,0X6C,0X69,0X63,0X22,0X3E,0X50,0X75,0X62,0X6C,0X69,0X63,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X75,0X6E,0X6C,0X69,0X73,0X74,0X65,0X64,0X22,0X3E,0X55,0X6E,0X6C,0X69,0X73,0X74,0X65,0X64,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X70,0X72,0X69,0X76,0X61,0X74,0X65,0X22,0X3E,0X50,0X72,0X69,0X76,0X61,0X74,0X65,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X64,0X69,0X72,0X65,0X63,0X74,0X22,0X3E,0X44,0X69,0X72,0X65,0X63,0X74,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X6C,0X6F,0X63,0X61,0X6C,0X22,0X3E,0X4C,0X6F,0X63,0X61,0X6C,0X3C,0X2F,0X6F,0X70,0X74,0X69,0X6F,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X54,0X4F,0X44,0X4F,0X20,0X67,0X65,0X6E,0X65,0X72,0X61,0X74,0X65,0X20,0X6C,0X69,0X73,0X74,0X73,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X65,0X6C,0X65,0X63,0X74,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X66,0X69,0X6C,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X66,0X69,0X6C,0X65,0X22,0X20,0X74,0X61,0X62,0X69,0X6E,0X64,0X65,0X78,0X3D,0X22,0X34,0X22,0X20,0X6D,0X75,0X6C,0X74,0X69,0X70,0X6C,0X65,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X66,0X6F,0X6F,0X74,0X65,0X72,0X2D,0X72,0X69,0X67,0X68,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X50,0X6F,0X73,0X74,0X22,0X20,0X74,0X61,0X62,0X69,0X6E,0X64,0X65,0X78,0X3D,0X22,0X32,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X20,0X70,0X6F,0X73,0X74,0X2D,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0};
+struct post_template {const char* prefix;
+const char* reply_input;
+const char* content;
+};
+char* tmpl_gen_post(struct post_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_post, data->prefix?data->prefix:"", data->reply_input?data->reply_input:"", data->content?data->content:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/quick_login.ctmpl b/static/quick_login.ctmpl
new file mode 100644
index 0000000..f69f80a
--- /dev/null
+++ b/static/quick_login.ctmpl
@@ -0,0 +1,15 @@
+#ifndef __quick_login
+#define __quick_login
+static const char data_quick_login[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X64,0X65,0X62,0X61,0X72,0X2D,0X6C,0X6F,0X67,0X69,0X6E,0X22,0X3E,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X6C,0X6F,0X67,0X69,0X6E,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3A,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X22,0X20,0X69,0X64,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X61,0X62,0X65,0X6C,0X20,0X66,0X6F,0X72,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X3E,0X25,0X73,0X3A,0X20,0X3C,0X2F,0X6C,0X61,0X62,0X65,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X20,0X69,0X64,0X3D,0X22,0X6C,0X6F,0X67,0X69,0X6E,0X2D,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X70,0X61,0X73,0X73,0X77,0X6F,0X72,0X64,0X22,0X3E,0X3C,0X62,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X66,0X6F,0X72,0X6D,0X2D,0X67,0X72,0X6F,0X75,0X70,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct quick_login_template {const char* prefix;
+const char* username;
+const char* password;
+const char* login;
+};
+char* tmpl_gen_quick_login(struct quick_login_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_quick_login, data->prefix?data->prefix:"", data->username?data->username:"", data->password?data->password:"", data->login?data->login:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/reactions_btn.ctmpl b/static/reactions_btn.ctmpl
new file mode 100644
index 0000000..56b69d3
--- /dev/null
+++ b/static/reactions_btn.ctmpl
@@ -0,0 +1,14 @@
+#ifndef __reactions_btn
+#define __reactions_btn
+static const char data_reactions_btn[] = {0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X61,0X20,0X74,0X61,0X72,0X67,0X65,0X74,0X3D,0X22,0X5F,0X70,0X61,0X72,0X65,0X6E,0X74,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X72,0X65,0X61,0X63,0X74,0X23,0X69,0X64,0X2D,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X69,0X6E,0X74,0X65,0X72,0X20,0X73,0X74,0X61,0X74,0X62,0X74,0X6E,0X20,0X72,0X65,0X61,0X63,0X74,0X2D,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X65,0X6D,0X6F,0X6A,0X69,0X2D,0X62,0X74,0X6E,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X3E,0X3C,0X63,0X69,0X72,0X63,0X6C,0X65,0X20,0X63,0X78,0X3D,0X22,0X31,0X32,0X22,0X20,0X63,0X79,0X3D,0X22,0X31,0X32,0X22,0X20,0X72,0X3D,0X22,0X31,0X30,0X22,0X3E,0X3C,0X2F,0X63,0X69,0X72,0X63,0X6C,0X65,0X3E,0X3C,0X6C,0X69,0X6E,0X65,0X20,0X78,0X31,0X3D,0X22,0X38,0X22,0X20,0X79,0X31,0X3D,0X22,0X31,0X32,0X22,0X20,0X78,0X32,0X3D,0X22,0X31,0X36,0X22,0X20,0X79,0X32,0X3D,0X22,0X31,0X32,0X22,0X3E,0X3C,0X2F,0X6C,0X69,0X6E,0X65,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X3C,0X2F,0X74,0X64,0X3E,0};
+struct reactions_btn_template {const char* prefix;
+const char* status_id;
+const char* emoji_picker;
+};
+char* tmpl_gen_reactions_btn(struct reactions_btn_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_reactions_btn, data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->status_id?data->status_id:"", data->emoji_picker?data->emoji_picker:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/repeat_svg.ctmpl b/static/repeat_svg.ctmpl
new file mode 100644
index 0000000..52177d4
--- /dev/null
+++ b/static/repeat_svg.ctmpl
@@ -0,0 +1,5 @@
+#ifndef __repeat_svg
+#define __repeat_svg
+static const char data_repeat_svg[] = {0X3C,0X73,0X76,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X72,0X65,0X70,0X65,0X61,0X74,0X22,0X20,0X78,0X6D,0X6C,0X6E,0X73,0X3D,0X22,0X68,0X74,0X74,0X70,0X3A,0X2F,0X2F,0X77,0X77,0X77,0X2E,0X77,0X33,0X2E,0X6F,0X72,0X67,0X2F,0X32,0X30,0X30,0X30,0X2F,0X73,0X76,0X67,0X22,0X20,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X30,0X22,0X20,0X68,0X65,0X69,0X67,0X68,0X74,0X3D,0X22,0X32,0X30,0X22,0X20,0X76,0X69,0X65,0X77,0X42,0X6F,0X78,0X3D,0X22,0X30,0X20,0X30,0X20,0X32,0X34,0X20,0X32,0X34,0X22,0X20,0X66,0X69,0X6C,0X6C,0X3D,0X22,0X6E,0X6F,0X6E,0X65,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X3D,0X22,0X23,0X30,0X30,0X30,0X30,0X30,0X30,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X77,0X69,0X64,0X74,0X68,0X3D,0X22,0X32,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X63,0X61,0X70,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X20,0X73,0X74,0X72,0X6F,0X6B,0X65,0X2D,0X6C,0X69,0X6E,0X65,0X6A,0X6F,0X69,0X6E,0X3D,0X22,0X72,0X6F,0X75,0X6E,0X64,0X22,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X31,0X37,0X20,0X32,0X2E,0X31,0X6C,0X34,0X20,0X34,0X2D,0X34,0X20,0X34,0X22,0X2F,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X33,0X20,0X31,0X32,0X2E,0X32,0X76,0X2D,0X32,0X61,0X34,0X20,0X34,0X20,0X30,0X20,0X30,0X20,0X31,0X20,0X34,0X2D,0X34,0X68,0X31,0X32,0X2E,0X38,0X4D,0X37,0X20,0X32,0X31,0X2E,0X39,0X6C,0X2D,0X34,0X2D,0X34,0X20,0X34,0X2D,0X34,0X22,0X2F,0X3E,0X3C,0X70,0X61,0X74,0X68,0X20,0X64,0X3D,0X22,0X4D,0X32,0X31,0X20,0X31,0X31,0X2E,0X38,0X76,0X32,0X61,0X34,0X20,0X34,0X20,0X30,0X20,0X30,0X20,0X31,0X2D,0X34,0X20,0X34,0X48,0X34,0X2E,0X32,0X22,0X2F,0X3E,0X3C,0X2F,0X73,0X76,0X67,0X3E,0};
+
+#endif
diff --git a/static/repeat_svg.tmpl b/static/repeat_svg.tmpl
new file mode 100644
index 0000000..6712353
--- /dev/null
+++ b/static/repeat_svg.tmpl
@@ -0,0 +1 @@
+
diff --git a/static/scrobble.ctmpl b/static/scrobble.ctmpl
new file mode 100644
index 0000000..cf6b8a9
--- /dev/null
+++ b/static/scrobble.ctmpl
@@ -0,0 +1,23 @@
+#ifndef __scrobble
+#define __scrobble
+static const char data_scrobble[] = {0X3C,0X64,0X69,0X76,0X20,0X69,0X64,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X69,0X73,0X74,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X63,0X6F,0X6D,0X70,0X61,0X63,0X74,0X2D,0X74,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X69,0X6D,0X67,0X2D,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X22,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X69,0X73,0X74,0X2D,0X69,0X6E,0X66,0X6F,0X2D,0X74,0X65,0X78,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X69,0X73,0X74,0X2D,0X61,0X63,0X74,0X69,0X76,0X69,0X74,0X79,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0X20,0X20,0X20,0X20,0X20,0X20,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X74,0X69,0X74,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X6B,0X65,0X79,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X76,0X61,0X6C,0X75,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X61,0X72,0X74,0X69,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X6B,0X65,0X79,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X76,0X61,0X6C,0X75,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X61,0X6C,0X62,0X75,0X6D,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X6B,0X65,0X79,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X76,0X61,0X6C,0X75,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X6C,0X65,0X6E,0X67,0X74,0X68,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X6B,0X65,0X79,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X63,0X72,0X6F,0X62,0X62,0X6C,0X65,0X2D,0X76,0X61,0X6C,0X75,0X65,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct scrobble_template {const char* scrobble_id;
+const char* avatar;
+const char* username;
+const char* activity;
+const char* title_key;
+const char* title;
+const char* artist_key;
+const char* artist;
+const char* album_key;
+const char* album;
+const char* length_key;
+int length;
+};
+char* tmpl_gen_scrobble(struct scrobble_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_scrobble, data->scrobble_id?data->scrobble_id:"", data->avatar?data->avatar:"", data->username?data->username:"", data->activity?data->activity:"", data->title_key?data->title_key:"", data->title?data->title:"", data->artist_key?data->artist_key:"", data->artist?data->artist:"", data->album_key?data->album_key:"", data->album?data->album:"", data->length_key?data->length_key:"", data->length);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/search.ctmpl b/static/search.ctmpl
new file mode 100644
index 0000000..19011a8
--- /dev/null
+++ b/static/search.ctmpl
@@ -0,0 +1,20 @@
+#ifndef __search
+#define __search
+static const char data_search[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X73,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X65,0X61,0X72,0X63,0X68,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X65,0X73,0X3F,0X71,0X3D,0X25,0X73,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X65,0X61,0X72,0X63,0X68,0X2F,0X61,0X63,0X63,0X6F,0X75,0X6E,0X74,0X73,0X3F,0X71,0X3D,0X25,0X73,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X73,0X65,0X61,0X72,0X63,0X68,0X2F,0X68,0X61,0X73,0X68,0X74,0X61,0X67,0X73,0X3F,0X71,0X3D,0X25,0X73,0X22,0X3E,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X74,0X61,0X62,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X20,0X25,0X73,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X62,0X75,0X74,0X74,0X6F,0X6E,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0XA,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X65,0X61,0X72,0X63,0X68,0X2D,0X72,0X65,0X73,0X75,0X6C,0X74,0X73,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct search_template {const char* prefix;
+const char* query;
+const char* statuses_active;
+const char* statuses;
+const char* accounts_active;
+const char* accounts;
+const char* hashtags_active;
+const char* hashtags;
+const char* results;
+};
+char* tmpl_gen_search(struct search_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_search, data->prefix?data->prefix:"", data->query?data->query:"", data->statuses_active?data->statuses_active:"", data->statuses?data->statuses:"", data->prefix?data->prefix:"", data->query?data->query:"", data->accounts_active?data->accounts_active:"", data->accounts?data->accounts:"", data->prefix?data->prefix:"", data->query?data->query:"", data->hashtags_active?data->hashtags_active:"", data->hashtags?data->hashtags:"", data->results?data->results:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/status.ctmpl b/static/status.ctmpl
new file mode 100644
index 0000000..d90cbd7
--- /dev/null
+++ b/static/status.ctmpl
@@ -0,0 +1,32 @@
+#ifndef __status
+#define __status
+static const char data_status[] = {0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X69,0X64,0X3D,0X22,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X20,0X25,0X73,0X20,0X75,0X69,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X3E,0XA,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X74,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6D,0X67,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X6F,0X73,0X74,0X65,0X72,0X2D,0X73,0X74,0X61,0X74,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X75,0X73,0X65,0X72,0X6E,0X61,0X6D,0X65,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X61,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X69,0X6E,0X73,0X74,0X61,0X6E,0X63,0X65,0X2D,0X69,0X6E,0X66,0X6F,0X22,0X20,0X68,0X72,0X65,0X66,0X3D,0X22,0X25,0X73,0X2F,0X40,0X25,0X73,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X61,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X61,0X6C,0X69,0X67,0X6E,0X65,0X6E,0X64,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6D,0X65,0X6E,0X75,0X2D,0X63,0X6F,0X6E,0X74,0X61,0X69,0X6E,0X65,0X72,0X20,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X76,0X69,0X73,0X69,0X62,0X69,0X6C,0X69,0X74,0X79,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X6D,0X65,0X6E,0X75,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X74,0X79,0X70,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X6D,0X75,0X74,0X65,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X2F,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X74,0X79,0X70,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X70,0X69,0X6E,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X25,0X73,0X2F,0X73,0X74,0X61,0X74,0X75,0X73,0X2F,0X25,0X73,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X68,0X69,0X64,0X64,0X65,0X6E,0X22,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X69,0X74,0X79,0X70,0X65,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X62,0X6F,0X6F,0X6B,0X6D,0X61,0X72,0X6B,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X6D,0X65,0X6E,0X75,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X25,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X6C,0X69,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X75,0X6C,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0};
+struct status_template {const char* status_id;
+const char* focused;
+const char* notif_info;
+const char* avatar;
+const char* username;
+const char* prefix;
+const char* acct;
+const char* visibility;
+const char* unmute;
+const char* unmute_btn;
+const char* unpin;
+const char* unpin_btn;
+const char* unbookmark;
+const char* unbookmark_btn;
+const char* delete_status;
+const char* in_reply_to_str;
+const char* status_content;
+const char* attachments;
+const char* interactions;
+const char* emoji_reactions;
+const char* interaction_btns;
+};
+char* tmpl_gen_status(struct status_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_status, data->status_id?data->status_id:"", data->focused?data->focused:"", data->notif_info?data->notif_info:"", data->avatar?data->avatar:"", data->username?data->username:"", data->prefix?data->prefix:"", data->acct?data->acct:"", data->acct?data->acct:"", data->visibility?data->visibility:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unmute?data->unmute:"", data->unmute_btn?data->unmute_btn:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unpin?data->unpin:"", data->unpin_btn?data->unpin_btn:"", data->prefix?data->prefix:"", data->status_id?data->status_id:"", data->unbookmark?data->unbookmark:"", data->unbookmark_btn?data->unbookmark_btn:"", data->delete_status?data->delete_status:"", data->in_reply_to_str?data->in_reply_to_str:"", data->status_content?data->status_content:"", data->attachments?data->attachments:"", data->interactions?data->interactions:"", data->emoji_reactions?data->emoji_reactions:"", data->interaction_btns?data->interaction_btns:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/status.tmpl b/static/status.tmpl
new file mode 100644
index 0000000..3ed0ea8
--- /dev/null
+++ b/static/status.tmpl
@@ -0,0 +1,50 @@
+
+ {{ %s : notif_info }}
+
+
+
+ |
+
+
+ {{%s:username}}
+ {{%s:acct}}
+
+
+
+
+ {{%s:in_reply_to_str}}
+
+ {{%s:status_content}}
+
+ {{%s:attachments}}
+ {{%s:interactions}}
+ {{%s:emoji_reactions}}
+ {{%s:interaction_btns}}
+ |
+
+
diff --git a/static/status_interaction_profile.ctmpl b/static/status_interaction_profile.ctmpl
new file mode 100644
index 0000000..bc4a864
--- /dev/null
+++ b/static/status_interaction_profile.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __status_interaction_profile
+#define __status_interaction_profile
+static const char data_status_interaction_profile[] = {0X3C,0X69,0X6D,0X67,0X20,0X74,0X69,0X74,0X6C,0X65,0X3D,0X22,0X25,0X73,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X66,0X70,0X2D,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X69,0X6F,0X6E,0X22,0X20,0X73,0X72,0X63,0X3D,0X22,0X25,0X73,0X22,0X3E,0};
+struct status_interaction_profile_template {const char* acct;
+const char* avatar;
+};
+char* tmpl_gen_status_interaction_profile(struct status_interaction_profile_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_status_interaction_profile, data->acct?data->acct:"", data->avatar?data->avatar:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/status_interactions.ctmpl b/static/status_interactions.ctmpl
new file mode 100644
index 0000000..bae6a6d
--- /dev/null
+++ b/static/status_interactions.ctmpl
@@ -0,0 +1,14 @@
+#ifndef __status_interactions
+#define __status_interactions
+static const char data_status_interactions[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X22,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X2D,0X6C,0X61,0X62,0X65,0X6C,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X46,0X61,0X76,0X6F,0X75,0X72,0X69,0X74,0X65,0X73,0X20,0X63,0X6F,0X75,0X6E,0X74,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X20,0X20,0X3C,0X21,0X2D,0X2D,0X20,0X52,0X65,0X62,0X6C,0X6F,0X67,0X20,0X63,0X6F,0X75,0X6E,0X74,0X20,0X2D,0X2D,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X20,0X20,0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X74,0X61,0X74,0X75,0X73,0X2D,0X69,0X6E,0X74,0X65,0X72,0X61,0X63,0X74,0X69,0X6F,0X6E,0X73,0X2D,0X70,0X66,0X70,0X73,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X25,0X73,0XA,0X20,0X20,0X3C,0X2F,0X64,0X69,0X76,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct status_interactions_template {const char* favourites_count;
+const char* reblogs_count;
+const char* users;
+};
+char* tmpl_gen_status_interactions(struct status_interactions_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_status_interactions, data->favourites_count?data->favourites_count:"", data->reblogs_count?data->reblogs_count:"", data->users?data->users:"");
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/status_interactions_label.ctmpl b/static/status_interactions_label.ctmpl
new file mode 100644
index 0000000..f268f5f
--- /dev/null
+++ b/static/status_interactions_label.ctmpl
@@ -0,0 +1,13 @@
+#ifndef __status_interactions_label
+#define __status_interactions_label
+static const char data_status_interactions_label[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X68,0X65,0X61,0X64,0X65,0X72,0X2D,0X62,0X74,0X6E,0X20,0X62,0X74,0X6E,0X22,0X3E,0XA,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X68,0X65,0X61,0X64,0X65,0X72,0X22,0X3E,0X25,0X73,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X20,0X20,0X3C,0X73,0X70,0X61,0X6E,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X62,0X74,0X6E,0X2D,0X63,0X6F,0X6E,0X74,0X65,0X6E,0X74,0X22,0X3E,0X25,0X64,0X3C,0X2F,0X73,0X70,0X61,0X6E,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct status_interactions_label_template {const char* header;
+int value;
+};
+char* tmpl_gen_status_interactions_label(struct status_interactions_label_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_status_interactions_label, data->header?data->header:"", data->value);
+if (size) *size = s;
+return ret;
+}
+#endif
diff --git a/static/test.ctmpl b/static/test.ctmpl
new file mode 100644
index 0000000..bc777d2
--- /dev/null
+++ b/static/test.ctmpl
@@ -0,0 +1,19 @@
+#ifndef __test
+#define __test
+static const char data_test[] = {0X3C,0X64,0X69,0X76,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X73,0X69,0X6D,0X70,0X6C,0X65,0X2D,0X70,0X61,0X67,0X65,0X22,0X3E,0XA,0X20,0X20,0X3C,0X68,0X31,0X3E,0X54,0X65,0X73,0X74,0X20,0X70,0X61,0X67,0X65,0X3C,0X2F,0X68,0X31,0X3E,0XA,0X20,0X20,0X3C,0X70,0X3E,0X54,0X65,0X73,0X74,0X20,0X79,0X6F,0X75,0X72,0X20,0X6E,0X67,0X69,0X6E,0X78,0X2F,0X61,0X70,0X61,0X63,0X68,0X65,0X20,0X61,0X6E,0X64,0X20,0X62,0X72,0X6F,0X77,0X73,0X65,0X72,0X20,0X68,0X65,0X72,0X65,0X3C,0X2F,0X70,0X3E,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X74,0X65,0X73,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X67,0X65,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X76,0X61,0X6C,0X75,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X47,0X45,0X54,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0XA,0X20,0X20,0X3C,0X66,0X6F,0X72,0X6D,0X20,0X61,0X63,0X74,0X69,0X6F,0X6E,0X3D,0X22,0X74,0X65,0X73,0X74,0X22,0X20,0X6D,0X65,0X74,0X68,0X6F,0X64,0X3D,0X22,0X70,0X6F,0X73,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X6E,0X61,0X6D,0X65,0X3D,0X22,0X76,0X61,0X6C,0X75,0X65,0X22,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X74,0X65,0X78,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X69,0X6E,0X70,0X75,0X74,0X20,0X74,0X79,0X70,0X65,0X3D,0X22,0X73,0X75,0X62,0X6D,0X69,0X74,0X22,0X20,0X76,0X61,0X6C,0X75,0X65,0X3D,0X22,0X50,0X4F,0X53,0X54,0X22,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X66,0X6F,0X72,0X6D,0X3E,0XA,0X20,0X20,0XA,0X20,0X20,0X3C,0X74,0X61,0X62,0X6C,0X65,0X20,0X69,0X64,0X3D,0X22,0X65,0X6E,0X76,0X2D,0X74,0X61,0X62,0X6C,0X65,0X22,0X20,0X63,0X6C,0X61,0X73,0X73,0X3D,0X22,0X70,0X72,0X65,0X73,0X65,0X6E,0X74,0X22,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X68,0X3E,0X3C,0X62,0X3E,0X45,0X4E,0X56,0X3C,0X2F,0X62,0X3E,0X3C,0X2F,0X74,0X68,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X68,0X3E,0X3C,0X62,0X3E,0X56,0X61,0X6C,0X75,0X65,0X3C,0X2F,0X62,0X3E,0X3C,0X2F,0X74,0X68,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X48,0X54,0X54,0X50,0X5F,0X43,0X4F,0X4F,0X4B,0X49,0X45,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X50,0X41,0X54,0X48,0X5F,0X49,0X4E,0X46,0X4F,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X51,0X55,0X45,0X52,0X59,0X5F,0X53,0X54,0X52,0X49,0X4E,0X47,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X52,0X45,0X51,0X55,0X45,0X53,0X54,0X5F,0X4D,0X45,0X54,0X48,0X4F,0X44,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X53,0X43,0X52,0X49,0X50,0X54,0X5F,0X4E,0X41,0X4D,0X45,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X48,0X54,0X54,0X50,0X5F,0X52,0X45,0X46,0X45,0X52,0X45,0X52,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X48,0X54,0X54,0X50,0X5F,0X55,0X53,0X45,0X52,0X5F,0X41,0X47,0X45,0X4E,0X54,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X74,0X72,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X43,0X4F,0X4E,0X54,0X45,0X4E,0X54,0X5F,0X4C,0X45,0X4E,0X47,0X54,0X48,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X20,0X20,0X3C,0X74,0X64,0X3E,0X25,0X73,0X3C,0X2F,0X74,0X64,0X3E,0XA,0X20,0X20,0X20,0X20,0X3C,0X2F,0X74,0X72,0X3E,0XA,0X20,0X20,0X3C,0X2F,0X74,0X61,0X62,0X6C,0X65,0X3E,0XA,0X3C,0X2F,0X64,0X69,0X76,0X3E,0};
+struct test_template {const char* HTTP_COOKIE;
+const char* PATH_INFO;
+const char* QUERY_STRING;
+const char* REQUEST_METHOD;
+const char* SCRIPT_NAME;
+const char* HTTP_REFERER;
+const char* HTTP_USER_AGENT;
+const char* CONTENT_LENGTH;
+};
+char* tmpl_gen_test(struct test_template* data, unsigned* size){
+char* ret;
+unsigned s = easprintf(&ret, data_test, data->HTTP_COOKIE?data->HTTP_COOKIE:"", data->PATH_INFO?data->PATH_INFO:"", data->QUERY_STRING?data->QUERY_STRING:"", data->REQUEST_METHOD?data->REQUEST_METHOD:"", data->SCRIPT_NAME?data->SCRIPT_NAME:"", data->HTTP_REFERER?data->HTTP_REFERER:"", data->HTTP_USER_AGENT?data->HTTP_USER_AGENT:"", data->CONTENT_LENGTH?data->CONTENT_LENGTH:"");
+if (size) *size = s;
+return ret;
+}
+#endif