__ _/\ \ /' \ \ \ __ __ ___ ___ /\_, \ \ \/'\ /'__`\ /'__`\/' __` __`\/_/\ \ \ , < ___ /\ \L\.\.\ __//\ \/\ \/\ \ \ \ \ \ \\`\____ /\___\ \ \__/.\_\\____\ \_\ \_\ \_\ \ \_\ \_\ \____\ \/___/ \/__/\/_//____/\/_/\/_/\/_/ \/_/\/_/\/____/ 

aem1k

JavaScript Hacks and Creative Coding

Created by Martin Kleppe aka @aemkei.

Projects

More Examples

Spin the globe - Hello World 1K
 eval(z='p="<"+"pre>"/* ,.oq#+ ,._, */;for(y in n="zw24l6k\ 4e3t4jnt4qj24xh2 x/* =<,m#F^ A W###q. */42kty24wrt413n243n\ 9h243pdxt41csb yz/* #K q##H######Am */43iyb6k43pk7243nm\ r24".split(4)){/* dP cpq#q##########b, */for(a in t=pars\ eInt(n[y],36)+/* p##@###YG=[#######y */(e=x=r=[]))for\ (r=!r,i=0;t[a/* d#qg `*PWo##q#######D */]>i;i+=.05)wi\ th(Math)x-= /* aem1k.com Q###KWR#### W[ */.05,0>cos(o=\ new Date/1e3/* .Q#########Md#.###OP A@ , */+x/PI)&&(e[~\ ~(32*sin(o)*/* , (W#####Xx######.P^ T % */sin(.5+y/7))\ +60] =-~ r);/* #y `^TqW####P###BP */for(x=0;122>\ x;)p+=" *#"/* b. OQ####x#K */[e[x++]+e[x++\ ]]||(S=("eval"/* l `X#####D , */+"(z=\'"+z.spl\ it(B = "\\\\")./* G####B" # */join(B+B).split\ (Q="\'").join(B+Q/* VQBP` */)+Q+")//m1k")[x/2\ +61*y-1]).fontcolor/* TP */(/\\w/.test(S)&&"#\ 03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)')// 

