-
Notifications
You must be signed in to change notification settings - Fork 2
/
stargazer.min.js
1 lines (1 loc) · 40.4 KB
/
stargazer.min.js
1
"use strict";var Channel=function(){var e={};function r(t,n){if(!(this instanceof r))return new r(t,n);this.name=t,this.global=!0===n,e[t]||(e[t]=0),this.unique=e[t],e[t]++}return r.prototype.toPiCalc=function(){return!0===this.global?this.name:this.name+"_"+this.unique},r.prototype.is=function(t){return this===t},r.prototype.toString=function(){return this.name+"#"+this.unique},r}(),ProcCall=function(){var r=0;function o(t,n,e){if(!(this instanceof o))return new o(t,n,e);this.proc_name=t,this.args=n||[],this.unique=r++,e&&(this.x=e.x,this.y=e.y,this.fixed=e.fixed)}return o.prototype.toPiCalc=function(){return this.proc_name+"["+this.args.map(function(t){return t.toPiCalc()}).join(",")+"]"},o}(),Action=function(){function t(){if(!(this instanceof t))return new t}return t}(),Tau=function(){function n(t){if(!(this instanceof n))return new n(t);this.continuation=t}return((n.prototype=new Action).constructor=n).prototype.fire=function(){return this.continuation instanceof Function?this.continuation():void 0},n.prototype.toPiCalc=function(){return"τ..."},n}(),portToPicalc=function(t){return null==t||""==t?"":"@"+t},Receive=function(){function r(t,n,e){if(!(this instanceof r))return new r(t,n,e);this.channel=t,this.port=n,this.continuation=e||function(){},this.arity=e.length}return((r.prototype=new Action).constructor=r).prototype.fire=function(t){return this.continuation instanceof Function?this.continuation.apply(null,t):void 0},r.prototype.toPiCalc=function(){for(var t=[],n=0;n<this.arity;n++)t.push("_");return this.channel.toPiCalc()+portToPicalc(this.port)+"("+t.join(",")+")..."},r}(),Send=function(){function o(t,n,e,r){if(!(this instanceof o))return new o(t,n,e,r);this.channel=t,this.port=n,this.args=e||[],this.arity=this.args.length,this.continuation=r}return((o.prototype=new Action).constructor=o).prototype.fire=function(){return this.continuation instanceof Function?this.continuation():void 0},o.prototype.toPiCalc=function(){return this.channel.toPiCalc()+portToPicalc(this.port)+"<"+this.args.map(function(t){return t.toPiCalc()}).join(",")+">..."},o}(),Alt=function(){function n(t){if(!(this instanceof n))return new n(t);this.alts=t||[]}return n.prototype.enabled_on=function(t,n){return 0<this.waiting_on(t).length},n.prototype.waiting_on=function(t,n){return this.receiving_on(t).concat(this.sending_on(t))},n.prototype.receiving_on=function(e,r){return this.alts.filter(function(t){if(t instanceof Receive){var n=null==r||t.arity==r;return t.channel.is(e)&&n}return!1})},n.prototype.sending_on=function(e,r){return this.alts.filter(function(t){if(t instanceof Send){var n=null==r||t.arity==r;return t.channel.is(e)&&n}return!1})},n.prototype.taus=function(){return this.alts.filter(function(t){return t instanceof Tau})},n.prototype.toPiCalc=function(){return"("+this.alts.map(function(t){return t.toPiCalc()}).join(" + ")+")"},n}(),Zero=void 0,PiDefs=function(){function n(t){if(!(this instanceof n))return new n(t);this.defs=t}return n.prototype.unfold=function(t){if(t.proc_name in this.defs){var n=this.defs[t.proc_name];return n.length!==t.args.length?Zero:n.apply(n,t.args)}return Zero},n}(),Config=function(){function c(t,n){if(!(this instanceof c))return new c(t,n);this.defs=t,this.names_index={},this.init=n,this.nodes=[],this.procsIndex=0,this.epoch=0,this.links=[],this.mergeCalls(n,{x:0,y:0}),this.recomputeLinks()}function a(t){var n=60;return t+60*Math.random()-30}function s(t,n){return null!=t&&"x"in t&&"y"in t?null!=n&&"x"in n&&"y"in n?{x:(t.x+n.x)/2,y:(t.y+n.y)/2}:{x:t.x,y:t.y}:void 0}function u(t){for(var n=t.length,e,r;n;)r=Math.floor(Math.random()*n--),e=t[n],t[n]=t[r],t[r]=e;return t}c.prototype.mergeCalls=function(t,e){var r=[],o=[],i=this;return null==t?{names:[],procs:[]}:(e=e||{x:0,y:0},t.forEach(function(t){if(t){t.args.forEach(function(t){t in i.names_index||(i.names_index[t]={refCount:0,age:0},null!=e&&(t.x=a(e.x),t.y=a(e.y)),r.push(t)),i.names_index[t].refCount++});var n={call:t,body:i.defs.unfold(t),age:i.epoch};void 0!==t.x&&void 0!==t.y?(n.x=t.x,n.y=t.y,t.fixed&&(n.fixed=!0)):null!=e&&(n.x=a(e.x),n.y=a(e.y)),o.push(n)}}),this.nodes.unshift.apply(this.nodes,r),this.nodes.push.apply(this.nodes,o),this.procsIndex+=r.length,{names:r,procs:o})},c.prototype.addCalls=function(t){"string"==typeof t&&(t=t.split("|"));for(var n,e=[],r=0;r<t.length;r++)try{for(var o=t[r].trim().split("["),i=o[0],a=o[1].split("]")[0].split(",").map(function(t){return t.trim()}),c=this.getNames(),s=0;s<a.length;s++){var u=c.find(function(t){return t.toPiCalc()==a[s]});u?a[s]=u:(u=e.find(function(t){return t.name==a[s]}))?a[s]=u:(a[s]=Channel(a[s]),e.push(a[s]))}t[r]=ProcCall(i,a)}catch(t){return console.log(t),!1}return this.mergeCalls(t,n),this.recomputeLinks(),!0},c.prototype.gcNames=function(){for(var t in this.names_index)this.names_index[t].refCount<=0&&delete this.names_index[t];for(var n=0;n<this.procsIndex;)this.nodes[n]in this.names_index?n++:(this.nodes.splice(n,1),this.procsIndex--)},c.prototype.redexes=function(){for(var n=this.procsIndex,t=[];n<this.nodes.length;){if(this.nodes[n].body){var e=this.nodes[n];t=t.concat(e.body.taus().map(function(t){return{type:"tau",index:n,action:t,process:e}}))}n++}for(var r=[],o=0;o<this.procsIndex;){for(var i=[],a=[],n=this.procsIndex;n<this.nodes.length;){if(this.nodes[n].body){var e,c=(e=this.nodes[n]).body.receiving_on(this.nodes[o]),s=e.body.sending_on(this.nodes[o]);c.forEach(function(t){a.push({index:n,action:t,process:e})}),s.forEach(function(t){i.push({index:n,action:t,process:e})})}n++}for(var u=0,l=!1;u<i.length;){for(var p=0;p<a.length;){var f=i[u],h=a[p];f.index!=h.index&&f.action.port==h.action.port&&f.action.arity==h.action.arity&&(r.push({type:"comm",sender:f,receiver:h}),l=!0),p++}u++}l?this.names_index[this.nodes[o]].age++:this.names_index[this.nodes[o]].age=0,o++}return t.concat(r)};var r=function(i){return{pick:function(t){u(t);for(var n=i.epoch+1,e,r=t.length-1;0<=r;r--){var o;(o="tau"==t[r].type?i.nodes[t[r].index].age:Math.min(i.nodes[t[r].sender.index].age,i.nodes[t[r].receiver.index].age))<=n&&(n=o,e=r)}return null!=e?t[e]:void 0}}};return c.prototype.next=function(t){null==t&&(t=r(this));var n=this.redexes();if(n.length<=0)return!1;var e=t.pick(n);return null!=e&&(this.makeReact(e),!0)},c.prototype.makeReact=function(t){if("tau"==t.type){var n=s(this.nodes[t.index]),e=t.action.fire();c.heritage(this.nodes[t.index],e),this.removeProc(t.index),this.mergeCalls(e,n)}else{var n=s(this.nodes[t.sender.index],this.nodes[t.receiver.index]),r=t.sender.action.fire(),o=t.receiver.action.fire(t.sender.action.args),i=t.sender.index,a=t.receiver.index;c.heritage(this.nodes[i],r),c.heritage(this.nodes[a],o),this.removeProc(a<i?i:a),this.removeProc(a<i?a:i),this.mergeCalls(r,n),this.mergeCalls(o,n)}return this.gcNames(),this.recomputeLinks(),this.epoch++,this},c.heritage=function(t,n){if(t&&n&&0!==n.length){var e=n[0];e.x=t.x,e.y=t.y,t.fixed&&(e.fixed=!0)}},c.prototype.removeProc=function(t){if(t>=this.nodes.length||t<this.procsIndex)return!1;var n=this.names_index;return this.nodes[t].call.args.forEach(function(t){n[t].refCount--}),this.nodes.splice(t,1),!0},c.prototype.getNames=function(){return this.nodes.slice(0,this.procsIndex)},c.prototype.getProcs=function(){return this.nodes.slice(this.procsIndex)},c.prototype.recomputeLinks=function(){var n=this.links;n.splice(0,this.links.length);for(var t=this.procsIndex;t<this.nodes.length;t++){var e=this.nodes[t];e.call.args.forEach(function(t){n.push({source:e,target:t})})}},c.prototype.toPiCalc=function(){var t="",n=this.getNames().filter(function(t){return!0!==t.global}),e=this.getProcs();return 0<n.length&&(t+="ν"+n.map(function(t){return t.toPiCalc()}).join(",")+"."),0<e.length?(1<e.length&&(t+="( "),t+=e.map(function(t){return t.call.toPiCalc()}).join(" | "),1<e.length&&(t+=" )")):t+="0",t},c}(),PiCalcSimulation=function(){var P=d3.scale.category20(),_={nameSize:5,procWidth:18,procHeight:12},k=/^(.*)_(\d*)$/;function z(t,n,a){if(!(this instanceof z))return new z(t,n,a);var e=n.defs,r=n.init,o=Config(e,r);for(var i in this.q=o,a=a||{},_)_.hasOwnProperty(i)&&!a.hasOwnProperty(i)&&(a[i]=_[i]);this.options=a;var c={Ghost:"white"},s=0;function u(t){return c[t]||(s++,c[t]=P(s)),c[t]}for(var l in a.palette)c[l]=a.palette[l];for(var l in e.defs)u(l);var p=d3.layout.force().charge(-400).linkDistance(function(t){return t.target.global?100:30}).linkStrength(function(t){return t.target.global?.01:.9}).friction(.8).nodes(o.nodes).links(o.links);this.layout=function(){return p};var f=t;(t=t.append("g")).append("g").attr("id","links"),t.append("g").attr("id","nodes"),t.append("g").attr("id","labels");var h=t.select("#links").selectAll(".link"),d=t.select("#nodes").selectAll(".node .name"),g=t.select("#nodes").selectAll(".node .seq"),v=t.select("#labels").selectAll(".lbl"),m=t.select("#labels").selectAll(".name-lbl"),y=d3.behavior.zoom().scaleExtent([-10,10]).translate([f.attr("width")/2,f.attr("height")/2]).on("zoom",function(){t.attr("transform","translate("+d3.event.translate+")scale("+d3.event.scale+")")});function x(t){d3.event.altKey&&d3.select(this).classed("fixed",t.fixed=!t.fixed)}f.call(y),this.translate=function(){return 0<arguments.length?y.translate.apply(y,arguments).event(t):y.translate()},this.scale=function(){return 0<arguments.length?y.scale.apply(y,arguments).event(t):y.scale()},this.zoom=function(){return y},this.legend=function(){var t=[];for(var n in c)"Ghost"!==n&&t.push({name:n,color:c[n]});return t},this.palette=function(t){if(void 0===t){var t={};for(var n in c)"Ghost"!==n&&(t[n]=c[n]);return t}for(var e in t)c[e]=t[e];return g.style("fill",function(t){return t.color=u(t.call.proc_name)}),this};var C=p.drag().on("dragstart",function(){d3.event.sourceEvent.stopPropagation()});this.update=function(){h=h.data(o.links),d=d.data(o.getNames(),function(t){return t.toString()}),g=g.data(o.getProcs(),function(t){return t.call.unique}),v=v.data(o.getProcs(),function(t){return t.call.unique}),m=m.data(o.getNames(),function(t){return t.toString()}),h.exit().remove(),h.enter().append("line").classed("link",!0),h.classed("global",function(t){return t.target.global}),v.exit().remove(),v.enter().append("text").attr("class","lbl").text(function(t){return t.color=u(t.call.proc_name),"Ghost"===t.call.proc_name?"":t.call.proc_name}),m.exit().remove(),m.enter().append("text").attr("class","nlbl").classed("global",function(t){return t.global}).html(function(t){return t.toPiCalc().replace(k,'$1 <tspan dy=".3em" dx="-.9em" style="font-size:60%">$2</tspan>')}),d.exit().remove(),d.classed("fixed",function(t){return t.fixed}),d.enter().append("circle").classed({node:!0,name:!0}).classed("global",function(t){return t.global}).attr("r",a.nameSize).attr("cx",function(t){return t.x||0}).attr("cy",function(t){return t.y||0}).on("click",x).call(C).append("title").text(function(t){return t.toPiCalc()});var n=a.procWidth/2,e=a.procHeight/2;return g.exit().remove(),g.enter().append("rect").attr("class","node seq").attr("width",a.procWidth).attr("height",a.procHeight).attr("x",function(t){return t.x-n}).attr("y",function(t){return t.y-e}).classed("fixed",function(t){return t.fixed}).style("fill",function(t){return t.color}).on("click",function(t){console.info(t.call.toPiCalc(),t.x,t.y)}).on("click",x).call(C).append("title").text(function(t){return t.call.toPiCalc()}),p.start(),this};var w=void 0;this.init=function(t){return w=t,this};var A=function(t){return t.x},b=function(t){return t.y};p.on("tick",function(){var n=a.procWidth/2,e=a.procHeight/2,r=A,o=b,i;null!=a.collapse&&(r=function(t){return t instanceof Channel&&t.name==a.collapse?(null==i&&(i=t),i.x):t.x},o=function(t){return t instanceof Channel&&t.name==a.collapse?(null==i&&(i=t),i.y):t.y});h.attr("x1",function(t){return r(t.source)}).attr("y1",function(t){return o(t.source)}).attr("x2",function(t){return r(t.target)}).attr("y2",function(t){return o(t.target)}),d.attr("cx",r).attr("cy",o),v.attr("x",function(t){return r(t)}).attr("y",function(t){return o(t)-a.procHeight}),m.attr("x",function(t){return r(t)}).attr("y",function(t){return o(t)-a.nameSize-5}),g.attr("x",function(t){return t.x-n}).attr("y",function(t){return t.y-e}),w&&(w(),w=void 0)}),this.update(),y.event(t)}return z.prototype.randomStrategy={pick:function(t){return t[Math.floor(Math.random()*t.length)]}},z.prototype.next=function(t){return!!this.q.next(t)&&(this.update(),!0)},z}();!function(t){function n(t,n){function e(){this.constructor=t}e.prototype=n.prototype,t.prototype=new e}function Pe(t,n,e,r){this.message=t,this.expected=n,this.found=e,this.location=r,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,Pe)}function e(u,t){t=void 0!==t?t:{};var l={},n={start:Nn},e=Nn,i=function(t,n){return{start:t,defs:n}},a=function(t){return t},c=function(t){for(var n={},e=0;e<t.length;e++){var r=t[e].pvar;r in n?An("Multiple definition for "+r):n[r]=t[e].def}return n},s=zn("process definition"),p=":=",f=bn(":=",!1),h=function(t,n){return{pvar:t.pvar,def:{args:t.args,body:n}}},d=zn("term"),g=function(t,n){return n},v=function(t,n){return be(t,n)},m=function(t){return xe([t])},y="(",x=bn("(",!1),C=")",w=bn(")",!1),A=function(t){return t},b=function(t){return xe([t])},r=zn("process call"),o=function(t,n){return t.type="PiCall",n&&(t.pos={x:n.x,y:n.y,fixed:!0}),xe([t])},P=zn("fixed position"),_="@(",k=bn("@(",!1),z=",",$=bn(",",!1),S=function(t,n){return{x:t,y:n}},j=/^[+\-]/,E=Pn(["+","-"],!1,!1),I=/^[0-9]/,N=Pn([["0","9"]],!1,!1),O=function(){return parseInt(xn())},T=function(t,n){return n},F=function(t,n){return Ce(ye(t,n))},L=zn("factor"),R=".",G=bn(".",!1),q=function(t,n){return n},M=function(t,n){return null==n&&(n=xe([])),{action:t,cont:n}},W=function(t){return Ce([t])},U=zn("continuation"),Z=function(t){return xe([t])},H=zn("replicated process"),J="*",D=bn("*",!1),B=function(t){1!=t.components.length&&An("Only guarded replication is supported!");var n=t.components[0];return"Alt"!=n.type&&An("Only guarded replication is supported!"),we(n.components)},K=zn("action prefix"),Y=zn("input action"),Q=function(t,n,e){return{channel:t,port:null==n?"":n,type:"input",args:me(e),loc:Cn()}},V=zn("output action"),X="<",tt=bn("<",!1),nt=">",et=bn(">",!1),rt=function(t,n,e){return{channel:t,port:null==n?"":n,type:"output",args:me(e),loc:Cn()}},ot=function(){return{type:"tau",loc:Cn()}},it="@",at=bn("@",!1),ct=function(t){return t},st=function(t,n){return{pvar:t,args:me(n),loc:Cn()}},ut=zn("restriction"),lt=function(t,n){return 0==t.length?n:"New"==n.type?{type:"New",names:t.concat(n.names),proc:n.proc}:{type:"New",names:t,proc:n}},pt=function(t){return t},ft=zn("arguments list"),ht="[",dt=bn("[",!1),gt="]",vt=bn("]",!1),mt=function(t){return me(t)},yt=zn("list of names"),xt=function(t,n){return n},Ct=function(t,n){return n.unshift(t),n},wt=function(t){return{name:t,loc:Cn()}},At=zn("process identifier"),bt=/^[A-Z]/,Pt=Pn([["A","Z"]],!1,!1),_t=/^[a-zA-Z0-9'_]/,kt=Pn([["a","z"],["A","Z"],["0","9"],"'","_"],!1,!1),zt=zn("name"),$t=/^[a-z]/,St=Pn([["a","z"]],!1,!1),jt="tau",Et=bn("tau",!1),It="τ",Nt=bn("τ",!1),Ot="|",Tt=bn("|",!1),Ft="‖",Lt=bn("‖",!1),Rt="+",Gt=bn("+",!1),qt="new",Mt=bn("new",!1),Wt="ν",Ut=bn("ν",!1),Zt=function(){return xe([])},Ht="zero",Jt=bn("zero",!1),Dt="0",Bt=bn("0",!1),Kt=zn("spaces"),Yt=/^[ \n\t]/,Qt=Pn([" ","\n","\t"],!1,!1),Vt=zn("space"),Xt=zn("comment"),tn="/*",nn=bn("/*",!1),en="*/",rn=bn("*/",!1),on=_n(),an="//",cn=bn("//",!1),sn=/^[^\n]/,un=Pn(["\n"],!0,!1),ln="\n",pn=bn("\n",!1),fn=0,hn=0,dn=[{line:1,column:1}],gn=0,vn=[],mn=0,yn;if("startRule"in t){if(!(t.startRule in n))throw new Error("Can't start parsing from rule \""+t.startRule+'".');e=n[t.startRule]}function xn(){return u.substring(hn,fn)}function Cn(){return Sn(hn,fn)}function wn(t,n){throw n=void 0!==n?n:Sn(hn,fn),In([zn(t)],u.substring(hn,fn),n)}function An(t,n){throw En(t,n=void 0!==n?n:Sn(hn,fn))}function bn(t,n){return{type:"literal",text:t,ignoreCase:n}}function Pn(t,n,e){return{type:"class",parts:t,inverted:n,ignoreCase:e}}function _n(){return{type:"any"}}function kn(){return{type:"end"}}function zn(t){return{type:"other",description:t}}function $n(t){var n=dn[t],e;if(n)return n;for(e=t-1;!dn[e];)e--;for(n={line:(n=dn[e]).line,column:n.column};e<t;)10===u.charCodeAt(e)?(n.line++,n.column=1):n.column++,e++;return dn[t]=n}function Sn(t,n){var e=$n(t),r=$n(n);return{start:{offset:t,line:e.line,column:e.column},end:{offset:n,line:r.line,column:r.column}}}function jn(t){fn<gn||(gn<fn&&(gn=fn,vn=[]),vn.push(t))}function En(t,n){return new Pe(t,null,null,n)}function In(t,n,e){return new Pe(Pe.buildMessage(t,n),t,n,e)}function Nn(){var t,n,e,r,o;return t=fn,t=(n=he())!==l&&(e=Fn())!==l&&(r=he())!==l&&(o=On())!==l?(hn=t,n=i(e,o)):(fn=t,l)}function On(){var t,n,e,r,o;for(n=[],e=t=fn,e=(r=Tn())!==l&&(o=he())!==l?(hn=e,r=a(r)):(fn=e,l);e!==l;)n.push(e),e=fn,e=(r=Tn())!==l&&(o=he())!==l?(hn=e,r=a(r)):(fn=e,l);return n!==l&&(hn=t,n=c(n)),t=n}function Tn(){var t,n,e,r,o,i;return mn++,t=fn,t=(n=Vn())!==l&&(e=he())!==l?(u.substr(fn,2)===p?(r=p,fn+=2):(r=l,0===mn&&jn(f)),r!==l&&(o=he())!==l&&(i=Mn())!==l?(hn=t,n=h(n,i)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(s)),t}function Fn(){var t,n,e,r,o,i,a,c;if(mn++,t=fn,(n=Ln())!==l){for(e=[],r=fn,r=(o=he())!==l&&(i=se())!==l&&(a=he())!==l&&(c=Ln())!==l?(hn=r,o=g(n,c)):(fn=r,l);r!==l;)e.push(r),r=fn,r=(o=he())!==l&&(i=se())!==l&&(a=he())!==l&&(c=Ln())!==l?(hn=r,o=g(n,c)):(fn=r,l);t=e!==l?(hn=t,n=v(n,e)):(fn=t,l)}else fn=t,t=l;return mn--,t===l&&(n=l,0===mn&&jn(d)),t}function Ln(){var t,n,e,r,o,i;return mn++,(t=pe())===l&&(t=Rn())===l&&(t=fn,(n=Xn())!==l&&(hn=t,n=m(n)),(t=n)===l&&(t=fn,(n=Jn())!==l&&(hn=t,n=m(n)),(t=n)===l&&(t=fn,40===u.charCodeAt(fn)?(n=y,fn++):(n=l,0===mn&&jn(x)),(t=n!==l&&(e=he())!==l&&(r=Fn())!==l&&(o=he())!==l?(41===u.charCodeAt(fn)?(i=C,fn++):(i=l,0===mn&&jn(w)),i!==l?(hn=t,n=A(r)):(fn=t,l)):(fn=t,l))===l&&(t=fn,(n=Mn())!==l&&(hn=t,n=b(n)),t=n)))),mn--,t===l&&(n=l,0===mn&&jn(d)),t}function Rn(){var t,n,e;return mn++,t=fn,t=(n=Vn())!==l?((e=Gn())===l&&(e=null),e!==l?(hn=t,n=o(n,e)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(r)),t}function Gn(){var t,n,e,r,o,i,a,c,s;return mn++,t=fn,u.substr(fn,2)===_?(n=_,fn+=2):(n=l,0===mn&&jn(k)),t=n!==l&&(e=he())!==l&&(r=qn())!==l&&(o=he())!==l?(44===u.charCodeAt(fn)?(i=z,fn++):(i=l,0===mn&&jn($)),i!==l&&(a=qn())!==l&&(c=he())!==l?(41===u.charCodeAt(fn)?(s=C,fn++):(s=l,0===mn&&jn(w)),s!==l?(hn=t,n=S(r,a)):(fn=t,l)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(P)),t}function qn(){var t,n,e,r;if(t=fn,j.test(u.charAt(fn))?(n=u.charAt(fn),fn++):(n=l,0===mn&&jn(E)),n===l&&(n=null),n!==l){if(e=[],I.test(u.charAt(fn))?(r=u.charAt(fn),fn++):(r=l,0===mn&&jn(N)),r!==l)for(;r!==l;)e.push(r),I.test(u.charAt(fn))?(r=u.charAt(fn),fn++):(r=l,0===mn&&jn(N));else e=l;t=e!==l?(hn=t,n=O()):(fn=t,l)}else fn=t,t=l;return t}function Mn(){var t,n,e,r,o,i,a,c;if(t=fn,(n=Wn())!==l){for(e=[],r=fn,r=(o=he())!==l&&(i=ue())!==l&&(a=he())!==l&&(c=Wn())!==l?(hn=r,o=T(n,c)):(fn=r,l);r!==l;)e.push(r),r=fn,r=(o=he())!==l&&(i=ue())!==l&&(a=he())!==l&&(c=Wn())!==l?(hn=r,o=T(n,c)):(fn=r,l);t=e!==l?(hn=t,n=F(n,e)):(fn=t,l)}else fn=t,t=l;return t}function Wn(){var t,n,e,r,o,i,a;return mn++,t=fn,t=(n=Dn())!==l&&(e=he())!==l?(r=fn,46===u.charCodeAt(fn)?(o=R,fn++):(o=l,0===mn&&jn(G)),(r=o!==l&&(i=he())!==l&&(a=Zn())!==l?(hn=r,o=q(n,a)):(fn=r,l))===l&&(r=null),r!==l?(hn=t,n=M(n,r)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(L)),t}function Un(){var t,n;return t=fn,(n=Wn())!==l&&(hn=t,n=W(n)),t=n}function Zn(){var t,n;return mn++,(t=pe())===l&&(t=Xn())===l&&(t=Hn()),mn--,t===l&&(n=l,0===mn&&jn(U)),t}function Hn(){var t,n,e,r,o,i;return(t=Rn())===l&&(t=fn,40===u.charCodeAt(fn)?(n=y,fn++):(n=l,0===mn&&jn(x)),(t=n!==l&&(e=he())!==l&&(r=Fn())!==l&&(o=he())!==l?(41===u.charCodeAt(fn)?(i=C,fn++):(i=l,0===mn&&jn(w)),i!==l?(hn=t,n=A(r)):(fn=t,l)):(fn=t,l))===l&&(t=fn,(n=Un())!==l&&(hn=t,n=Z(n)),t=n)),t}function Jn(){var t,n,e,r;return mn++,t=fn,42===u.charCodeAt(fn)?(n=J,fn++):(n=l,0===mn&&jn(D)),t=n!==l&&(e=he())!==l&&(r=Hn())!==l?(hn=t,n=B(r)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(H)),t}function Dn(){var t,n;return mn++,(t=Kn())===l&&(t=Bn())===l&&(t=Yn()),mn--,t===l&&(n=l,0===mn&&jn(K)),t}function Bn(){var t,n,e,r,o,i,a,c,s;return mn++,t=fn,t=(n=ae())!==l?((e=Qn())===l&&(e=null),e!==l&&(r=he())!==l?(40===u.charCodeAt(fn)?(o=y,fn++):(o=l,0===mn&&jn(x)),o!==l&&(i=he())!==l?((a=ee())===l&&(a=null),a!==l&&(c=he())!==l?(41===u.charCodeAt(fn)?(s=C,fn++):(s=l,0===mn&&jn(w)),s!==l?(hn=t,n=Q(n,e,a)):(fn=t,l)):(fn=t,l)):(fn=t,l)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(Y)),t}function Kn(){var t,n,e,r,o,i,a,c,s;return mn++,t=fn,t=(n=ae())!==l?((e=Qn())===l&&(e=null),e!==l&&(r=he())!==l?(60===u.charCodeAt(fn)?(o=X,fn++):(o=l,0===mn&&jn(tt)),o!==l&&(i=he())!==l?((a=ee())===l&&(a=null),a!==l&&(c=he())!==l?(62===u.charCodeAt(fn)?(s=nt,fn++):(s=l,0===mn&&jn(et)),s!==l?(hn=t,n=rt(n,e,a)):(fn=t,l)):(fn=t,l)):(fn=t,l)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(V)),t}function Yn(){var t,n;return t=fn,(n=ce())!==l&&(hn=t,n=ot()),t=n}function Qn(){var t,n,e;return t=fn,64===u.charCodeAt(fn)?(n=it,fn++):(n=l,0===mn&&jn(at)),t=n!==l&&(e=ae())!==l?(hn=t,n=ct(e)):(fn=t,l)}function Vn(){var t,n,e,r;return t=fn,t=(n=ie())!==l&&(e=he())!==l?((r=ne())===l&&(r=null),r!==l?(hn=t,n=st(n,r)):(fn=t,l)):(fn=t,l)}function Xn(){var t,n,e,r,o,i,a,c;return mn++,t=fn,t=(n=le())!==l&&(e=he())!==l&&(r=te())!==l&&(o=he())!==l?(46===u.charCodeAt(fn)?(i=R,fn++):(i=l,0===mn&&jn(G)),i!==l&&(a=he())!==l?((c=Zn())===l&&(c=Xn()),c!==l?(hn=t,n=lt(r,c)):(fn=t,l)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(ut)),t}function te(){var t,n,e,r,o,i;return t=fn,40===u.charCodeAt(fn)?(n=y,fn++):(n=l,0===mn&&jn(x)),(t=n!==l&&(e=he())!==l&&(r=re())!==l&&(o=he())!==l?(41===u.charCodeAt(fn)?(i=C,fn++):(i=l,0===mn&&jn(w)),i!==l?(hn=t,n=pt(r)):(fn=t,l)):(fn=t,l))===l&&(t=re()),t}function ne(){var t,n,e,r,o,i;return mn++,t=fn,91===u.charCodeAt(fn)?(n=ht,fn++):(n=l,0===mn&&jn(dt)),t=n!==l&&(e=he())!==l?((r=ee())===l&&(r=null),r!==l&&(o=he())!==l?(93===u.charCodeAt(fn)?(i=gt,fn++):(i=l,0===mn&&jn(vt)),i!==l?(hn=t,n=mt(r)):(fn=t,l)):(fn=t,l)):(fn=t,l),mn--,t===l&&(n=l,0===mn&&jn(ft)),t}function ee(){var t,n,e,r,o,i,a,c;if(mn++,t=fn,(n=ae())!==l)if((e=he())!==l){for(r=[],o=fn,44===u.charCodeAt(fn)?(i=z,fn++):(i=l,0===mn&&jn($)),o=i!==l&&(a=he())!==l&&(c=ae())!==l?(hn=o,i=xt(n,c)):(fn=o,l);o!==l;)r.push(o),o=fn,44===u.charCodeAt(fn)?(i=z,fn++):(i=l,0===mn&&jn($)),o=i!==l&&(a=he())!==l&&(c=ae())!==l?(hn=o,i=xt(n,c)):(fn=o,l);t=r!==l?(hn=t,n=Ct(n,r)):(fn=t,l)}else fn=t,t=l;else fn=t,t=l;return mn--,t===l&&(n=l,0===mn&&jn(yt)),t}function re(){var t,n,e,r,o,i,a,c;if(mn++,t=fn,(n=oe())!==l)if((e=he())!==l){for(r=[],o=fn,44===u.charCodeAt(fn)?(i=z,fn++):(i=l,0===mn&&jn($)),o=i!==l&&(a=he())!==l&&(c=oe())!==l?(hn=o,i=xt(n,c)):(fn=o,l);o!==l;)r.push(o),o=fn,44===u.charCodeAt(fn)?(i=z,fn++):(i=l,0===mn&&jn($)),o=i!==l&&(a=he())!==l&&(c=oe())!==l?(hn=o,i=xt(n,c)):(fn=o,l);t=r!==l?(hn=t,n=Ct(n,r)):(fn=t,l)}else fn=t,t=l;else fn=t,t=l;return mn--,t===l&&(n=l,0===mn&&jn(yt)),t}function oe(){var t,n;return t=fn,(n=ae())!==l&&(hn=t,n=wt(n)),t=n}function ie(){var t,n,e,r,o;if(mn++,n=t=fn,bt.test(u.charAt(fn))?(e=u.charAt(fn),fn++):(e=l,0===mn&&jn(Pt)),e!==l){for(r=[],_t.test(u.charAt(fn))?(o=u.charAt(fn),fn++):(o=l,0===mn&&jn(kt));o!==l;)r.push(o),_t.test(u.charAt(fn))?(o=u.charAt(fn),fn++):(o=l,0===mn&&jn(kt));n=r!==l?e=[e,r]:(fn=n,l)}else fn=n,n=l;return t=n!==l?u.substring(t,fn):n,mn--,t===l&&(n=l,0===mn&&jn(At)),t}function ae(){var t,n,e,r,o;if(mn++,n=t=fn,$t.test(u.charAt(fn))?(e=u.charAt(fn),fn++):(e=l,0===mn&&jn(St)),e!==l){for(r=[],_t.test(u.charAt(fn))?(o=u.charAt(fn),fn++):(o=l,0===mn&&jn(kt));o!==l;)r.push(o),_t.test(u.charAt(fn))?(o=u.charAt(fn),fn++):(o=l,0===mn&&jn(kt));n=r!==l?e=[e,r]:(fn=n,l)}else fn=n,n=l;return t=n!==l?u.substring(t,fn):n,mn--,t===l&&(n=l,0===mn&&jn(zt)),t}function ce(){var t;return u.substr(fn,3)===jt?(t=jt,fn+=3):(t=l,0===mn&&jn(Et)),t===l&&(964===u.charCodeAt(fn)?(t=It,fn++):(t=l,0===mn&&jn(Nt))),t}function se(){var t;return 124===u.charCodeAt(fn)?(t=Ot,fn++):(t=l,0===mn&&jn(Tt)),t===l&&(8214===u.charCodeAt(fn)?(t=Ft,fn++):(t=l,0===mn&&jn(Lt))),t}function ue(){var t;return 43===u.charCodeAt(fn)?(t=Rt,fn++):(t=l,0===mn&&jn(Gt)),t}function le(){var t;return u.substr(fn,3)===qt?(t=qt,fn+=3):(t=l,0===mn&&jn(Mt)),t===l&&(957===u.charCodeAt(fn)?(t=Wt,fn++):(t=l,0===mn&&jn(Ut))),t}function pe(){var t,n;return t=fn,(n=fe())!==l&&(hn=t,n=Zt()),t=n}function fe(){var t;return u.substr(fn,4)===Ht?(t=Ht,fn+=4):(t=l,0===mn&&jn(Jt)),t===l&&(48===u.charCodeAt(fn)?(t=Dt,fn++):(t=l,0===mn&&jn(Bt))),t}function he(){var t,n;for(t=[],(n=ge())===l&&(n=ve());n!==l;)t.push(n),(n=ge())===l&&(n=ve());return t}function de(){var t,n;for(mn++,t=[],Yt.test(u.charAt(fn))?(n=u.charAt(fn),fn++):(n=l,0===mn&&jn(Qt));n!==l;)t.push(n),Yt.test(u.charAt(fn))?(n=u.charAt(fn),fn++):(n=l,0===mn&&jn(Qt));return mn--,t===l&&(n=l,0===mn&&jn(Kt)),t}function ge(){var t,n;return mn++,Yt.test(u.charAt(fn))?(t=u.charAt(fn),fn++):(t=l,0===mn&&jn(Qt)),mn--,t===l&&(n=l,0===mn&&jn(Vt)),t}function ve(){var t,n,e,r,o,i;if(mn++,t=fn,u.substr(fn,2)===tn?(n=tn,fn+=2):(n=l,0===mn&&jn(nn)),n!==l){for(e=[],o=r=fn,mn++,u.substr(fn,2)===en?(i=en,fn+=2):(i=l,0===mn&&jn(rn)),mn--,r=(o=i===l?void 0:(fn=o,l))!==l?(u.length>fn?(i=u.charAt(fn),fn++):(i=l,0===mn&&jn(on)),i!==l?o=[o,i]:(fn=r,l)):(fn=r,l);r!==l;)e.push(r),o=r=fn,mn++,u.substr(fn,2)===en?(i=en,fn+=2):(i=l,0===mn&&jn(rn)),mn--,r=(o=i===l?void 0:(fn=o,l))!==l?(u.length>fn?(i=u.charAt(fn),fn++):(i=l,0===mn&&jn(on)),i!==l?o=[o,i]:(fn=r,l)):(fn=r,l);t=e!==l?(u.substr(fn,2)===en?(r=en,fn+=2):(r=l,0===mn&&jn(rn)),r!==l?n=[n,e,r]:(fn=t,l)):(fn=t,l)}else fn=t,t=l;if(t===l)if(t=fn,u.substr(fn,2)===an?(n=an,fn+=2):(n=l,0===mn&&jn(cn)),n!==l){for(e=[],sn.test(u.charAt(fn))?(r=u.charAt(fn),fn++):(r=l,0===mn&&jn(un));r!==l;)e.push(r),sn.test(u.charAt(fn))?(r=u.charAt(fn),fn++):(r=l,0===mn&&jn(un));t=e!==l?(10===u.charCodeAt(fn)?(r=ln,fn++):(r=l,0===mn&&jn(pn)),r===l&&(r=null),r!==l?n=[n,e,r]:(fn=t,l)):(fn=t,l)}else fn=t,t=l;return mn--,t===l&&(n=l,0===mn&&jn(Xt)),t}function me(t){return null==t?[]:t}function ye(t,n){return n.unshift(t),n}function xe(t){return{type:"Parall",components:t}}function Ce(t){return{type:"Alt",components:t}}function we(t){return{type:"Bang",components:t}}function Ae(t,n){return t.type!=n.type&&An("Merging uncompatible objects "+t.type+" and "+n.type),{type:t.type,components:t.components.concat(n.components)}}function be(t,n){var e=t;for(var r in n)e=Ae(e,n[r]);return e}if((yn=e())!==l&&fn===u.length)return yn;throw yn!==l&&fn<u.length&&jn(kn()),In(vn,gn<u.length?u.charAt(gn):null,gn<u.length?Sn(gn,gn+1):Sn(gn,gn))}n(Pe,Error),Pe.buildMessage=function(t,n){var e={literal:function(t){return'"'+o(t.text)+'"'},class:function(t){var n="",e;for(e=0;e<t.parts.length;e++)n+=t.parts[e]instanceof Array?i(t.parts[e][0])+"-"+i(t.parts[e][1]):i(t.parts[e]);return"["+(t.inverted?"^":"")+n+"]"},any:function(t){return"any character"},end:function(t){return"end of input"},other:function(t){return t.description}};function r(t){return t.charCodeAt(0).toString(16).toUpperCase()}function o(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(t){return"\\x0"+r(t)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(t){return"\\x"+r(t)})}function i(t){return t.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(t){return"\\x0"+r(t)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(t){return"\\x"+r(t)})}function a(t){return e[t.type](t)}function c(t){var n=new Array(t.length),e,r;for(e=0;e<t.length;e++)n[e]=a(t[e]);if(n.sort(),0<n.length){for(r=e=1;e<n.length;e++)n[e-1]!==n[e]&&(n[r]=n[e],r++);n.length=r}switch(n.length){case 1:return n[0];case 2:return n[0]+" or "+n[1];default:return n.slice(0,-1).join(", ")+", or "+n[n.length-1]}}function s(t){return t?'"'+o(t)+'"':"end of input"}return"Expected "+c(t)+" but "+s(n)+" found."},t.parsePi={SyntaxError:Pe,parse:e}}(this),function(){function lookup(t){for(var n=arguments.length-1;!(n<1||t in arguments[n]);)n--;if(n<1)throw Error("Unknown name "+t);return arguments[n][t]}function compile(txt){var ast=txt;"string"==typeof ast&&(ast=parsePi.parse(txt));var prog={defs:{},init:[],sourceCode:txt},defs=ast.defs,cdefs=[];for(var pvar in defs){var comp=defs[pvar].body.components,ccomp=[],fargs={};for(var n in defs[pvar].args)fargs[defs[pvar].args[n]]="x"+n;for(var c in comp)if("input"===comp[c].action.type){var aargs={};for(var n in comp[c].action.args)aargs[comp[c].action.args[n]]="y"+n;var cinp="Receive("+fargs[comp[c].action.channel]+", '"+comp[c].action.port+"', ",procs;cinp+="function("+comp[c].action.args.map(function(t,n){return"y"+n}).join(",")+") {\n";var cargs={};if("New"===comp[c].cont.type){var ns=comp[c].cont.names;for(var n in ns)cargs[ns[n].name]="z"+n,cinp+="var z"+n+' = new Channel("'+ns[n].name+'");\n';procs=comp[c].cont.proc.components}else{if("Parall"!==comp[c].cont.type)throw Error("Expecting a normalised process! line: "+comp[c].action.loc.start.line);procs=comp[c].cont.components}var cconts=[];for(var pc in procs){if("PiCall"!==procs[pc].type)throw Error("Unexpected "+procs[pc].type+" at line "+procs[pc].loc.start.line);var callargs=procs[pc].args;for(var a in callargs)callargs[a]=lookup(callargs[a],fargs,aargs,cargs);if(procs[pc].pos)throw stxerr("Position annotations can only be used in the initial process",procs[pc].loc);cconts.push("ProcCall('"+procs[pc].pvar+"', ["+callargs.join(",")+"])")}cinp+="return [\n"+cconts.join(",")+"\n];})",ccomp.push(cinp)}else if("output"===comp[c].action.type){var cout="Send("+fargs[comp[c].action.channel]+", '"+comp[c].action.port+"', [",aargs=[];for(var n in comp[c].action.args)aargs.push(lookup(comp[c].action.args[n],fargs));if(cout+=aargs.join(",")+"]",comp[c].cont&&("Parall"!==comp[c].cont.type||0<comp[c].cont.components.length)){var procs;cout+=", function() {\n";var cargs={};if("New"===comp[c].cont.type){var ns=comp[c].cont.names;for(var n in ns)cargs[ns[n].name]="z"+n,cout+="var z"+n+' = new Channel("'+ns[n].name+'");\n';procs=comp[c].cont.proc.components}else{if("Parall"!==comp[c].cont.type)throw Error("Expecting a normalised process! line: "+comp[c].action.loc.start.line);procs=comp[c].cont.components}var cconts=[];for(var pc in procs){if("PiCall"!==procs[pc].type)throw Error("Unexpected "+procs[pc].type+" at line "+procs[pc].loc.start.line);var callargs=procs[pc].args;for(var a in callargs)callargs[a]=lookup(callargs[a],fargs,cargs);if(procs[pc].pos)throw stxerr("Position annotations can only be used in the initial process",procs[pc].loc);cconts.push("ProcCall('"+procs[pc].pvar+"', ["+callargs.join(",")+"])")}cout+="return [\n"+cconts.join(",")+"\n];}"}cout+=")",ccomp.push(cout)}else if("tau"===comp[c].action.type){var cout="Tau(";if(comp[c].cont&&("Parall"!==comp[c].cont.type||0<comp[c].cont.components.length)){var procs;cout+="function() {\n";var cargs={};if("New"===comp[c].cont.type){var ns=comp[c].cont.names;for(var n in ns)cargs[ns[n].name]="z"+n,cout+="var z"+n+' = new Channel("'+ns[n].name+'");\n';procs=comp[c].cont.proc.components}else{if("Parall"!==comp[c].cont.type)throw Error("Expecting a normalised process! line: "+comp[c].action.loc.start.line);procs=comp[c].cont.components}var cconts=[];for(var pc in procs){if("PiCall"!==procs[pc].type)throw Error("Unexpected "+procs[pc].type+" at line "+procs[pc].loc.start.line);var callargs=procs[pc].args;for(var a in callargs)callargs[a]=lookup(callargs[a],fargs,cargs);if(procs[pc].pos)throw stxerr("Position annotations can only be used in the initial process",procs[pc].loc);cconts.push("ProcCall('"+procs[pc].pvar+"', ["+callargs.join(",")+"])")}cout+="return [\n"+cconts.join(",")+"\n];}"}cout+=")",ccomp.push(cout)}var alt="function(";alt+=defs[pvar].args.map(function(t,n){return"x"+n}).join(","),alt+="){return Alt([\n",alt+=ccomp.join(",\n"),alt+="\n]);}",cdefs.push("'"+pvar+"': "+alt)}prog.init=collect_procs(ast.start);var str_defs="PiDefs({"+cdefs.join(",\n")+"})";return prog.defs=eval(str_defs),prog}function collect_procs(t,n,e){if(n=n||{},e=e||{},"New"===t.type){var r=$.extend({},e);for(var o in t.names)r[t.names[o].name]=new Channel(t.names[o].name);return collect_procs(t.proc,n,r)}if("Parall"===t.type){var i=[];for(var a in t.components){var c=collect_procs(t.components[a],n,e);i=i.concat(c)}return i}if("PiCall"===t.type){var s=t.args;for(var u in s)try{s[u]=lookup(s[u],n,e)}catch(t){n[s[u]]=new Channel(s[u],!0),s[u]=n[s[u]]}return[ProcCall(t.pvar,s,t.pos)]}if("Alt"===t.type)throw Error("Sums not supported at top level. Wrap them in definitions.")}function stxerr(t,n){var e=new Error(t);return e.location=n,e}function validate_syntax(t){for(var n in t.defs){var e=t.defs[n].body;if("Alt"!==e.type)throw stxerr("Normalise your definitions! Your definition for "+n+" does not have a sum at the top level.",e.loc);for(var r in e.components)check_free_names(e.components[r],t.defs[n].args)}}function check_free_names(t,n){if("New"===t.type)check_free_names(t.proc,n.concat(t.names.map(function(t){return t.name})));else if("PiCall"===t.type){for(var e in t.args)if(n.indexOf(t.args[e])<0)throw stxerr("Name '"+t.args[e]+"' out of scope.",t.loc)}else if("Parall"===t.type)for(var e in t.components)check_free_names(t.components[e],n);else{if("Alt"===t.type)throw stxerr("Normalize your code! Sums only allowed at the top-level of a definition!",t.loc);if(void 0!==t.action)if("tau"===t.action.type)check_free_names(t.cont,n);else{if(n.indexOf(t.action.channel)<0)throw stxerr("Name '"+t.action.channel+"' out of scope.",t.loc);if("input"===t.action.type)check_free_names(t.cont,n.concat(t.action.args));else if("output"===t.action.type){for(var e in t.args)if(n.indexOf(t.args[e])<0)throw stxerr("Name '"+t.args[e]+"' out of scope.",t.loc);check_free_names(t.cont,n)}}}}window.parsePi.compile=compile,window.parsePi.validate=validate_syntax,window.parsePi.compileAndCheck=function(t){return validate_syntax(t=parsePi.parse(t)),compile(t)}}();var gistUrlPattern=/^(https?:\/\/)?gist\.github\.com.*\/([a-zA-Z0-9]*)$/;function suiteFromGist(t,o){var i={source:"gist",successful:!0,programs:{}},a,c=function(){if(!0===i.successful){var n,t;i.url=a.html_url;try{n=JSON.parse(a.files["default.json"].content)}catch(t){n={}}for(var e in n.default&&n.default+".pi"in a.files&&(i.default=n.default),delete n.default,a.files)if(e.endsWith(".pi")){var r=e.slice(0,-3);if(i.programs[r]={name:r,sourceCode:a.files[e].content,options:$.extend({},n)},r+".json"in a.files)try{$.extend(i.programs[r].options,JSON.parse(a.files[r+".json"].content))}catch(t){console.log("Warning",t)}}Object.keys(i.programs).length<1?(i.successful=!1,i.error="empty",i.reason="This suite is empty. A program suite must contain at least one program."):i.default||(i.default=Object.keys(i.programs)[0])}return o(i)};if("string"!=typeof t)return t.files?(a=t,i.source="stored-gist",i.description=a.description,c()):(i.error="Wrong parameters",o(i));var n=(i.id=t).match(gistUrlPattern);n?t="https://api.github.com/gists/"+n[2]:t.startsWith("http")||(t="https://api.github.com/gists/"+t),$.ajax(t,{cache:!0,success:function(t){if(!0===(a=t).truncated)return i.error="truncated",i.reason="The gist is too big",c();i.description=t.description;var e=0,r=0;for(var n in t.files)r++,t.files[n].truncated?$.ajax(t.files[n].raw_url,{success:function(n){return function(t){n.content=t,n.truncated=!1}}(t.files[n]),complete:function(t,n){if(++e===r)return i.successful=i.successful&&"success"===n,c()}}):e++;return e===r?c():void 0},error:function(t,n,e){return i.successful=!1,i.error=n,i.reason=e,c()}})}function suiteSize(t){return Object.keys(t.programs).length}function createGistFromSuite(t,n,e){var r={description:t.description,public:!1,files:{}};for(var o in t.programs)r.files[o+".pi"]={content:t.programs[o].sourceCode},$.isEmptyObject(t.programs[o].options)||(r.files[o+".json"]={content:JSON.stringify(t.programs[o].options)});return $.ajax({url:"https://api.github.com/gists",type:"POST",data:JSON.stringify(r),success:n,error:e}),r}var Stargazer=function(){var t=/^(.*)_(\d*)$/,b="stargazer-viz",P="svg."+b,_="http://stargazer.emanueledosualdo.com";function k(t,n,e){if(!(this instanceof k))return new k(t,n,e);var r,o=+(e=$.extend({zoom:1,delay:500,gravity:!0,showLabels:!0,playOnLoad:!1,autoFreeze:!0,autoResize:!0},e)).zoom,i=e.palette?{palette:e.palette}:void 0,a=d3.select(t);a.selectAll(P).remove(),a.append("svg").classed(b,!0);var c=a.select(P);a.datum(this),void 0===n&&(n="0");var s=n,u=parsePi.compileAndCheck(s);(r=PiCalcSimulation(c,u,i)).scale(o);for(var l=10;0<l;--l)r.layout().tick();function p(){$(c.node()).height(function(){return $(this).parent().innerHeight()}).width(function(){return $(this).parent().innerWidth()}).attr("width",function(){return $(this).width()}).attr("height",function(){return $(this).height()}),r&&r.translate([c.attr("width")/2,c.attr("height")/2])}this.simulator=function(){return r},this.program=function(t){if(void 0===t)return s;u=parsePi.compileAndCheck(t),s=t,this.reset()},this.resizeCanvas=p,e.autoResize&&($(a.node()).on("div-resize",p),p()),this.gravity=function(t){if(void 0===t)return.05<r.layout().gravity();t?r.layout().gravity(.2).charge(-400).start():r.layout().gravity(1e-5).charge(-30).start()},this.gravity(e.gravity);var f=function(){return r.next(r.randomStrategy),this};this.step=f;var h=e.delay,d,g=!1,v=!1;this.running=function(){return g},this.delay=function(){return h};var m=$("<div class='controls'></div>").appendTo(a.node()),y=$("<div class='control play'></div>").click(function(){g?w.pause():w.play()}).appendTo(m),x=$("<div class='control open'></div>").click(function(){w.pause(),window.open(_+(e.link||"?program="+encodeURIComponent(s)))}).appendTo(m),C=$("<div class='control reset'></div>").click(function(){w.reset()}).appendTo(m);this.play=function(t){return(!g||void 0!==t&&+t!==h)&&(void 0!==t&&(h=+t),clearInterval(d),v||(d=setInterval(f,h)),y.removeClass("play").addClass("pause"),g=!0),this},this.delay=function(t){return void 0===t?h:(g?this.play(t):h=+t,this)},this.pause=function(){return clearInterval(d),y.removeClass("pause").addClass("play"),g=!1,this},this.freeze=function(){return v=!0,clearInterval(d),this},this.unfreeze=function(){return g&&v&&(d=setInterval(f,h)),v=!1,this},this.reset=function(){return this.pause(),c.selectAll("*").remove(),(r=PiCalcSimulation(c,u,i)).scale(o),this},e.playOnLoad&&this.play();var w=this;function A(){z(a.node())?w.freeze():w.unfreeze()}this.autoFreeze=A,e.autoFreeze&&$(a.node()).on("view-change",A),this.showLabels=function(t){return 0===arguments.length?c.classed("labels"):(c.classed("labels",t),this)},this.toggleLabels=function(){return c.classed("labels",!c.classed("labels")),this},this.showGlobals=function(t){return 0===arguments.length?c.classed("globals"):(c.classed("globals",t),this)},this.toggleGlobals=function(){return c.classed("globals",!c.classed("globals")),this},e.showLabels&&this.showLabels(e.showLabels),e.showGlobals&&this.showLabels(e.showGlobals)}function z(t){var n=t.getBoundingClientRect(),e=$(window),r=e.height(),o=e.width();return n.right<0||n.bottom<0||n.top>r||n.left>o}return k}();$(function(){var r=(o={},t),o;function i(t,n){t.name=t.name||n.default,t.sourceCode=n.programs[t.name].sourceCode,t.options=$.extend({},n.programs[t.name].options,t.options),t.options.link="?gist="+encodeURIComponent(t.sourceId)+"#"+t.name}function t(n,e){var r={name:void 0,sourceCode:"0",source:"none",sourceId:"",options:{}};r.options.gravity="false"!==n.attr("data-gravity");var t=n.attr("data-palette");if(t&&(r.options.palette={},t.split(";").map(function(t){var n=t.split(":");return[n[0].trim(),n[1].trim()]}).each(function(t){r.options.palette[t[0]]=t[1]})),r.options.showLabels="true"===n.attr("data-labels")||n.hasClass("labels"),r.options.showGlobals="true"===n.attr("data-globals")||n.hasClass("globals"),r.options.playOnLoad="true"===n.attr("data-play-on-load"),r.options.delay=n.attr("data-delay"),r.options.zoom=n.attr("data-zoom"),r.name=n.attr("data-program"),n.attr("data-gist")){if(r.source="gist",r.sourceId=n.attr("data-gist"),!(r.sourceId in o))return suiteFromGist(r.sourceId,function(t){if(t&&t.successful)return o[r.sourceId]=t,i(r,t),e(r);n.addClass("error")});i(r,o[r.sourceId])}else 0<n.find('script[type="text/x-stargazer"]').size()?(r.source="inline-script",r.sourceCode=n.find('script[type="text/x-stargazer"]').text()):0<$('script[type="text/x-stargazer"]#'+r.name).size()&&(r.source="script",r.sourceCode=$('script[type="text/x-stargazer"]#'+r.name).text());setTimeout(function(){return e(r)},0)}function n(t,n){var e;return function(){clearTimeout(e),e=setTimeout(t,n||250)}}$("div.stargazer").each(function(t){var n=$(this),e=this;n.addClass("loading").removeClass("error"),r(n,function(t){n.removeClass("loading");try{Stargazer(e,t.sourceCode,t.options)}catch(t){n.addClass("program error")}})}),$(window).resize(n(function(){$("div.stargazer").trigger("div-resize")})),$(window).scroll(n(function(){$("div.stargazer").trigger("view-change")}))});