precision highp float;
uniform vec2 resolution;
uniform vec2 mouse;
uniform float frame;
uniform float time;
uniform sampler2D backbuffer0;
uniform sampler2D backbuffer1;
layout(location = 0) out vec4 outColor0;
layout(location = 1) out vec4 outColor1;

const int HEXCOUNT = 298;
const int TEXTCOUNT = 69;
const int MAXTEXTLEN = 73;
const uint[] HEX = uint[HEXCOUNT](0x00000000u,//Null
0x25575520u,//0
0x23222270u,//1
0x25422170u,//2
0x25424520u,//3
0x46557440u,//4
0x71354520u,//5
0x25135520u,//6
0x75422220u,//7
0x25525520u,//8
0x25564520u,//9
0x00200200u,//:
0x00421000u,///
0x00000020u,//.
0x00000210u,//,
0x42222240u,//(
0x12222210u,//)
0x00200210u,//;
0x25124520u,//S
0x71131170u,//E
0x72222270u,//I
0x25555520u,//O
0x35555550u,//N
0x35535550u,//R
0x25557550u,//A
0x35555530u,//D
0xC20802C0u,//3(l)
0x34434430u,//3(r)
0x442D8430u,//分(l)
0x11272230u,//分(r)
0x0F844480u,//で(l)
0x07050030u,//で(r)
0x4F4221D0u,//か(l)
0x02551100u,//か(r)
0xE8C2D2C0u,//る(l)
0x30344530u,//る(r)
0xE84E5520u,//み(l)
0x00272210u,//み(r)
0x884C2210u,//ん(l)
0x00005520u,//ん(r)
0x4F429580u,//な(l)
0x06223630u,//な(r)
0x001E0000u,//ー(l)
0x00070000u,//ー(r)
0x8D315940u,//ゆ(l)
0x03555300u,//ゆ(r)
0x00C300C0u,//っ(l)
0x00122100u,//っ(r)
0x08616800u,//く(l)
0x21000120u,//く(r)
0xA62200C0u,//り(l)
0x12222100u,//り(r)
0x00257160u,//e
0x00355550u,//n
0x00346560u,//a
0x00531110u,//r
0x44655560u,//d
0x4F422910u,//だ(l)
0x50701070u,//だ(r)
0x22F222C0u,//ぜ(l)
0x52723030u,//ぜ(r)
0x84B0E0C0u,//今(l)
0x01703100u,//今(r)
0xE22E22E0u,//日(l)
0x74474470u,//日(r)
0x1D11D3D0u,//は(l)
0x17111350u,//は(r)
0x88888800u,//「(l)
0x70000000u,//「(r)
0x25111520u,//C
0x32222220u,//l
0x00612430u,//s
0x20222220u,//i
0x00611160u,//c
0x25155560u,//G
0x11111170u,//L
0x00355310u,//p
0x11355550u,//h
0x088888F0u,//」(l)
0x0E995380u,//の(l)
0x03444430u,//の(r)
0x42B22220u,//作(l)
0x17171710u,//作(r)
0x8F4C4210u,//方(l)
0x07032230u,//方(r)
0x19119590u,//に(l)
0x03000070u,//に(r)
0x0C3000C0u,//つ(l)
0x03444210u,//つ(r)
0x01111520u,//い(l)
0x02444000u,//い(r)
0x07000030u,//て(r)
0x65EEEAD0u,//解(l)
0x76572720u,//解(r)
0x9F4D8B70u,//説(l)
0x27472260u,//説(r)
0x222222C0u,//し(l)
0x00004210u,//し(r)
0x47C46540u,//ね(l)
0x03446560u,//ね(r)
0x8F8FA9E0u,//ま(l)
0x07070160u,//ま(r)
0x0F42C0C0u,//ず(l)
0x57111100u,//ず(r)
0x00000120u,//、(l)
0x8F4E94C0u,//を(l)
0x03061170u,//を(r)
0x8FD8F870u,//実(l)
0x07507070u,//実(r)
0xA1E32220u,//行(l)
0x30722230u,//行(r)
0x17111100u,//す(r)
0xF6EBA700u,//環(l)
0x75723510u,//環(r)
0x2EBEAB40u,//境(l)
0x17273360u,//境(r)
0x4FE5FAF0u,//整(l)
0x65257370u,//整(r)
0xE0F8C210u,//え(l)
0x30301170u,//え(r)
0x0F000860u,//ブ(l)
0x57442100u,//ブ(r)
0xE0F000C0u,//ラ(l)
0x30744300u,//ラ(r)
0x8F1100C0u,//ウ(l)
0x07442100u,//ウ(r)
0x2F2200C0u,//ザ(l)
0x57222100u,//ザ(r)
0xF0888860u,//ア(l)
0x74210000u,//ア(r)
0x444C4440u,//ド(l)
0x50016000u,//ド(r)
0x22222A60u,//レ(l)
0x00042100u,//レ(r)
0x0E000C30u,//ス(l)
0x03221240u,//ス(r)
0x44422210u,//バ(l)
0x50224440u,//バ(r)
0x02722260u,//t
0x00557750u,//w
0x00656430u,//g
0x444C21E0u,//と(l)
0x00300070u,//と(r)
0xE8844210u,//入(l)
0x00011240u,//入(r)
0x8F844210u,//力(l)
0x07444460u,//力(r)
0x03222260u,//れ(r)
0x0E0021E0u,//こ(l)
0xE0E100C0u,//う(l)
0x30344300u,//う(r)
0x4F444210u,//カ(l)
0x07444430u,//カ(r)
0x005AA0C0u,//ッ(l)
0x00222100u,//ッ(r)
0x0F0000F0u,//コ(l)
0x07444470u,//コ(r)
0xF8DDD1F0u,//画(l)
0x70555470u,//画(r)
0xF8F5D5F0u,//面(l)
0x70755570u,//面(r)
0x50551100u,//が(r)
0x8AAE99F0u,//出(l)
0x02234470u,//出(r)
0x0F0E12C0u,//さ(l)
0x17123010u,//さ(r)
0xE84F8480u,//そ(l)
0x30070030u,//そ(r)
0x68340860u,//シ(l)
0x00E888E0u,//ェ(l)
0x00300030u,//ェ(r)
0x4C2D0860u,//ダ(l)
0x57452100u,//ダ(r)
0x8E8F8FE0u,//書(l)
0x03630730u,//書(r)
0x00555570u,//u
0x00555220u,//v
0x8FD8AAD0u,//定(l)
0x07503070u,//定(r)
0x2F8F4F40u,//義(l)
0x27075350u,//義(r)
0x53000070u,//ご(r)
0x4F5F55F0u,//曲(l)
0x17575570u,//曲(r)
0x1D111180u,//げ(l)
0x00701070u,//た(r)
0x1FAFAF50u,//無(l)
0x07272750u,//無(r)
0xFDBDDB90u,//限(l)
0x74747250u,//限(r)
0x2D2D6B60u,//続(l)
0x17174260u,//続(r)
0x00016000u,//ト(r)
0x34000860u,//ン(l)
0x8F00CB80u,//ネ(l)
0x03212400u,//ネ(r)
0x04444210u,//ル(l)
0x11115530u,//ル(r)
0x000C3000u,//イ(l)
0x42111110u,//イ(r)
0xE0F88860u,//デ(l)
0x50700000u,//デ(r)
0xEAEAE3D0u,//思(l)
0x32323550u,//思(r)
0x1C181D10u,//浮(l)
0x72032710u,//浮(r)
0x57111350u,//ば(r)
0xC2BAA220u,//何(l)
0x74767460u,//何(r)
0xE02D30C0u,//ら(l)
0x01034210u,//ら(r)
0x2DAD6BA0u,//締(l)
0x17275320u,//締(r)
0x2A65D520u,//め(l)
0x13554430u,//め(r)
0xA2722680u,//切(l)
0x75555560u,//切(r)
0x75757840u,//明(l)
0x75757460u,//明(r)
0x000F0000u,//一(l)
0x00270000u,//一(r)
0x4E3A6A20u,//体(l)
0x17135310u,//体(r)
0x50300070u,//ど(r)
0x88888080u,//!(l)
0x00377750u,//m
0x00255520u,//o
0x62722220u,//f
0xE2FAAF80u,//最(l)
0x32745250u,//最(r)
0x8F4CF5D0u,//高(l)
0x07117550u,//高(r)
0x8FD0F430u,//完(l)
0x07507170u,//完(r)
0x0E2EAA50u,//成(l)
0x27226250u,//成(r)
0x2FE8F870u,//美(l)
0x27307070u,//美(r)
0x27A2BA70u,//提(l)
0x33726270u,//提(r)
0x8F2EA3D0u,//忘(l)
0x07032550u,//忘(r)
0x96D8FCB0u,//楽(l)
0x43507160u,//楽(r)
0x98401950u,//次(l)
0x07511240u,//次(r)
0xF1D5D1F0u,//回(l)
0x74555470u,//回(r)
0x8F4F4480u,//も(l)
0x03034430u,//も(r)
0xE2E2E430u,//見(l)
0x32323570u,//見(r)
0x8888E960u,//よ(l)
0x03001240u,//よ(r)
0x55575550u,//H
0x00556430u,//y
0x22222020u,//!
0x72222220u,//T
0x22000000u,//'
0x11355530u,//b
0x00552550u,//x
0x11553550u,//k
0x55000000u,//"
0x40444520u,//j
0x71131110u,//F
0x55522220u,//Y
0x25422020u,//?
0x64200000u,//’(l)
0x35535530u,//B
0xC2008080u,//?(l)
0x34430000u,//?(r)
0x000CB880u,//ィ(l)
0x02100000u,//ィ(r)
0x4C210860u,//グ(l)
0xEAEAE520u,//界(l)
0x32323510u,//界(r)
0x771F5F50u,//開(l)
0x77475750u,//開(r)
0xE52DE430u,//発(l)
0x25253170u,//発(r)
0x8E8FCB80u,//老(l)
0x43173070u,//老(r)
0x292FA2E0u,//後(l)
0x10572160u,//後(r)
0xF88CB880u,//不(l)
0x70024000u,//不(r)
0x8F9E4870u,//安(l)
0x07431160u,//安(r)
0x57555750u,//#
0x00000070u,//_
0x02272200u,//+
0x42212240u,//{
0x00707000u,//=
0x04212400u,//<
0x01421400u,//%
0x22222220u,//|
0x25525160u,//&
0x12242210u//}
);
const int[] TEXT0 = int[MAXTEXTLEN](1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,18,18,20,21,22,18,23,19,22,24,23,25,26,27,28,29,30,31,28,29,32,33,34,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT1 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT2 = int[MAXTEXTLEN](36,37,38,39,40,41,42,43,42,43,42,43,42,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT3 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,23,52,53,54,55,56,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT4 = int[MAXTEXTLEN](61,62,63,64,65,66,67,68,69,70,54,71,71,72,73,0,74,75,18,75,0,74,55,54,76,77,72,73,71,78,0,79,80,81,82,50,51,83,84,85,86,87,88,89,90,30,91,92,93,94,95,96,97,30,91,89,90,48,49,59,60,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT5 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,96,97,30,91,89,90,46,47,30,91,98,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT6 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT7 = int[MAXTEXTLEN](100,101,102,103,65,66,104,0,74,75,18,75,105,106,107,108,109,110,102,111,34,35,112,113,114,115,105,106,116,117,118,119,34,35,38,39,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT8 = int[MAXTEXTLEN](120,121,122,123,124,125,126,127,79,80,128,129,130,131,132,133,134,135,136,137,42,43,85,86,67,68,138,139,72,140,70,13,54,76,76,78,0,141,142,143,144,145,146,96,97,30,91,48,49,98,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT9 = int[MAXTEXTLEN](148,86,149,150,89,90,149,150,151,152,153,154,155,156,89,90,89,90,157,158,159,160,32,161,162,163,30,91,48,49,34,35,65,66,102,103,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT10 = int[MAXTEXTLEN](164,165,46,47,166,167,48,49,168,133,169,170,42,43,171,172,42,43,105,106,173,174,89,90,30,91,89,90,48,49,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT11 = int[MAXTEXTLEN](175,176,105,106,177,178,179,180,102,111,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT12 = int[MAXTEXTLEN](65,66,96,97,148,181,105,106,81,82,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT13 = int[MAXTEXTLEN](182,183,184,103,30,91,25,22,24,36,37,57,185,89,90,85,86,102,111,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT14 = int[MAXTEXTLEN](186,187,188,189,85,86,190,191,48,49,130,192,193,133,194,195,196,197,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT15 = int[MAXTEXTLEN](40,41,38,39,32,33,104,0,40,41,38,39,32,33,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT16 = int[MAXTEXTLEN](13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT17 = int[MAXTEXTLEN](89,90,89,90,128,129,198,199,200,201,128,129,32,161,104,0,202,203,89,90,204,205,32,33,65,206,40,41,89,90,38,39,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT18 = int[MAXTEXTLEN](207,208,105,106,81,82,50,51,57,185,89,90,79,80,32,33,104,0,28,29,32,33,209,210,40,41,48,49,40,41,46,47,30,91,96,97,100,101,46,47,57,185,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT19 = int[MAXTEXTLEN](211,212,213,214,215,216,50,51,65,66,217,218,63,64,57,58,96,97,104,0,219,220,221,222,141,223,149,150,102,111,98,147,65,206,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT20 = int[MAXTEXTLEN](224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT21 = int[MAXTEXTLEN](74,54,225,52,0,226,227,0,75,72,227,52,65,66,228,229,230,231,57,58,32,33,209,210,104,0,81,82,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT22 = int[MAXTEXTLEN](232,233,234,235,57,58,59,60,224,0,0,0,40,41,38,39,30,91,236,237,96,97,89,90,38,39,57,58,13,13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT23 = int[MAXTEXTLEN](139,175,227,175,85,86,238,239,162,163,102,111,34,35,79,80,105,106,240,241,98,147,102,103,85,86,224,0,0,0,18,19,18,18,20,21,22,18,32,161,242,243,96,97,36,37,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT24 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT25 = int[MAXTEXTLEN](141,142,89,90,149,150,98,80,184,111,30,31,104,0,61,62,63,64,65,66,148,86,148,86,100,101,30,31,57,58,59,60,0,0,244,245,246,247,248,249,250,251,30,91,48,49,98,147,252,253,40,41,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT26 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT27 = int[MAXTEXTLEN](254,52,255,0,52,176,52,55,255,226,53,52,42,43,42,43,42,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT28 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,23,52,53,54,55,56,0,77,52,55,52,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT29 = int[MAXTEXTLEN](257,226,56,54,255,14,0,20,258,70,70,0,259,52,0,52,260,76,70,54,72,53,72,53,140,0,77,226,139,0,138,226,0,225,54,261,52,0,262,69,70,54,71,71,72,73,0,74,75,18,75,0,74,55,54,76,77,72,73,71,262,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT30 = int[MAXTEXTLEN](19,53,263,226,255,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT31 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT32 = int[MAXTEXTLEN](264,72,55,71,138,14,0,70,52,138,258,71,0,71,52,138,0,175,76,0,138,77,52,0,52,53,176,72,55,226,53,225,52,53,138,0,138,226,0,55,175,53,0,74,75,18,75,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT33 = int[MAXTEXTLEN](257,255,76,52,0,262,138,139,72,140,70,13,54,76,76,262,0,72,53,138,226,0,255,226,175,55,0,259,55,226,139,71,52,55,258,71,0,54,56,56,55,52,71,71,0,259,54,55,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT34 = int[MAXTEXTLEN](265,226,175,0,71,77,226,175,70,56,0,71,52,52,0,54,0,73,226,226,70,0,71,73,55,52,52,53,0,70,72,261,52,0,138,77,72,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT35 = int[MAXTEXTLEN](75,52,138,258,71,0,71,138,54,55,138,0,139,55,72,138,72,53,140,0,71,226,225,52,0,71,77,54,56,52,55,71,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT36 = int[MAXTEXTLEN](264,72,55,71,138,14,0,56,52,227,72,53,52,0,175,176,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT37 = int[MAXTEXTLEN](22,52,260,138,14,0,139,52,258,70,70,0,225,54,261,52,0,54,0,70,54,56,56,52,55,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT38 = int[MAXTEXTLEN](257,77,52,53,14,0,139,52,258,70,70,0,259,52,53,56,0,72,138,0,138,226,0,70,226,226,261,0,70,72,261,52,0,25,22,24,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT39 = int[MAXTEXTLEN](22,226,139,14,0,54,53,0,52,53,56,70,52,71,71,70,255,0,71,138,55,52,138,73,77,72,53,140,0,138,175,53,53,52,70,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT40 = int[MAXTEXTLEN](24,53,56,14,0,139,52,70,70,14,0,175,77,13,13,13,0,255,52,54,77,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT41 = int[MAXTEXTLEN](13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT42 = int[MAXTEXTLEN](20,0,73,54,53,258,138,0,73,226,225,52,0,175,76,0,139,72,138,77,0,54,53,255,0,140,226,226,56,0,72,56,52,54,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT43 = int[MAXTEXTLEN](20,258,176,52,0,70,226,71,138,0,138,55,54,73,261,0,226,227,0,139,77,54,138,0,20,0,52,176,52,53,0,139,54,53,138,0,138,226,0,225,54,261,52,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT44 = int[MAXTEXTLEN](257,77,52,0,56,52,54,56,70,72,53,52,258,71,0,138,226,225,226,55,55,226,139,14,0,71,226,0,139,77,54,138,0,71,77,226,175,70,56,0,20,0,56,226,13,13,13,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT45 = int[MAXTEXTLEN](224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT46 = int[MAXTEXTLEN](74,54,225,52,0,226,227,0,75,72,227,52,0,72,71,0,54,139,52,71,226,225,52,14,0,71,226,0,20,258,70,70,0,225,54,261,52,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT47 = int[MAXTEXTLEN](20,138,267,0,71,0,73,226,225,76,70,52,138,52,256,0,20,71,53,258,138,0,72,138,0,259,52,54,175,138,72,227,175,70,13,13,13,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT48 = int[MAXTEXTLEN](25,226,53,258,138,0,227,226,55,140,52,138,0,138,226,0,71,175,259,225,72,138,0,72,138,0,138,226,0,139,175,227,175,256,0,20,258,225,0,70,226,226,261,72,53,140,0,227,226,55,139,54,55,56,0,138,226,0,18,19,18,18,20,21,22,18,256,256,256,0,0,0,0);
const int[] TEXT49 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT50 = int[MAXTEXTLEN](24,53,56,0,138,77,54,138,258,71,0,54,70,70,0,227,226,55,0,138,226,56,54,255,256,0,268,52,0,71,175,55,52,0,138,226,0,73,77,52,73,261,0,72,138,0,226,175,138,0,53,52,260,138,0,138,72,225,52,256,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT51 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT52 = int[MAXTEXTLEN](65,66,96,97,148,181,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT53 = int[MAXTEXTLEN](25,22,24,85,86,65,66,250,251,118,119,40,41,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT54 = int[MAXTEXTLEN](130,192,193,133,194,195,196,197,269,270,269,270,269,270,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT55 = int[MAXTEXTLEN](207,208,148,86,79,80,168,133,169,170,42,43,200,201,271,272,193,133,273,121,269,270,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT56 = int[MAXTEXTLEN](211,212,215,216,0,23,54,255,225,54,55,73,77,72,53,140,0,188,189,274,275,276,277,278,279,0,75,43,18,255,71,138,52,225,0,280,281,282,283,79,80,284,285,286,287,0,264,55,54,73,138,54,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT57 = int[MAXTEXTLEN](69,226,53,139,54,255,258,71,0,74,54,225,52,0,226,227,0,75,72,227,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT58 = int[MAXTEXTLEN](76,55,52,73,72,71,72,226,53,0,77,72,140,77,76,0,227,70,226,54,138,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT59 = int[MAXTEXTLEN](175,53,72,227,226,55,225,0,71,54,225,76,70,52,55,3,25,0,259,54,73,261,259,175,227,227,52,55,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT60 = int[MAXTEXTLEN](226,175,138,0,176,52,73,5,0,226,175,138,69,226,70,226,55,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT61 = int[MAXTEXTLEN](288,56,52,227,72,53,52,0,257,15,260,16,0,72,53,138,15,138,52,260,52,70,264,52,138,73,77,15,259,54,73,261,259,175,227,227,52,55,14,72,176,52,73,3,15,140,70,289,264,55,54,140,69,226,226,55,56,13,260,255,16,290,260,14,1,16,13,55,290,13,6,16,0);
const int[] TEXT62 = int[MAXTEXTLEN](176,226,72,56,0,225,54,72,53,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT63 = int[MAXTEXTLEN](291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT64 = int[MAXTEXTLEN](0,0,72,53,138,0,73,292,257,15,1,16,14,71,292,43,73,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT65 = int[MAXTEXTLEN](0,0,227,226,55,15,72,53,138,0,72,292,1,17,72,293,10,17,72,290,290,16,71,290,292,257,15,72,176,52,73,3,15,72,294,4,14,72,12,4,16,43,2,16,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT66 = int[MAXTEXTLEN](0,0,226,175,138,69,226,70,226,55,292,176,52,73,5,15,71,292,292,4,295,295,15,73,292,292,2,296,296,71,292,292,3,16,266,2,11,1,16,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT67 = int[MAXTEXTLEN](297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
const int[] TEXT68 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
int[] TEXTLEN = int[TEXTCOUNT](43,1,15,19,62,21,1,41,52,41,33,15,15,24,23,19,10,37,45,41,21,33,40,51,1,55,1,19,21,62,7,1,49,50,40,34,18,27,38,37,23,10,37,45,49,21,40,39,70,1,61,1,9,16,17,25,54,24,23,30,19,73,12,2,19,46,41,2,0);
int[MAXTEXTLEN] getText(int i)
{
   int[MAXTEXTLEN] t;
   if(i == 0)
       t = TEXT0;
   else if(i == 1)
       t = TEXT1;
   else if(i == 2)
       t = TEXT2;
   else if(i == 3)
       t = TEXT3;
   else if(i == 4)
       t = TEXT4;
   else if(i == 5)
       t = TEXT5;
   else if(i == 6)
       t = TEXT6;
   else if(i == 7)
       t = TEXT7;
   else if(i == 8)
       t = TEXT8;
   else if(i == 9)
       t = TEXT9;
   else if(i == 10)
       t = TEXT10;
   else if(i == 11)
       t = TEXT11;
   else if(i == 12)
       t = TEXT12;
   else if(i == 13)
       t = TEXT13;
   else if(i == 14)
       t = TEXT14;
   else if(i == 15)
       t = TEXT15;
   else if(i == 16)
       t = TEXT16;
   else if(i == 17)
       t = TEXT17;
   else if(i == 18)
       t = TEXT18;
   else if(i == 19)
       t = TEXT19;
   else if(i == 20)
       t = TEXT20;
   else if(i == 21)
       t = TEXT21;
   else if(i == 22)
       t = TEXT22;
   else if(i == 23)
       t = TEXT23;
   else if(i == 24)
       t = TEXT24;
   else if(i == 25)
       t = TEXT25;
   else if(i == 26)
       t = TEXT26;
   else if(i == 27)
       t = TEXT27;
   else if(i == 28)
       t = TEXT28;
   else if(i == 29)
       t = TEXT29;
   else if(i == 30)
       t = TEXT30;
   else if(i == 31)
       t = TEXT31;
   else if(i == 32)
       t = TEXT32;
   else if(i == 33)
       t = TEXT33;
   else if(i == 34)
       t = TEXT34;
   else if(i == 35)
       t = TEXT35;
   else if(i == 36)
       t = TEXT36;
   else if(i == 37)
       t = TEXT37;
   else if(i == 38)
       t = TEXT38;
   else if(i == 39)
       t = TEXT39;
   else if(i == 40)
       t = TEXT40;
   else if(i == 41)
       t = TEXT41;
   else if(i == 42)
       t = TEXT42;
   else if(i == 43)
       t = TEXT43;
   else if(i == 44)
       t = TEXT44;
   else if(i == 45)
       t = TEXT45;
   else if(i == 46)
       t = TEXT46;
   else if(i == 47)
       t = TEXT47;
   else if(i == 48)
       t = TEXT48;
   else if(i == 49)
       t = TEXT49;
   else if(i == 50)
       t = TEXT50;
   else if(i == 51)
       t = TEXT51;
   else if(i == 52)
       t = TEXT52;
   else if(i == 53)
       t = TEXT53;
   else if(i == 54)
       t = TEXT54;
   else if(i == 55)
       t = TEXT55;
   else if(i == 56)
       t = TEXT56;
   else if(i == 57)
       t = TEXT57;
   else if(i == 58)
       t = TEXT58;
   else if(i == 59)
       t = TEXT59;
   else if(i == 60)
       t = TEXT60;
   else if(i == 61)
       t = TEXT61;
   else if(i == 62)
       t = TEXT62;
   else if(i == 63)
       t = TEXT63;
   else if(i == 64)
       t = TEXT64;
   else if(i == 65)
       t = TEXT65;
   else if(i == 66)
       t = TEXT66;
   else if(i == 67)
       t = TEXT67;
   else if(i == 68)
       t = TEXT68;
   return t;
}

#define FRAME int(frame)
#define rep(i,n) for(int i=0;i<n;i++)
#define remap(x,a,b,c,d) ((((x)-(a))/((b)-(a)))*((d)-(c))+(c))
#define remapc(x,a,b,c,d) clamp(remap(x,a,b,c,d),min(c,d),max(c,d))
#define uvmap(x,a,b) remap(x,a,b,vec2(0),vec2(1))
#define uvmapc(x,a,b) remapc(x,a,b,vec2(0),vec2(1))
#define sat(x) min(max(x,0.),1.)
#define saturate(x) min(max(x,0.),1.)
#define linearstep(a, b, x) min(max(((x) - (a)) / ((b) - (a)), 0.), 1.)
#define norm(x) normalize(x)
#define SPAN 6.

const float PI = acos(-1.);
const float TAU = PI * 2.;
const float MAXTIME = SPAN * 25.;

vec2 fc,res,asp,asp2;
int PH;
float FT,T,TIME;

vec2 orbit(float a)
{
   return vec2(cos(a),sin(a));
}
vec2 pmod(vec2 p,float d)
{
   return orbit(mod(atan(p.y,p.x),TAU / d) - PI / d) * length(p);
}
float gauss(vec2 p,float s)
{
   return exp(-dot(p,p) / (2. * s * s)) / (TAU * s * s);
}
float box(vec2 p,vec2 b)
{
   vec2 d = abs(p) - b;
   return length(max(d,.0)) + min(max(d.x,d.y),.0);
}
bool inuv(vec2 p)
{
   return all(lessThanEqual(vec2(0),p)) && all(lessThan(p,vec2(1)));
}
mat2 rot(float a)
{
   vec2 p = orbit(a);
   return mat2(p.x,p.y,-p.y,p.x);
}
float seg(vec2 p,vec2 a,vec2 b)
{
   vec2 pa = p - a,ba = b - a;
   return length(pa - ba * sat(dot(pa,ba) / dot(ba,ba)));
}
float box(vec3 p,vec3 b)
{
   vec3 q = abs(p) - b;
   return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);
}
vec3 pcg3(vec3 x)
{
   uvec3 v = floatBitsToUint(x);
   v = v * 1664525u + 1013904223u;
   v.x += v.y * v.z;
   v.y += v.z * v.x;
   v.z += v.x * v.y;
   v ^= v >> 16u;
   v.x += v.y * v.z;
   v.y += v.z * v.x;
   v.z += v.x * v.y;
   return vec3(v) / float(0xffffffffu);
}
float dot2(vec2 v)
{
   return dot(v,v);
}
float cross2(vec2 a,vec2 b)
{
   return a.x * b.y - a.y * b.x;
}
vec3 hex2rgb(int hex)
{
   return vec3((hex >> 16) & 0xff,(hex >> 8) & 0xff,hex & 0xff) / 255.0;
}
mat3 bnt(vec3 t)
{
   vec3 b,n = vec3(0,1,0);
   t = norm(t);
   b = norm(cross(n,t));
   n = norm(cross(t,b));
   return mat3(b,n,t);
}
vec3 cyc(vec3 p)
{
   vec3 s = vec3(1,2,3);
   vec4 n = vec4(0);
   mat3 m = bnt(s);
   float f = 1.5;
   rep(i,8)
   {
       p += sin(p.yzx);
       n += vec4(cross(cos(p),sin(p.zxy)),1);
       p *= m * f;
   }

   return n.xyz / n.w;
}
vec3 plane(vec3 ro,vec3 rd,vec3 pd,float w)
{
   pd = norm(pd);
   float l = -(dot(ro,pd) - w) / dot(rd,pd);
   vec3 rp = ro + rd * l;
   mat3 m = bnt(pd);
   vec2 uv = vec2(dot(rp,m[0]),dot(rp,m[1]));
   return vec3(uv,l < 0. ? 1e5 : l);
}
float printHalf(vec2 p,int t)
{
   ivec2 i = ivec2(p * vec2(4,8));
   return float(inuv(p) && ((HEX[t] >> (i.x + i.y * 4)) & 1u) == 1u);
}
// https://www.shadertoy.com/view/MlKcDD
float sdBezier(in vec2 pos,in vec2 A,in vec2 B,in vec2 C,out vec2 outQ)
{
   vec2 a = B - A;
   vec2 b = A - 2.0 * B + C;
   vec2 c = a * 2.0;
   vec2 d = A - pos;
   float kk = 1.0 / dot(b,b);
   float kx = kk * dot(a,b);
   float ky = kk * (2.0 * dot(a,a) + dot(d,b)) / 3.0;
   float kz = kk * dot(d,a);
   float res = 0.0;
   float sgn = 0.0;
   float p = ky - kx * kx;
   float q = kx * (2.0 * kx * kx - 3.0 * ky) + kz;
   float p3 = p * p * p;
   float q2 = q * q;
   float h = q2 + 4.0 * p3;
   if(h >= 0.0)
   {
       h = sqrt(h);
       vec2 x = (vec2(h,-h) - q) / 2.0;
       if(abs(p) < 0.001)
       {
           float k = p3 / q;
           x = vec2(k,-k - q);
       }
       vec2 uv = sign(x) * pow(abs(x),vec2(1.0 / 3.0));
       float t = uv.x + uv.y;
       t -= (t * (t * t + 3.0 * p) + q) / (3.0 * t * t + 3.0 * p);
       t = clamp(t - kx,0.0,1.0);
       vec2 w = d + (c + b * t) * t;
       outQ = w + pos;
       res = dot2(w);
       sgn = cross2(c + 2.0 * b * t,w);
   }
   else
   {   // 3 roots
       float z = sqrt(-p);
       float v = acos(q / (p * z * 2.0)) / 3.0;
       float m = cos(v);
       float n = sin(v);
       n *= sqrt(3.0);
       vec3 t = clamp(vec3(m + m,-n - m,n - m) * z - kx,0.0,1.0);
       vec2 qx = d + (c + b * t.x) * t.x;
       float dx = dot2(qx),sx = cross2(a + b * t.x,qx);
       vec2 qy = d + (c + b * t.y) * t.y;
       float dy = dot2(qy),sy = cross2(a + b * t.y,qy);
       if(dx < dy)
       {
           res = dx;
           sgn = sx;
           outQ = qx + pos;
       }
       else
       {
           res = dy;
           sgn = sy;
           outQ = qy + pos;
       }
   }

   return sqrt(res) * (sgn < .0 ? -1. : 1.);
}
float sdTri(vec2 p,float r)
{
   const float k = sqrt(3.0);
   p.x = abs(p.x) - r;
   p.y = p.y + r / k;
   if(p.x + k * p.y > 0.0)
       p = vec2(p.x - k * p.y,-k * p.x - p.y) / 2.0;
   p.x -= clamp(p.x,-2.0 * r,0.0);
   return -length(p) * sign(p.y);
}
#define F_DEF 0
#define F_SAD 1
#define F_SLP 2
#define F_HIG 3
vec4 renard(vec2 suv,int ft)
{
   float w = .1;
   float d = 1e9;
   vec2 p = vec2(asp.x - .5,.2),q = vec2(asp.x,-.8),f = vec2(.5,.1);
   vec2 m = (mouse * 2. - 1.) * asp;
   p = mix(q,m,.75) + cyc(vec3(1,2,T * .02)).xy * .3;
   if((TIME - SPAN < .0) || (MAXTIME <= TIME - SPAN))
       p = vec2(.5,-.2);
   vec2 A,B,C,nv0,nv1;
   A = p;
   C = (p + q) * .5;
   B = A + f;
   d = min(d,abs(sdBezier(suv,A,B,C,nv0)));
   A = C;
   C = q;
   B = C - f;
   d = min(d,abs(sdBezier(suv,A,B,C,nv1)));
   d -= w;
   vec2 auv = suv - p;
   vec2 an = vec2(sin(T * 2.),cos(T * 2.)) * w * .1;
   float a = atan(f.y,f.x);
   d = min(d,sdTri((auv * rot(a) - vec2(0,w * 1.5 + an.x)) * rot(ft == F_HIG ? T * PI : .0),w * .4));
   d = min(d,sdTri((auv * rot(a) - vec2(w * 1.5,w * 1.5 + an.y)) * rot(ft == F_HIG ? T * PI + PI : .0),w * .4));
   // body+ear
   vec3 bc = vec3(1);
   if(ft == F_SAD)
       bc = vec3(.5,.8,1);
   else if(ft == F_SLP)
       bc = vec3(.5);
   else if(ft == F_HIG)
       bc = .5 + .5 * cos(TAU * (vec3(0,1,2) / 3. + T + dot(nv0,vec2(2))));
   vec4 c = vec4(bc,step(d,.0));
   c.rgb *= c.a;
   c = mix(c,vec4(vec3(0),1),smoothstep(.01,.01 - .005,abs(d)));
   auv -= vec2(.5) * w;
   d = length(auv) - w * .25;
   if(ft == F_SAD)
   {
       d = min(d,length(vec2(auv.x,mod(auv.y + T * w,.4 * w) - .2 * w)) - .05 * w);
       d = max(d,auv.y);
   }
   else if(ft == F_SLP)
   {
       d = box(auv,vec2(.3,.05) * w);
   }
   else if(ft == F_HIG)
   {
       d = max(d,-mod(length(auv) - T * w,w * .4) + w * .2);
   }
   c = mix(c,vec4(vec3(0),c.a),smoothstep(.01,.0,d));
   // c.a *= step(.0,box(auv + vec2(1.25,1) * w,vec2(.5,.2*(FT<SPAN*.5?sin(FT*TAU*4.)*.5+.5:.0))*w));// mouse
   vec2 ruv = (auv - vec2(0,3. * w)) / w * vec2(2,1);
   ruv.y += sin(floor(ruv.x) + T * PI) * .2;
   vec2 iuv = floor(ruv) + vec2(3,0),fuv = (fract(ruv) - .5) * 1.5 + .5;
   float ch = printHalf(fuv,int[](23,19,22,24,23,25)[int(iuv.x) % 6]) * float(inuv(iuv / vec2(6,1)));
   // heiro
   d = abs(length((auv - vec2(0,2. * w + sin(T * 2.) * w * .3)) * vec2(.5,3)) - w) - w * .2;
   c = mix(c,vec4(bc,1),step(d,.0));
   c = mix(c,vec4(vec3(0),1),smoothstep(.01,.01 - .005,abs(d)));

   c = mix(c,vec4(1),ch);
   c.rgb *= c.a;
   return c;
}

vec4 start(vec2 suv,float t)
{
   vec4 c = vec4(0);
   c = vec4(vec3(0),.5);
   float im = smoothstep(.0,.1,t) * smoothstep(.3,.1,t);
   c = mix(c,vec4(vec3(im),1),step(length(suv),.8) * .5);
   vec2 auv = abs(suv);
   vec2 ruv = vec2(length(suv),0) * rot(mod(atan(suv.y,suv.x),TAU / 3.) - PI / 3.);
   float d = mix(ruv.x - .2,box(auv - vec2(.2,0),vec2(.05,.4)),smoothstep(.0,.2,t));
   c = mix(c,vec4(1),step(d,.0));
   c.a *= smoothstep(.8,.6,t);
   return c;
}
vec4 stop(vec2 suv,float t)
{
   vec4 c = vec4(0);
   c = vec4(vec3(0),.5);
   float im = smoothstep(.0,.1,t) * smoothstep(.3,.1,t);
   c = mix(c,vec4(vec3(im),1),step(length(suv),.8) * .5);
   vec2 auv = abs(suv);
   float d = box(auv - vec2(.2,0),vec2(.05,.4));
   c = mix(c,vec4(1),step(d,.0));
   c.a *= smoothstep(.0,.1,t);
   return c;
}

int printText(vec2 _auv,int _l,int _gl,int[MAXTEXTLEN] _text)
{
   ivec2 _cuv = ivec2(floor(_auv * vec2(4 * _gl) - vec2(2 * _gl - 2 * _l,float(_gl) * .36 - 4.)));
   ivec2 _fuv = _cuv % ivec2(4,8);
   return int((((HEX[_text[(_cuv.x / 4) % _l]] >> (_fuv.x + _fuv.y * 4)) & 1u) == 1u) && (0 <= _cuv.y && _cuv.y < 8 && 0 <= _cuv.x && _cuv.x < 4 * _l));
}

vec4 ov(vec2 uv)
{
   vec4 c = vec4(0);
   vec2 suv = (uv * 2. - 1.) * asp,auv = uv * asp2;
   vec2 wuv = auv - clamp(auv,vec2(.03),vec2(.97,.14));
   // renard
   int fi = F_DEF;
   if(PH == 1 || PH == 16)
       fi = F_SLP;
   else if(PH == 2 || PH == 22 || PH == 23 || (PH == 24 && FT < SPAN * .5))
       fi = F_HIG;
   else if(PH == 17 || PH == 18 || PH == 19)
       fi = F_SAD;
   c = renard(suv,fi);
   // TODO:make smoother
   // window
   float d = abs(auv.y - .1) - .1 + .03;
   c = mix(c,vec4(vec3(0),1),sat(step(max(-d,auv.y - .2),.0) + step(d,.0) * .5) * smoothstep(.0,.3,1. - 2. * abs(auv.x - .5)));
   // texts

   int ph,mc,l,gl,ch,ch0,ch1;
   float wb = .1,pu = 5.;
   // ja
   ph = (PH) % 27;
   int[MAXTEXTLEN] tx = getText(ph);
   mc = TEXTLEN[ph];
   l = int(linearstep(.0,SPAN * .5,FT) * float(mc));
   gl = max(36,l + 4);
   ch0 = printText((auv - (vec2(0,pu) + wb) / vec2(gl * 4)),l,gl,tx);
   ch1 = printText((auv - (vec2(0,pu) - wb) / vec2(gl * 4)),l,gl,tx);
   ch = ch0 + ch1;
   c = ch == 1 ? vec4(vec3(1),1) : ch == 2 ? vec4(vec3(1,0,0),1) : c;
   // en
   ph = (PH) % 27 + 25;
   tx = getText(ph);
   mc = TEXTLEN[ph];
   l = int(linearstep(.0,SPAN * .5,FT) * float(mc));
   gl = max(54,l + 4);
   ch0 = printText((auv - (vec2(0,-pu) + wb) / vec2(gl * 4)),l,gl,tx);
   ch1 = printText((auv - (vec2(0,-pu) - wb) / vec2(gl * 4)),l,gl,tx);
   ch = ch0 + ch1;
   c = ch == 1 ? vec4(vec3(0),1) : ch == 2 ? vec4(vec3(1,1,0),1) : c;

   c.a = sat(c.a);
   // transition
   if(PH == 6 || PH == 24)
   {
       vec2 ruv = suv * 4. * rot(-.4);

       int iy = int(floor(ruv.y)) + 1024;
       ruv.x += sign(float(iy % 2) - .5) * 48. * (pow(smoothstep(.0,SPAN / 3.,FT),.2) + pow(smoothstep(SPAN * 2. / 3.,SPAN,FT),.2) - 1.);
       vec2 iuv = floor(ruv),fuv = fract(ruv);
       vec3 col = mix(vec3(242,162,12) / 255.,vec3(223,242,194) / 255.,float(iy % 2));
       col *= printHalf(fuv,int[10](18,19,18,18,20,21,22,18,0,0)[int(iuv.x + 1024.) % 10]);
       float a = float(ruv.x == clamp(ruv.x,-20.,20.));
       c = mix(c,vec4(col,1),a);
   }
   // bottom ui
   vec2 ui = uvmap(auv,vec2(.05,0),vec2(.1,.05));
   c = mix(c,vec4(1),step(pmod(ui - .5,3.).x - .15,.0));
   ui.x -= 1.;
   c = mix(c,vec4(1),step(min(pmod(ui - .5,3.).x - .15,box(ui - vec2(.85,.5),vec2(.05,.26))),.0));
   ui = ui * 4. - vec2(6,1.3);
   // T bar
   float t = min(MAXTIME,T);
   int nse = int(t) % 60,nmi = int(t) / 60,mse = int(MAXTIME) % 60,mmi = int(MAXTIME) / 60;
   c = mix(c,vec4(1),float(inuv(ui / vec2(11,1))) * printHalf(fract(ui),(int[]((nmi / 10) % 10,nmi % 10,10,(nse / 10) % 10,nse % 10,11,(mmi / 10) % 10,mmi % 10,10,(mse / 10) % 10,mse % 10)[int(ui.x) % 11] + 1)));
   c = mix(c,vec4(1),step(abs(auv.y - .05),.002) * .5);
   c = mix(c,vec4(vec3(1,0,0),1),step(abs(auv.y - .05),.002) * step(auv.x,T / MAXTIME));
   return c;
}

vec3 defo()
{
   vec2 r = resolution,p = (gl_FragCoord.xy * 2. - r) / min(r.x,r.y) - mouse;
   for(int i = 0; i < 8; ++i)
   {
       p.xy = abs(p) / dot(p,p) - vec2(.9 + cos(TIME * .2) * .4);
   }
   return p.xxy;
}
float hashi(vec3 p,float x,float s,float w)
{
   vec3 q = p;
   q.x = abs(q.x) - x;
   float d = length(q.xz);
   float iy = (floor(p.y / s) + .5) * s;
   p.y = mod(p.y,s) - s * .5;
   p.x -= clamp(p.x,-x,x);
   return min(d,length(p)) - w;
}
const vec2 _e = vec2(1e-2,0);
#define normal(_s,_p) norm(vec3(_s(_p+_e.xyy)-_s(_p-_e.xyy),_s(_p+_e.yxy)-_s(_p-_e.yxy),_s(_p+_e.yyx)-_s(_p-_e.yyx)))
vec3 getsuv(vec3 wp,vec3 ro,mat3 m,float z)
{
   vec3 od = (ro - wp) * m;
   vec2 wuv = od.xy / od.z * z;
   return vec3(wuv,length(ro - wp));
}
float batu(vec2 p)
{
   p *= rot(PI * .25);
   p = abs(p);
   return max(min(p.x,p.y),max(p.x,p.y) - .03);
}

float sdf(vec3 p)
{
   float r = PI / 24. * 3.;
   vec3 q = p;
   float d = 1e9;
   if(PH == 12)
   {
       d = hashi(q,1.,1.,.2);
   }
   else if(PH == 13)
   {
       q.xz *= rot(q.y * r);
       d = hashi(q,1.,1.,.2);
   }
   else if(PH == 14)
   {
       q.xy *= rot(q.z * .2);
       q.x = abs(q.x) - 1.5;
       d = hashi(q.yzx,1.,1.,.2);
       q = p + vec3(0,0,3);
       q.xy *= rot(floor(q.z / 6.) * 2.4);
       q.z = mod(q.z,6.) - 3.;
       q.xy = vec2(length(q.xy) - 3.,atan(q.y,q.x) / PI * 12.);
       q.xz *= rot(q.y * r);
       d = min(d,hashi(q,1.,1.,.2));
   }
   else if(PH == 15)
   {
       q.xy = vec2(length(q.xy) - 6.,atan(q.y,q.x) / PI * 12.);
       q.xz *= rot(q.y * r + T);
       q.x = abs(q.x) - 4.;
       q.xz *= rot(-q.y * r);
       q.x = abs(q.x) - 2.;
       q.xz *= rot(q.y * r);
       q.x = abs(q.x) - 1.;
       d = hashi(q.zyx,1.,1.,.3);
   }
   else
   {
       d = 10. - length(p);
   }
   return d * .5;
}

vec3 sn(vec2 suv)
{
   vec3 c = vec3(0);
   vec3 rd,rp,ro,dir;
   mat3 m;
   float l = .0,d,z = .5;
   if(PH < 14)
       ro = vec3(0,T,-5);
   else if(PH == 14)
       ro = vec3(0,0,T * 2.);
   else
       ro = vec3(0,0,-5);
   dir = vec3(0,0,1);
   z = 1. - length(suv) * .5;
   if(PH == 15)
       z = FT * .5 - length(suv) + .5;
   m = bnt(dir);
   rd = m * norm(vec3(suv,z));
   rep(i,99)
   {
       rp = rd * l + ro;
       l += d = sdf(rp);
       if(d < 1e-3 || 1e4 < l)
           break;
   }

   vec3 n = normal(sdf,rp);
   vec3 rl = reflect(rd,n);
   vec3 ld = norm(vec3(1,1,-1));
   c = vec3(1.5) * ceil(sat((sdf(rp + ld * .1) - sdf(rp)) / .1) * 3.) / 3.;
   if(PH == 15)
       c = .5 + .5 * cos(vec3(1,2,3) + cyc(rl * .5).x * TAU + T * TAU);
   vec3 sky = vec3(0);
   c = mix(sky,c,exp(-l * .05));
   // overlay
   float r = PI / 24. * 3.;
   float px = length(fwidth(suv));
   if(PH == 12)
   {
       rep(i,16)
       {
           vec3 wp = vec3(1,int(floor(ro.y) / 2.) * 2 + i * 2 - 16,0) + vec3(0,.5,0);
           vec3 h = pcg3(wp - floor(T * 4.) * .24);
           vec3 h2 = pcg3(wp.yzx);
           if(dot(wp - ro,rp - ro) < 1.)
               continue;
           vec3 wq = wp + m * vec3(mix(vec2(0,-1),vec2(2,1),h2.xy),-.5);
           vec2 wuv = getsuv(wp,ro,m,z).xy;
           vec2 ouv = getsuv(wq,ro,m,z).xy;
           vec2 sc = vec2(2,1) * mix(24.,10.,h2.z);
           vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv);
           vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4);
           int cl = max(TEXTLEN[52] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT52[int(iuv.x) % cl];
           vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y);
           float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px);
           float ph = printHalf(fuv,ci);
           s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1)));
           c = mix(c,vec3(0,0,1),sat(s));
       }
   }
   else if(PH == 13)
   {
       rep(i,16)
       {
           vec3 wp = vec3(-1,int(floor(ro.y) / 2.) * 2 + i * 2 - 16,0) + vec3(0,.5,0);
           vec3 h = pcg3(wp - floor(T * 4.) * .24);
           vec3 h2 = pcg3(wp.yzx);
           wp.xz *= rot(-wp.y * r);
           if(dot(wp - ro,rp - ro) < 1.)
               continue;
           vec3 wq = wp + m * vec3(mix(vec2(-2,-1),vec2(-6,1),h2.xy),-.5);
           vec2 wuv = getsuv(wp,ro,m,z).xy;
           vec2 ouv = getsuv(wq,ro,m,z).xy;
           vec2 sc = vec2(2,1) * mix(24.,10.,h2.z);
           vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv);
           vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4);
           int cl = max(TEXTLEN[53] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT53[int(iuv.x) % cl];
           vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y);
           float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px);
           float ph = printHalf(fuv,ci);
           s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1)));
           c = mix(c,vec3(0,0,1),sat(s));
       }
   }
   else if(PH == 14)
   {
       rep(i,16)
       {
           vec3 wp = vec3(0,0,int(floor(ro.z)) + i - 2);
           vec3 h = pcg3(wp - floor(T * 4.) * .24);
           vec3 h2 = pcg3(wp.yzx);
           wp.xy += norm(h2.yz - .5) * 2.;
           vec3 wq = wp + m * vec3(-mix(vec2(0),vec2(3),h2.xy) * sign(wp.xy),0);
           if(dot(wp - ro,rp - ro) < 1. || dot(wq - ro,rp - ro) < 1.)
               continue;
           vec3 wuv3 = getsuv(wp,ro,m,z);
           vec2 wuv = wuv3.xy;
           vec2 ouv = getsuv(wq,ro,m,z).xy;
           vec2 sc = vec2(2,1) * mix(24.,10.,h2.z);
           vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv);
           vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4);
           int cl = max(TEXTLEN[54] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT54[int(iuv.x) % cl];
           vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y);
           float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px);
           float ph = printHalf(fuv,ci);
           s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1)));
           c = mix(c,vec3(0,0,1),sat(s) * smoothstep(8.,4.,wuv3.z));
       }
   }
   else if(PH == 15)
   {
       rep(i,16)
       {
           vec3 wp = vec3(1,2,int(floor(ro.z)) + i + int(floor(T * 8.)));
           vec3 h = pcg3(wp - floor(T * 4.) * .24);
           vec3 h2 = pcg3(wp.yzx);
           wp = vec3(vec2(4,0) * rot(h2.x * TAU),h2.y - .5);
           vec3 wq = wp + m * vec3(-wp.xy * .5,0);
           if(dot(wp - ro,rp - ro) < 1. || dot(wq - ro,rp - ro) < 1.)
               continue;
           vec3 wuv3 = getsuv(wp,ro,m,z);
           vec2 wuv = wuv3.xy;
           vec2 ouv = getsuv(wq,ro,m,z).xy;
           vec2 sc = vec2(2,1) * mix(24.,10.,h2.z);
           vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv);
           vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4);
           int cl = max(TEXTLEN[55] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT55[int(iuv.x) % cl];
           // vec2 tuv=vec2(clamp(wuv.x,ouv.x,ouv.x+(vec2(cl,0.)/sc).x),ouv.y);
           vec2 tuv = vec2(mix(ouv.x,ouv.x + (vec2(cl,0.) / sc).x,step(ouv.x + (vec2(cl,0.) / sc).x * .5,wuv.x)),ouv.y);
           float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px);
           float ph = printHalf(fuv,ci);
           s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1)));
           c = mix(c,vec3(1,0,1),sat(s));
       }
   }
   return c;
}
vec3 bg(vec2 uv)
{
   vec3 c = vec3(0);
   vec2 suv = (uv * 2. - 1.) * asp,auv = uv * asp2;

   if(PH < 9)
   {
       c = vec3(.2);
   }
   else if(PH < 11)
   {
       c = defo();
   }
   else if(PH == 11)
   {
       c = vec3(uv,0);
   }
   else if(PH < 16)
   {
       c = sn(suv);
   }
   else if(PH == 16)
   {
       c = vec3(0);
   }
   else if(PH == 17)
   {
       vec3 ro,rd,dir;
       float l,z = 1.;
       z = 1. - length(suv) * .3;
       ro = vec3(0,0,-3) + cyc(vec3(T) * .03);
       dir = vec3(0,0,1);
       rd = bnt(dir) * norm(vec3(suv,z));
       vec3 pd = vec3(0,0,1);
       vec3 pn = plane(ro,rd,pd,1.);
       vec2 puv = pn.xy,res = puv;
       vec2 sc = vec2(8,16);
       PH = 15;
       rep(i,16)
       {
           float f = float(i) / 16.;
           float sp = .1;
           float rt = T * sp + f,it = floor(rt),ft = fract(rt);
           vec3 h = pcg3(vec3(i,34. + it,12));
           vec2 p = (puv - mix(-sc,sc,vec2(h.y,ft))) * .5;
           if(p == clamp(p,-asp,asp))
           {
               res = p;
               PH = int(mix(12.1,15.9,h.z));
           }
       }
       c = sn(res) * .75;
       // vec4 ov = ov((res / asp + 1.) * .5);
       // c = mix(c,ov.rgb,ov.a);
       PH = 17;
   }
   else if(PH < 20)
   {
       vec2 sc = vec2(4,1.5);
       float spf = (PH == 19 ? sat(FT / SPAN * 1.1) : .0);
       int cl = max(1,TEXTLEN[56] - 1);
       vec2 ruv = uv * asp * vec2(2,1) * 8.;
       float iy = floor(ruv.y);
       vec3 h = pcg3(vec3(1,2,iy));
       ruv.x += float(cl) * iy / 8. + T * mix(-8.,8.,h.x);
       vec2 iuv = floor(ruv),fuv = fract(ruv);
       bool isl = h.z < spf;
       int ch = isl ? TEXT57[(int(iuv.x) + 23 * 128) % 23] : TEXT56[(int(iuv.x) + cl * 128) % cl];
       float nya = printHalf(fuv,ch);
       c = (isl ? 1. - nya : nya) * (isl ? vec3(1,0,0) : vec3(1));
   }
   else if(PH == 20)
   {
       vec3 h1 = pcg3(vec3(1,2,3) + floor(T * 8.) * 2.4) * 2. - 1.,h2 = pcg3(vec3(4,3,2) - floor(T * 8.) * .32) * 2. - 1.;
       suv = (suv + h1.xy * .1 - vec2(0,1.2)) * rot(h1.z * .5) * mix(.4,1.,h2.x * .5 + .5);
       int cl = max(1,TEXTLEN[57] - 1 - 9);
       vec2 ruv = (suv * .5 + .5) * vec2(cl,4);
       vec2 iuv = floor(ruv),fuv = fract(ruv);
       int ch = TEXT57[int(iuv.x) % cl + 9];
       c += printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1))) * vec3(1,0,0);
   }
   else if(PH == 21)
   {
       vec2 ruv = auv * vec2(72.,36.),iuv = floor(ruv),fuv = fract(ruv);
       int d = 58,u = 68;
       int iy = u - int(iuv.y) + 8;
       float ftl = sat(FT / SPAN * 1.5) * 12.;
       int up = u - 12 + int(ftl);//76
       bool tin = d <= iy && iy < (up + 1);
       int aaa = iy;
       iy = clamp(iy,d,up);
       int cl = max(1,TEXTLEN[iy]),ch = getText(iy)[int(iuv.x) % cl];
       float pha = printHalf(fuv,ch);
       c += (aaa == up ? 1. - pha : pha) * float(tin) * float(iuv.x < float(cl) * (aaa == up ? fract(ftl) : aaa < up ? 1. : .0));
   }
   else if(PH < 25)
   {
       #define _T(_x,_s) int(texelFetch(backbuffer1,((ivec2(gl_FragCoord.xy)/_s+_x)%(ivec2(resolution)/_s))*_s,0).r+.5)
       int n = _T(0,8),s = -n;
       for(int i = 0; i < 9; i++) s += _T(ivec2(i % 3 - 1,i / 3 - 1),8);
       c = vec3(s == 3 || (n == 1 && s == 2) ? 1 : 0);
       if(int(frame) % 10 != 0)
           c = vec3(n);
       if(PH == 24 && SPAN * .5 < FT)
           c = vec3(0);
   }
   return c;
}

void main()
{
   float fnyan = mod(time,MAXTIME + SPAN * 3.);
   TIME = (MAXTIME + SPAN * 2.) < fnyan ? mix(MAXTIME + SPAN * 2.,.0,linearstep(MAXTIME + SPAN * 2.,MAXTIME + SPAN * 3.,fnyan)) : fnyan;
   T = clamp(TIME - SPAN,.0,MAXTIME);
   PH = int(floor(T / SPAN)) + 1;
   FT = mod(T,SPAN);
   fc = gl_FragCoord.xy,res = resolution,asp = res / min(res.x,res.y),asp2 = res / max(res.x,res.y);
   vec2 uv = fc / res,suv = (uv * 2. - 1.) * asp;

   vec3 c = bg(uv);
   outColor1 = vec4(c,1);
   c = texture(backbuffer1,uv).rgb;
   vec4 ov = ov(uv);
   c = mix(c,ov.rgb,ov.a);
   if(TIME - SPAN < .0)
   {
       // さむね
       c = vec3(0);
       vec4 s = renard(suv,F_HIG);
       c = mix(c,s.rgb,s.a);
       int cl = 12;
       vec2 ruv = vec2(uv.x,1. - uv.y - .03) * asp2 * vec2(cl) * vec2(1,.5);
       vec2 iuv = floor(ruv),fuv = fract(ruv);
       fuv = vec2(fuv.x,1. - fuv.y);
       int ch = TEXT0[31 + int(iuv.x) % cl];
       c = mix(c,mix(vec3(0),vec3(2,0,0),smoothstep(.0,1.,fuv.y)),printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1))));
       cl = 33;
       ruv = vec2(uv.x,uv.y - .03) * asp2 * vec2(cl) * vec2(1,.5);
       iuv = floor(ruv),fuv = fract(ruv);
       ch = TEXT4[6 + int(iuv.x) % cl];
       c = mix(c,mix(vec3(0),vec3(2,0,0),smoothstep(.0,1.,fuv.y)),printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1))));
       // start
       s = start(suv * 5.,linearstep(SPAN - 3.,SPAN,TIME));
       c = mix(c,s.rgb,s.a);
   }
   if(MAXTIME <= TIME - SPAN)
   {
       // stop
       vec4 s = stop(suv * 5.,linearstep(.0,3.,TIME - SPAN - MAXTIME));
       c = mix(c,s.rgb,s.a);
   }
   outColor0 = vec4(c,1);
}