JSFuck - Write JS with 6 Chars
 (![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[]) [!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+ []]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[ ]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+( !![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[! +[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[] ]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+! +[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]] +(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]] // ()+[]! 

Qlock - Quine Clock
 (r=()=>setInterval(t=>{for(j=o="\n",y=5;y--;document.body["inn" +"erHTML"]="<pre>&lt"+(S="script>\n")+o+"\n\n&lt/"+S)for(x=-01; 63-!y>x++;o+=`(r=${r})()`[j++].fontcolor(c?'#FF0':"#444"))c=x/2 %4<3&&parseInt("odRFacb67o2vi5gmOZmwFNteohbOh3sw".slice(i="9"<( D=Date()[16+(x/8|0)])?30:D*3,i+3),36)&1<<(x/2|0)%4+3*y},100))() 

ЗВЕЗДА СМЕРТИ - Death Star
 Зв езда <bOdY oNLOAd= "Я=[];Л= {};Ж=!Я;З= !Ж;Ч=!+Я;Д= Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч] Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[ Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш =+Ч;X=+Я;Й='';К='Й' H=П[X];T=Д+[X];Ы[P [Ь]+P[Ш]+C[Ш]+Ю[Б]+H +И+C[X]+P[Ь]+H+P[Ш]+И ](Ю[Ш]+Ю[ Д]+П[Б]+И +H+(Ж+Ы )[T]+К+ (З+Ы) [T])( )"> смЕ р Ти  

שלום-עולם - Hebrew JavaScript
 // שלום עולם א="",ב=!א+א,ג=!ב+א,ד=א+{},ה=ב[א++] ו=ב[ח=א],ט=++ח+א,כ=ד[ח+ט],ב[כ+=ד[ א]+(ד.ד+ד)[א]+ג[ט]+ה+ו+ב[ח]+כ+ה+ד[א ]+ו][כ](ג[א]+ג[ח]+ב[ט]+ו+ה+"(א)")() 

Katakana - Translate JS into Japanese
 ウ="" ,ア=  !ウ+  ウ,ネ =!ア +ウ, ホ=ウ +{}, ヌ=ア  [ウ++  ],セ= ア[ミ =ウ] ,ハ= ++ミ +ウ,  ヘ=ホ  [ミ+ハ ],ア[ ヘ+= ホ[ウ ]+(ホ .ホ+ホ  )[ウ]  +ネ[ハ ]+ヌ+ セ+ア [ミ]+ ヘ+ヌ  +ホ[  ウ]+セ ][ヘ] (ネ[ ウ]+  ネ[ミ  ]+ア [ハ]+  セ+ヌ+  "(ウ)"  )()  

Hieroglyphs.js - JavaScript from 2000 BC
 𓅂='',𓂀=!𓅂+𓅂,𓁄=!𓂀+𓅂,𓊎=𓅂+{},𓆣=𓂀[𓅂++] 𓊝=𓂀[𓇎=𓅂],𓏢=++𓇎+𓅂,𓆗=𓊎[𓇎+𓏢],𓂀[𓆗+=𓊎[𓅂]+( 𓂀.𓁄+𓊎)[𓅂]+𓁄[𓏢]+𓆣+𓊝+𓂀[𓇎]+𓆗+𓆣+𓊎[𓅂]+𓊝] [𓆗](𓁄[𓅂]+𓁄[𓇎]+𓂀[𓏢]+𓊝+𓆣+'`𓅂 𓂀 𓁄 𓆣 𓊝`')`` 

Confusables - All Vars are X
 var  = '' var  = !ⵝ+ⵝ var  = !Ⲭ+ⵝ var  = ⵝ+{} var 𐊐 = Ⲭ[ⵝ++] var 𐊴 = Ⲭ[Х=ⵝ] var Χ = ++Х+ⵝ var X = ꓫ[Х+Χ] Ⲭ[X+=ꓫ[ⵝ]+(Ⲭ.ᚷ+ꓫ) [ⵝ]+ᚷ[Χ]+𐊐+𐊴+Ⲭ[Х]+ X+𐊐+ꓫ[ⵝ]+𐊴][X](ᚷ[ ⵝ]+ᚷ[Х]+Ⲭ[Χ]+𐊴+𐊐+ "`XXX`")() 

Mandelcode - Fractal Quine, Zooming into JavaScript
 E = 1 , z=1.07 ; function s( a) { for(a&&(E=!E),H="",z *= .9,T*=.8,Y=0;2>Y;Y+=.1) { for (X=0;2>X;X+=.04){for(x=y=i =0;99>i &&99>=x*x+y*y;i++)t=2*x*y,x = x*x-y*y+z*X -z-Z/(1-T),y=t+z*Y-z-U;(/* MANDELCODE=A-QUINE-BY-AEMKEI=CLICK-TO-ZOOM*/ H )+=" .+#"[ i%5]}H+=n}!E&&setTimeout(s ,99),P[ I]=H}Z=1.74909351846789013, U = 3.40220976e-7,onclick=s;n ="\n";P.textContent="<" + "pre id=P>\n"+P[I= "i"+ "nnerHTML" ] T /*aem1k*/ = - 2 

// VOID - Invisible Variables and Code
 <script> //[ =""],='"',= ==,=== ,=+,=+ ,=+,=+, ={}, =+,=+,=+,=+,= .+,=[] ,=[],=[] ,=[],=[ ],=[ ],=[],=[],=[] ,="\\" +")(",=[], =[],=[],=++ ++++" ",=++++ ++++++ ,=[][],((++( +(++++++++ (=++(+)+)++++ ++++++ "''"++"."+++ ++++(+)++ +++"/"++".{"+ ((+))+ "}/"+++(+)+( +)+",'"+ "'"+++)())( )+)()) ()</script> 

const - The only Constant is Change
 const cοnst = 'const'; ([ cоnst , conѕt ]= cοnst , [ соnst , сonѕt , cоnѕt , соnѕt , сοnѕt , сοnѕt , cοnѕt ]=[!! cоnst ]+ ! cоnst + cоnst . cоnst )[ cоnst = cοnst + сonѕt + cоnѕt + cоnst + соnst + conѕt + сonѕt ] [ cоnst ] ( сοnѕt + cοnѕt + соnѕt + сonѕt + соnst +'`'+ cοnst +'`') `` 

$five - Write JS with Only 5 Different Characters
 [$$=[+[]]]+[$$[++[[]][+[]]]=+[]]+[$$=[$$1[]][+[]][++[[]] [+[]]]]+[$$$=[$[[[]+[][+[]]][+[]][++[++[++[++[[]][+[]]][ +[]]][+[]]][+[]]]+[[]+[][+[]]][+[]][++[++[++[++[++[[]][+ []]][+[]]][+[]]][+[]]][+[]]]+[[]+[][+[]]][+[]][++[[]][+[ ]]]+[[]+[][+[]]][+[]][++[++[[]][+[]]][+[]]]]+[]][+[]]]+[ $$$$=[$[[[]+[][+[]]][+[]][++[++[[]][+[]]][+[]]]+$$$[+[[+ +[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]]+[++[++[+ ... 

Fire - A Flame Shaped Quine
 nt inner 7+578] (x=a[i] ]+a[i+ color(5<x&&" HTML=hfor(h= =89;i++<63 ~((a[i]+a[i ]+ )/4))&&e[i%142] &"#FF "):"\n")p r(h="",a[I++*I% i++<63 ;h+=i%3 ? i]+a[i+1]+a[i 29]+ )&&e[i%142]. ntco F "):"\\n")p nnerH I++*I +578] 

sic - Encode JS with 2 Different Characters
 [C=B=[]].__proto__[C.B]=T=new Proxy(B,{get: (_,N)=>(B+=+!N,B[6]&&(+B||eval(C),C+=String. fromCharCode(parseInt(B,2)),B=[]),T)}); [][[][[]] ][[]][[]][[ ][[]] ][[][[]]][[ ][[]]][[] [[]]][[]] [[]][[]][[] [[]]] [[]][[]][[] [[]]][[][ []]][ []][[]][[][ []]][ [][[] ]][[] ][[][ []]][ []][[ ]][[] ][[]] [[][[ ]]][[ ][[]]][[]][ [][[] ]][[] ][[]] [[]][ [][[] ]][[]][[][[ ]]][[ ][[]]  ][[][ []]][  []][[ ][[]] ][[]] [[][[ ]]][[ ][[]] ][[][ []]][ [][[] ]][[] ][[]] [[][[ ]]][[ ][[]] ][[][ []]][ []][[ ][[]] ][[]] [[][[]]][ []][[][[]]] [[][[ ]]][[[]]][[ ][[]]][[] [[]]][[][ []]][[][[]] ][[][ []]][[][[]] ][[][[]]] 

- Encode JavaScript with Only One Symbol
 with (()) ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ... 

l33t - Write Code Like a Hacker
 with (l33t()) { c0ns0l3.w4rn('l33t'); al3rt('w00t'); } function l33t(p=this){return new Proxy(p ,{has:()=>!0,get:(t,n)=>(p=Reflect.get(t ,String(n).replace(/\d/g,a=>'oizeasGtBg' [a])))?p.apply?p.bind(t):l33t(p):p})} 

Filler - Hidden and almost Invisible Variables
 /ㅤ/-[ㅤ=''],ᅠ=!ㅤ+ㅤ,ㅤㅤ=!ᅠ+ㅤ,ㅤᅠ=ㅤ+{} ᅠㅤ=ᅠ[ㅤ++],ᅠᅠ=ᅠ[ᅠㅤㅤ=ㅤ],ᅠㅤᅠ=++ᅠㅤㅤ+ㅤ ㅤㅤㅤ=ㅤᅠ[ᅠㅤㅤ+ᅠㅤᅠ],ᅠ[ㅤㅤㅤ+=ㅤᅠ[ㅤ]+(ᅠ.ㅤㅤ+ㅤᅠ) [ㅤ]+ㅤㅤ[ᅠㅤᅠ]+ᅠㅤ+ᅠᅠ+ᅠ[ᅠㅤㅤ]+ㅤㅤㅤ+ᅠㅤ+ㅤᅠ[ㅤ]+ᅠᅠ] [ㅤㅤㅤ](ㅤㅤ[ㅤ]+ㅤㅤ[ᅠㅤㅤ]+ᅠ[ᅠㅤᅠ]+ᅠᅠ+ᅠㅤ+"(ㅤ)")() 

א The Aleph - Life out of a Single Symbol
 א <script> א ='אֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲ֤֤֧֥֤֦֣֤֥֦֤֥֦֦֤֤֥֦֦֦֤֥֤֥֤֧֤֦֥֧֦֥֤֧֥֤֥֤֤֧֥֥֧֥֣֣֣֥֥֤֥֧֥֦֣֦֧֦֦֦֧֣֥֥֥֥֥֧֣֥֥֣֧֥֤֣֤֦֥֦֦֥֧֦֣֤֦֥֦֦֥֧֧֥֥֤֣֣֥֤֥֧֦֧֧֤֣֣֥֣֥֧֥֤֧֧֦֣֧֥֧֥֤֤֧֤֤֣֣֥֣֥֤֦֦֧֥֧֥֤֤֧֦֦֤֥֥֤֥֦֧֤֥֦֧֦֣֥֥֤֦֥֧֦֥֤֤֧֥֦֥֤֥֧֥֦֥֧֣֤֥֧֥֥֦֧֤֥֥֥֥֥֥֥֧֧֥֣֥֧֣֥֤֤֥֣֧֥֤֣֣֥֥֣֤֥֣֥֥֣֤֣֣֥֥֥֤֥֣֥֧֣֤֤֥֧֤֣֦֥֥֥֤֥֥֦֦֤֥֦֤֥֧֤֤֧֥֦֥֥֦֥֦֤֥֦֤֥֤֧֥֥֤֧֥֤֧֧֥֠֡֠֠֡֡֡֡֡֡֡֡֡֡֡֡֡֡֡֠֠֠֡֡֡֠֠֡֡֠֡֠֡֠֡֠֠֡֡֠֡֡֠֠֠֠֠֠֠֡֡֠֠֠֡֠֠֠֠֡֡֠֠֠֠֠֡֡֡֠֠֠֠֠֡֠֠֡֡֡֠֠֡֠֠֡֡֡֡֡֠֡֡֠֠֠֠֡֡֡֡֡֡֡֡֠֠֠֠֡֠֠֠֠֡֡֠֠֠֠֠֠֡֠֡֡֡֡֠֠֡֠֠֠֠֡֠֠֠֡֠֠֠֠֠֡֠֠֠֡֠֠֠֠֡֠֡֠֠֡֡֠֠֡֡֡֡֡֠֡֡֠֡֡֡֡֡֠֡֡֠֡֡֡֡֡֡֡֡֠֡֡֡֡֡֠֡֡֡֡֡֡֡֡֠֡֡֡֡֡֠֡֠֠֠֠֡֠֡֠֡'  ב = "" , ח = ! ב + ב , ד = ! ח + ב , ו = ב + { } , ה = ' " ' , ע = ח [ 0 ] , נ = ח [ 1 ] , ך = ו [ 5 ] , ם = ( ח . ד + ו ) [ 1 ] , ף = ח [ 2 ] , מ = ו [ 1 ] , ס = ד [ 3 ] , כ = ח [ 3 ] , י = ד [ 1 ] ג = נ + כ + ע + ף + נ + ם + " " , ט = ( ז = ך + מ + ם + ס + ע + נ + ף + ך + ע + מ + נ ) [ ז ] [ ז ] , ט ( ט (ג+ה+ט(ג+ט(ג+ה+כ+ס+ך+י+(ן="\\160")+כ+"(א)."+נ+כ+ן+"\\154"+י+ך+כ+ "(/"+(ל=".{5}(.)")+ל+ל+"/\\147,'\\\\\\\\$1$2$3')"+ה)())()+ה)())() 

Theseus - A Maze Generator and Solver
 S="\40\n";M="map";i=991;for(z = [ ] ; i ; )z[--i]=i%30? 8 : S [ 1 ] ; F=d=> [30,1,-30 , - 1 ] [ M ] ( ( f,g,h )=>S[0]<z [ f = d + 2 * h[3&g+i]]&&(z[f]=z[(d + f ) / 2 ] = S [ 0],i--,F( f ) ) ) , F(32);z+=S[1]//aem1k.com/maze 

Polyglot - CSS = JS = HTML
 /** CSS **/ html * { color: red } /** JS **/ var html, red; document.write('<'+'link href="#" rel="stylesheet">'); /** HTML **/ // <script src="#"> 

Tweetris - Play Binary Tetris
 function(a,b,c,d){d+ =c;return[d<0|a&b<<d // .##.. ?a=parseInt((a|b<<c) // ..... .toString(d=32,b=new // ..... Date&2|1).replace('v // .##.. ',''),d):a|b<<d,a,b, // ###.# d]} // tweetris // .#### 

ffconf - 2015 Animated Starfield
 <body text=#EE3 bgcolor=000 id=p style="perspective:4.0em;display: inline-block;padding:15%"><script> I=1/7;e =' I+=I<\ 30?I/30: 1, p.inn\ erHTML="< pr e>"+B\ .replace( /\\S/g, function(a\ ,b){retur n\40z=I *(1+b*b/50\ 0%2)%130, "<tt\\4 0style=dis\ play:i nline-\ block; transf\ orm:trans late3d( 0,0,"+(z+b\ /17-50)+" px)>.</ tt>"})';$$= /\s\s+/g; N=0;S=" ";!!+[];e=e .replace( $$,""); setInterval (e,30);B= (S)+(p) .outerHTML .replace(/y.*"/,12);B=S[0]+B.substr (0,36)+"\n"+B;'a-quine-by-@aemkei\ aem1k.com/ffconf'</script>-ffconf 

Symmetry - Symmetric JavaScript
 {(.0-{}-0.)}  xXXx  =wYYw= ([]+!!+[])  [0.**.0]  +[([])]+ (''+!!+'') [0-~+!!+~-0] +([]+[]+[])+ (8+{}+8) [0|8.**.8|0] +([]||[])+ (""+(0==0)+"")  [0.**.0]  +[]+''+[]+ (0+{}+0)  [8-!!-8]  +(''||'')+ ("("+[]+")")  [0+~~+0]  +""+''+""+ (["xXXx"])  [0+~~+0]  +([""])+ (')YY(')  [""+~~+""]  //-!!-\\ 

Pac-Man - Play in < 512 Bytes
 ############# // <pre id=p><script>l="";for(i in L=[a=8191,b= # # .# // 4161,c=5981,d=5125,5493,5397,5589,d,c,b,a])l # ### # ###.# // +=L[i].toString(2).replace(/1/g,4).replace(/ # # X .#.# // 0/g,2)+3;l=l.split(""),w=14,x=76,X=48,e=d=k= # # # ###.#.# // D=!setInterval(onkeydown=function(a){if(a)k= # # # o #.#.# // a.which;else if(!e){for(l[x]=0,l[x+=d=k-37>> # # ### #.#.# // 2||4&l[x+(o=k%2?k-38:(k-39)*w)]?4&l[x+d]?0:d # # ......#.# // :o],e|=8&l[x],l[x]=1,l[X]&=7,h=D%4,h=h%2?h-2 # ### #.###.# // :(h-1)*w,4&l[X+h]?D++:e|=1&l[X+=h],l[X]|=8,h #.....#.....# // =i=0;153>i;)h+=" o.\n# x"[8&l[++i]||l[i]]; ############# // p.innerHTML=h}},250) 

 try { to } catch ( me ){ if (` you `) can :'\ ! '} 

Selected Talks

Photo

 MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdyssoooyNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy/..` ``` ``..--/+/+yydNMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMNy- ` `....+mMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMNs.` `` `...`/hNMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMN+` `-dMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMN: ` ``-dMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMN- ` ``.:/dMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMdo` `.-/-hMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMNo` .:/:/.:hMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMN/ `.../sms.:oNMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMo` ``..-//:yNMMm::shMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMy. ``..---.``.::///++oyNMMMMM+:soMMMMMMMMMMMMMM MMMMMMMMMMMMMMMN- ``..---::::/+ooosydmNMMMMMMN+//+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMy-  `....---:://+oyhdmNNNNMMMMMMmy/-+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMmo  `....----::/++ohmmNNNNMMMMMMMMN/./mMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMN/ `.....``````..-::/osyhddhhddddmNd..+NMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMy` `.--...```````` ``-:/+++/:.``./hs`oNMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMNo+:.` .---..``` `.`````.:+o:.` `:+mNNMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMm:` ```----...``````:-``.``-+mN+..``:NNMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMmh-..`..`-::--........---....-oNMNdyyhmMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMho:. `-..``-:----..--::::::-...-+NMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMNo. ` `.-------:://///:-....-/hMMMMMMMMMh`oMMMMMMMMMMMMMMMM MMMMMMMMMMMMN- .-:------:::::--.`..--/sMMMh+yNMMh sMMMMMMMMMMMMMMM MMMMMMMMMMMMo `.-----..........`````.-+dNm+-/dN- +MMMMMMMMMMMMMMM MMMMMMMMMMMM. `.--...````````````````.oNMMo:.o/ +MMMMMMMMMMMMMMM MMMMMMMMMMMM/ `....````` ````.-:/+hmmy-:/y oMMMMMMMMMMMMMMM MMMMMMMMMMMMs ``..````````` ```.-+shyydh. dMMMMMMMMMMMMMMM MMMMMMMMMMMMy ``````````..``````--:/yMMNmh. /mMMMMMMMMMMMMMM MMMMMMMMMMMMs `````` ``````````.-oNNh+. .+oyhhmMMMMMMMM MMMMMMMMMMMM. ` ````````....-:ohmNd/` `-:+sh MMMMMMMMMMMs `...--/ydy: MMMMMMMMmdy- `.-. MMMNy+-. ms: ``` 

Contact


20XX - Martin Kleppe Ubilabs