]> gitweb.factorcode.org Git - factor.git/commitdiff
fjsc: moving resources around and added some help
authorchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 05:58:42 +0000 (05:58 +0000)
committerchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 05:58:42 +0000 (05:58 +0000)
apps/furnace-fjsc/furnace-fjsc.factor
apps/furnace-fjsc/repl.fhtml
apps/furnace-fjsc/resources/bootstrap.factor [deleted file]
apps/furnace-fjsc/resources/bootstrap.js [deleted file]
apps/furnace-fjsc/resources/jquery.js [deleted file]
libs/fjsc/resources/bootstrap.factor [new file with mode: 0644]
libs/fjsc/resources/bootstrap.js [new file with mode: 0644]
libs/fjsc/resources/jquery.js [new file with mode: 0644]

index a065bb56234ffded803225afaabe69f7777f2816..11056820320ca24c4f8c2644225a9625e0f43bf3 100644 (file)
@@ -70,7 +70,7 @@ USING: kernel html furnace xml io httpd sequences
 ! the 'fjsc' responder.
 "fjsc-resources" [
  [
-   "apps/furnace-fjsc/resources/" resource-path "doc-root" set
+   "libs/fjsc/resources/" resource-path "doc-root" set
    file-responder
  ] with-scope
 ] add-simple-responder
index 106ebc28933d50691dfafea9bffbf09e899cb5f6..3f6b842458bb5c454d7c2cef6f270c5e96654c62 100644 (file)
@@ -1,11 +1,36 @@
+<h1>Factor to Javascript Compiler</h1>
+<table border="0">
+<tr><td valign="top">
 <form id="toeval" onsubmit="factor.server_eval($('#code').get(0).value);return false;" method="post">
   <textarea name="code" id="code" cols="64" rows="10">
   </textarea>
   <input type="submit"/>
 </form>
-<div id="compiled">
-</div>
+<textarea id="compiled" cols="64" row="5">
+</textarea>
 <div id="stack">
 </div>
 <div id="playground">
-</div>
\ No newline at end of file
+</div>
+</td>
+<td valign="top">
+<p>More information on the Factor to Javascript compiler can be found at these blog posts:"
+<ul>
+<li><a href="http://www.bluishcoder.co.nz/2006/12/compiling-factor-to-javascript.html">Factor to Javascript Compiler</a></li>
+<li><a href="http://www.bluishcoder.co.nz/2006/12/factor-to-javascript-compiler-updates.html">Factor to Javascript Compiler Updates</a></li>
+</ul>
+</p>
+<p>Some useful words:
+<dl>
+<dt>vocabs ( -- seq )</dt>
+<dd>Return a sequence of available vocabularies</dd>
+<dt>words ( string -- seq )</dt>
+<dd>Return a sequence of words in the given vocabulary</dd>
+<dt>all-words ( -- seq )</dt>
+<dd>Return a sequence of all words</dd>
+</dl>
+</p>
+<p>The contents of <a href="/responder/fjsc-resources/bootstrap.factor">bootstrap.factor</a> have been loaded on startup.</p>
+</td>
+</tr>
+</table>
diff --git a/apps/furnace-fjsc/resources/bootstrap.factor b/apps/furnace-fjsc/resources/bootstrap.factor
deleted file mode 100644 (file)
index 7c16049..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-: alert ( string -- )
-  #! Display the string in an alert box
-  window { } "" "alert" { "string" } alien-invoke ;
-
-"browser-dom" in
-
-: elements ( string -- result )
-  #! Call JQuery's $ function
-  window { "result" } "" "$" { "string" } alien-invoke ;
-  
-: html ( string -- element ) 
-  #! Set the innerHTML of element using jQuery
-  { } "" "html" { "string" } alien-invoke ;
-
-: bind-event ( name element quot -- )
-  >function swap { } "" "bind" { "string" "function" } alien-invoke ;
-
-"scratchpad" in
-
-: example1 ( -- )
-  "<button id='test'>Press Me</button>" "#playground" elements html ;
-
-: example2 ( -- )
-  "click" "#test" elements [ "clicked" alert ] bind-event ;
-
-: example3 ( -- )
-  [
-    [
-      >r "click" "#test" elements r> [ continue ] curry bind-event
-      "Waiting for click on button" alert
-      continue
-    ] callcc0
-    drop "Click done!" alert 
-  ] callcc0 ;
-  
diff --git a/apps/furnace-fjsc/resources/bootstrap.js b/apps/furnace-fjsc/resources/bootstrap.js
deleted file mode 100644 (file)
index 50b330c..0000000
+++ /dev/null
@@ -1,577 +0,0 @@
-function Word(vocab, name, source, func) {
-  this.vocab = vocab;
-  this.name = name;
-  this.source = source;
-  this.func = func;
-}
-
-Word.prototype.execute = function(next) {
-  this.func(next);
-}
-
-Word.prototype.toString = function() {
-  var html = [];
-  html.push("<a href='/responder/browser/browse?vocab=")
-  html.push(this.vocab);
-  html.push("&amp;word=")
-  html.push(this.name);
-  html.push("'>")
-  html.push(this.name);
-  html.push("</a>");
-  return html.join("");
-}
-
-function Continuation() {
-  this.data_stack = [ ];
-  this.retain_stack = [ ];
-  this.next = false;
-  this.nesting = 0;
-}
-
-Continuation.prototype.clone = function() {
-  var c = new Continuation();
-  c.data_stack = this.data_stack.slice(0);
-  c.retain_stack = this.retain_stack.slice(0);
-  c.nesting = this.nesting;
-  c.next = this.next;
-  return c;
-}
-
-function Factor() {
-  this.vocabs = { scratchpad: { } };
-  this.in_vocab = "scratchpad";
-  this.using_vocabs = [ "scratchpad", "kernel","math","sequences","parser","alien","browser-dom", "words" ];
-  this.cont = new Continuation();
-}
-
-var factor = new Factor();
-
-Factor.prototype.call_next = function(next) {
-  if(next) {
-    if(this.cont.nesting++ > 150) {
-      this.cont.nesting = 0;
-      setTimeout(next, 0);
-   }
-    else {
-      next();
-    }
-  }
-}
-
-Factor.prototype.push_data = function(v, next) {
-  factor.cont.data_stack.push(v);
-  factor.call_next(next);
-}
-
-Factor.prototype.get_word = function(vocab,name) {
-  return factor.vocabs[vocab][name];
-}
-
-Factor.prototype.find_word = function(name) {
-  for(var v = 0; v<factor.using_vocabs.length; ++v) {
-    var w = factor.vocabs[factor.using_vocabs[v]][name];
-    if(w)
-      return w;
-  }
-  return false;
-}
-
-Factor.prototype.add_word = function(vocab,name, source, func) {
-  var v = factor.vocabs[vocab];
-  if(!v) {
-    v = { };
-    factor.vocabs[vocab] = v;
-  }
-  v[name] = new Word(vocab,name,source,func);
-}
-
-Factor.prototype.remove_word = function(vocab,name) {
-  var v = factor.vocabs[vocab];
-  if(!v) {
-    v = { };
-    factor.vocabs[vocab] = v;
-  }
-  delete v[name];
-}
-    
-Factor.prototype.define_word = function(name, source, func, next) {
-  factor.vocabs[factor.in_vocab][name] = new Word(factor.in_vocab, name, source, function(next) {
-    var old = factor.cont.next;
-    factor.cont.next = function() {
-      factor.cont.next = old;
-      factor.call_next(next);
-    }
-    func();
-  });
-  factor.call_next(next);
-}
-
-Factor.prototype.make_quotation = function(source, func) {
-  return new Word("quotations", "quotation", source, function(next) {
-    var old = factor.cont.next;
-    factor.cont.next = function() {
-      factor.cont.next = old;
-      factor.call_next(next);
-    }
-    func();
-  });
-}
-
-Factor.prototype.server_eval = function(text, next) {
-   var self = this;
-   $.post("/responder/fjsc/compile", { code: text }, function(result) {
-     document.getElementById('compiled').innerHTML="<pre>" + result + "</pre>";
-     document.getElementById('code').value="";
-     var func = eval(result);
-     factor.cont.next = function() { self.display_datastack(); } 
-     func(factor);
-     if(next) 
-       factor.call_next(next);
-   });
-}
-
-Factor.prototype.display_datastack = function() {
-   var html=[];
-   html.push("<table border='1'>")
-   for(var i = 0; i < this.cont.data_stack.length; ++i) {
-      html.push("<tr><td>")
-      html.push(this.cont.data_stack[i])
-      html.push("</td></tr>")
-   }
-   html.push("</table>")
-   document.getElementById('stack').innerHTML=html.join("");
-}
-
-/* Kernel Vocabulary */
-factor.add_word("kernel","dup", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  stack[stack.length] = stack[stack.length-1];
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "drop", "primitive", function(next) {
-  factor.cont.data_stack.pop();
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "nip", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  stack[stack.length-2] = stack[stack.length-1];
-  stack.pop();
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "over", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  stack[stack.length] = stack[stack.length-2];
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "swap", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  var temp = stack[stack.length-2];
-  stack[stack.length-2] = stack[stack.length-1];
-  stack[stack.length-1] = temp;
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", ">r", "primitive", function(next) {
-  var data_stack = factor.cont.data_stack;
-  var retain_stack = factor.cont.retain_stack;
-  retain_stack.push(data_stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "r>", "primitive", function(next) {
-  var data_stack = factor.cont.data_stack;
-  var retain_stack = factor.cont.retain_stack;
-  data_stack.push(retain_stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "call", "primitive", function(next) {
-  var quot = factor.cont.data_stack.pop();
-  quot.execute(next);
-});
-
-factor.add_word("kernel", "execute", "primitive", function(next) {
-  var quot = factor.cont.data_stack.pop();
-  quot.execute(next);
-});
-
-factor.add_word("kernel", "clear", "primitive", function(next) {
-  factor.cont.data_stack = [];
-  factor.cont.retain_stack = [];
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "if", "primitive", function(next) {  
-  var stack = factor.cont.data_stack;
-  var else_quot = stack.pop();
-  var then_quot = stack.pop();
-  var condition = stack.pop();
-  if(condition) {
-    then_quot.execute(next);
-  } else {
-    else_quot.execute(next);
-  }
-});
-
-factor.add_word("kernel", "f", "primitive", function(next) {  
-  factor.cont.data_stack.push(false);
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "t", "primitive", function(next) {  
-  factor.cont.data_stack.push(true);
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "=", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  stack.push(stack.pop()==stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("kernel", "bootstrap", "primitive", function(next) {  
-  factor.cont.data_stack.push("/responder/fjsc-resources/bootstrap.factor");
-  factor.get_word("parser", "run-file").execute(next);
-});
-
-factor.add_word("kernel", "callcc0", "primitive", function(next) {  
-  var data_stack = factor.cont.data_stack;
-  var quot = data_stack.pop();
-  var new_cont = factor.cont.clone();  
-  var old_next = factor.cont.next;
-  factor.cont.next = function() {
-      factor.cont.next = old_next;
-      factor.call_next(next);
-  }
-  new_cont.data_stack.push(factor.cont);
-  factor.cont = new_cont;
-  quot.execute(next);  
-});
-
-factor.add_word("kernel", "callcc1", "primitive", function(next) {  
-  factor.get_word("kernel", "callcc0").execute(next);
-});
-
-factor.add_word("kernel", "continue", "primitive", function(next) {  
-  var data_stack = factor.cont.data_stack;
-  var cont = data_stack.pop(); 
-  factor.cont = cont.clone();
-  factor.call_next(cont.next);
-});
-
-factor.add_word("kernel", "continue-with", "primitive", function(next) {  
-  var data_stack = factor.cont.data_stack;
-  var cont = data_stack.pop(); 
-  var data = data_stack.pop(); 
-  factor.cont = cont.clone();
-  factor.cont.data_stack.push(data);
-  factor.call_next(cont.next);
-});
-
-factor.add_word("kernel", "in", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var vocab = stack.pop();
-  var v = factor.vocabs[vocab];
-  if(!v) {
-    v = { };
-    factor.vocabs[vocab] = v;
-  }
-  factor.in_vocab = vocab;
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "current-vocab", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  stack.push(factor.in_vocab);
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "use", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var vocab = stack.pop();
-  var v = factor.vocabs[vocab];
-  if(!v) {
-    v = { };
-    factor.vocabs[vocab] = v;
-  }
-  factor.using_vocabs.push(vocab);
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "using", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var vocabs = stack.pop();
-  factor.using_vocabs = [];
-  for(var i=0;i<vocabs.length;++i) {  
-    var v = factor.vocabs[vocabs[i]];
-    if(!v) {
-      v = { };
-      factor.vocabs[vocabs[i]] = v;
-    }
-  }
-  factor.using_vocabs = vocabs;
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "current-using", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  stack.push(factor.using_vocabs);
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "forget", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var word = stack.pop();
-  factor.remove_word(word.vocab, word.name);
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", ">function", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var word = stack.pop();
-  stack.push(function() { word.func(function() { }) });
-  factor.call_next(next);  
-});
-
-factor.add_word("kernel", "curry", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var quot = stack.pop();
-  var value = stack.pop();
-  
-  stack.push(factor.make_quotation("quotation", function(next) {
-    factor.cont.data_stack.push(value);   
-    quot.execute(factor.cont.next);
-  }));
-  factor.call_next(next);
-});
-
-/* Math vocabulary */
-factor.add_word("math", "*", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  stack.push(stack.pop() * stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("math", "+", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  stack.push(stack.pop() + stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("math", "-", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  var v1 = stack.pop();
-  var v2 = stack.pop();
-  stack.push(v2 - v1);
-  factor.call_next(next);
-});
-
-factor.add_word("math", "/", "primitive", function(next) {
-  var stack = factor.cont.data_stack;
-  var v1 = stack.pop();
-  var v2 = stack.pop();
-  stack.push(v2 / v1);
-  factor.call_next(next);
-});
-
-factor.add_word("prettyprint", ".", "primitive", function(next) {
-  alert(factor.cont.data_stack.pop());
-  factor.call_next(next);
-});
-
-factor.add_word("parser", "run-file", "primitive", function(next) {  
-  var stack = factor.cont.data_stack;
-  var url = stack.pop();
-  $.get(url, function(result) {
-    factor.server_eval(result, next);
-  });
-});
-
-
-factor.add_word("alien", "alien-invoke", "primitive", function(next) {  
-  var stack = factor.cont.data_stack;
-  var arg_types = stack.pop();
-  var method_name = stack.pop();
-  var library_name = stack.pop();
-  var return_values = stack.pop();
-  var obj = stack.pop();
-  var args = [ ];
-  for(var i = 0; i < arg_types.length; ++i) {
-    args[i] = stack.pop();
-  }
-  var v = obj[method_name].apply(obj, args.reverse());
-  if(return_values.length > 0)
-    stack.push(v);
-  factor.call_next(next);
-});
-
-factor.add_word("alien", "alien-property", "primitive", function(next) {  
-  var stack = factor.cont.data_stack;
-  var obj = stack.pop();
-  var property_name = stack.pop();
-  var v = obj[property_name];
-  stack.push(v);
-  factor.call_next(next);
-});
-
-factor.add_word("alien", "set-alien-property", "primitive", function(next) {  
-  var stack = factor.cont.data_stack;
-  var obj = stack.pop();
-  var property_name = stack.pop();
-  var data = stack.pop();
-  obj[property_name] = v;
-  factor.call_next(next);
-});
-
-factor.add_word("words", "vocabs", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var result = [];
-  for(v in factor.vocabs) {
-    result.push(v);
-  }
-  stack.push(result);
-  factor.call_next(next);
-});
-
-factor.add_word("words", "words", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var vocab = factor.vocabs[stack.pop()];
-  var result = [];
-  for(w in vocab) {
-    result.push(vocab[w]);
-  }
-  stack.push(result);
-  factor.call_next(next);
-});
-
-factor.add_word("words", "all-words", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var result = [];
-  for(v in factor.vocabs) {
-    for(w in factor.vocabs[v]) {
-      result.push(factor.vocabs[v][w]);
-    }
-  }
-  stack.push(result);
-  factor.call_next(next);
-});
-
-/* Sequences vocabulary */
-factor.add_word("sequences", "nth", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  var index = stack.pop();
-  stack.push(seq[index]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "first", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[0]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "second", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[1]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "third", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[2]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "fourth", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[0]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "first2", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[0],seq[1]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "first3", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[0],seq[1],seq[2]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "first4", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var seq = stack.pop();
-  stack.push(seq[0],seq[1],seq[2],seq[3]);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "each", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var quot = stack.pop();
-  var seq = stack.pop();
-  for(var i=0;i<seq.length;++i) {  
-    stack.push(seq[i]);
-    quot.execute();
-  }
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "map", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var quot = stack.pop();
-  var seq = stack.pop();
-  var result = [ ];
-  for(var i=0;i<seq.length;++i) {  
-    stack.push(seq[i]);
-    quot.execute();
-    result[i]=stack.pop();
-  }
-  stack.push(result);
-  factor.call_next(next);
-});
-
-factor.add_word("sequences", "reduce", "primitive", function(next) {   
-  var stack = factor.cont.data_stack;
-  var quot = stack.pop();
-  var prev = stack.pop();
-  var seq = stack.pop();
-  for(var i=0;i<seq.length;++i) {  
-    stack.push(prev);
-    stack.push(seq[i]);
-    quot.execute();
-    prev=stack.pop();
-  }
-  stack.push(prev);
-  factor.call_next(next);
-});
-
-/* browser-dom vocab */
-factor.add_word("browser-dom", "window", "primitive", function(next) {  
-  factor.cont.data_stack.push(window);
-  factor.call_next(next);
-});
-
-factor.add_word("browser-dom", "document", "primitive", function(next) {  
-  factor.cont.data_stack.push(document);
-  factor.call_next(next);
-});
-
-/* Run initial factor code */
-$(document).ready(function() {
-  $.get("/responder/fjsc-resources/bootstrap.factor", function(result) {
-    factor.server_eval(result, function() { });
-  });
-});
diff --git a/apps/furnace-fjsc/resources/jquery.js b/apps/furnace-fjsc/resources/jquery.js
deleted file mode 100644 (file)
index 2531342..0000000
+++ /dev/null
@@ -1 +0,0 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('l(1T 1z.6=="Q"){1z.Q=1z.Q;u 6=q(a,c){l(a&&1T a=="q"&&6.C.1W)v 6(17).1W(a);a=a||6.1o||17;l(a.3E)v 6(6.1X(a,[]));l(c&&c.3E)v 6(c).1V(a);l(1z==7)v 1h 6(a,c);l(a.O==1C){u m=/^[^<]*(<.+>)[^>]*$/.3d(a);l(m)a=6.3D([m[1]])}7.1n(a.O==2z||a.D&&!a.1R&&a[0]!=Q&&a[0].1R?6.1X(a,[]):6.1V(a,c));u C=19[19.D-1];l(C&&1T C=="q")7.W(C);v 7};l(1T $!="Q")6.44$=$;u $=6;6.C=6.8b={3E:"1.0.3",5J:q(){v 7.D},1n:q(23){l(23&&23.O==2z){7.D=0;[].1k.16(7,23);v 7}G v 23==Q?6.1X(7,[]):7[23]},W:q(C,1g){v 6.W(7,C,1g)},8g:q(15){u 2j=-1;7.W(q(i){l(7==15)2j=i});v 2j},1t:q(1L,Y,B){v 1L.O!=1C||Y!=Q?7.W(q(){l(Y==Q)I(u E 1r 1L)6.1t(B?7.1a:7,E,1L[E]);G 6.1t(B?7.1a:7,1L,Y)}):6[B||"1t"](7[0],1L)},1f:q(1L,Y){v 7.1t(1L,Y,"26")},2B:q(e){e=e||7;u t="";I(u j=0;j<e.D;j++){u r=e[j].2f;I(u i=0;i<r.D;i++)l(r[i].1R!=8)t+=r[i].1R!=1?r[i].4Z:6.C.2B([r[i]])}v t},1Y:q(){u a=6.3D(19);v 7.W(q(){u b=a[0].3f(T);7.1i.2Y(b,7);24(b.2a)b=b.2a;b.4e(7)})},5g:q(){v 7.2T(19,T,1,q(a){7.4e(a)})},5h:q(){v 7.2T(19,T,-1,q(a){7.2Y(a,7.2a)})},5i:q(){v 7.2T(19,U,1,q(a){7.1i.2Y(a,7)})},5j:q(){v 7.2T(19,U,-1,q(a){7.1i.2Y(a,7.8j)})},4q:q(){v 7.1n(7.33.8k())},1V:q(t){v 7.2n(6.2r(7,q(a){v 6.1V(t,a)}),19)},4f:q(4D){v 7.2n(6.2r(7,q(a){v a.3f(4D!=Q?4D:T)}),19)},1c:q(t){v 7.2n(t.O==2z&&6.2r(7,q(a){I(u i=0;i<t.D;i++)l(6.1c(t[i],[a]).r.D)v a;v U})||t.O==8l&&(t?7.1n():[])||1T t=="q"&&6.2O(7,t)||6.1c(t,7).r,19)},2t:q(t){v 7.2n(t.O==1C?6.1c(t,7,U).r:6.2O(7,q(a){v a!=t}),19)},2g:q(t){v 7.2n(6.1X(7,t.O==1C?6.1V(t):t.O==2z?t:[t]),19)},4E:q(2u){v 2u?6.1c(2u,7).r.D>0:U},2T:q(1g,22,2X,C){u 4f=7.5J()>1;u a=6.3D(1g);v 7.W(q(){u 15=7;l(22&&7.2p.2b()=="8m"&&a[0].2p.2b()!="62"){u 29=7.4S("29");l(!29.D){15=17.5N("29");7.4e(15)}G 15=29[0]}I(u i=(2X<0?a.D-1:0);i!=(2X<0?2X:a.D);i+=2X){C.16(15,[4f?a[i].3f(T):a[i]])}})},2n:q(a,1g){u C=1g&&1g[1g.D-1];u 2d=1g&&1g[1g.D-2];l(C&&C.O!=1v)C=M;l(2d&&2d.O!=1v)2d=M;l(!C){l(!7.33)7.33=[];7.33.1k(7.1n());7.1n(a)}G{u 1Z=7.1n();7.1n(a);l(2d&&a.D||!2d)7.W(2d||C).1n(1Z);G 7.1n(1Z).W(C)}v 7}};6.1y=6.C.1y=q(15,E){l(19.D>1&&(E===M||E==Q))v 15;l(!E){E=15;15=7}I(u i 1r E)15[i]=E[i];v 15};6.1y({5C:q(){6.65=T;6.W(6.2e.5r,q(i,n){6.C[i]=q(a){u L=6.2r(7,n);l(a&&a.O==1C)L=6.1c(a,L).r;v 7.2n(L,19)}});6.W(6.2e.2o,q(i,n){6.C[i]=q(){u a=19;v 7.W(q(){I(u j=0;j<a.D;j++)6(a[j])[n](7)})}});6.W(6.2e.W,q(i,n){6.C[i]=q(){v 7.W(n,19)}});6.W(6.2e.1c,q(i,n){6.C[n]=q(23,C){v 7.1c(":"+n+"("+23+")",C)}});6.W(6.2e.1t,q(i,n){n=n||i;6.C[i]=q(h){v h==Q?7.D?7[0][n]:M:7.1t(n,h)}});6.W(6.2e.1f,q(i,n){6.C[n]=q(h){v h==Q?(7.D?6.1f(7[0],n):M):7.1f(n,h)}})},W:q(15,C,1g){l(15.D==Q)I(u i 1r 15)C.16(15[i],1g||[i,15[i]]);G I(u i=0;i<15.D;i++)l(C.16(15[i],1g||[i,15[i]])===U)45;v 15},1j:{2g:q(o,c){l(6.1j.3t(o,c))v;o.1j+=(o.1j?" ":"")+c},25:q(o,c){l(!c){o.1j=""}G{u 2L=o.1j.3b(" ");I(u i=0;i<2L.D;i++){l(2L[i]==c){2L.67(i,1);45}}o.1j=2L.5Z(\' \')}},3t:q(e,a){l(e.1j!=Q)e=e.1j;v 1h 43("(^|\\\\s)"+a+"(\\\\s|$)").28(e)}},4A:q(e,o,f){I(u i 1r o){e.1a["1Z"+i]=e.1a[i];e.1a[i]=o[i]}f.16(e,[]);I(u i 1r o)e.1a[i]=e.1a["1Z"+i]},1f:q(e,p){l(p=="1G"||p=="2c"){u 1Z={},3K,3F,d=["68","6O","69","7c"];I(u i 1r d){1Z["6b"+d[i]]=0;1Z["6c"+d[i]+"6e"]=0}6.4A(e,1Z,q(){l(6.1f(e,"1u")!="20"){3K=e.6f;3F=e.6g}G{e=6(e.3f(T)).1V(":3W").5u("2J").4q().1f({3U:"1S",2H:"6i",1u:"2F",6j:"0",5l:"0"}).4H(e.1i)[0];u 31=6.1f(e.1i,"2H");l(31==""||31=="3R")e.1i.1a.2H="6k";3K=e.6l;3F=e.6m;l(31==""||31=="3R")e.1i.1a.2H="3R";e.1i.3s(e)}});v p=="1G"?3K:3F}v 6.26(e,p)},26:q(F,E,4I){u L;l(E==\'1m\'&&6.11.1p)v 6.1t(F.1a,\'1m\');l(E=="3p"||E=="2y")E=6.11.1p?"37":"2y";l(!4I&&F.1a[E]){L=F.1a[E]}G l(F.34){u 5S=E.1B(/\\-(\\w)/g,q(m,c){v c.2b()});L=F.34[E]||F.34[5S]}G l(17.3g&&17.3g.4u){l(E=="2y"||E=="37")E="3p";E=E.1B(/([A-Z])/g,"-$1").4d();u 1l=17.3g.4u(F,M);l(1l)L=1l.5P(E);G l(E==\'1u\')L=\'20\';G 6.4A(F,{1u:\'2F\'},q(){L=17.3g.4u(7,M).5P(E)})}v L},3D:q(a){u r=[];I(u i=0;i<a.D;i++){u 1M=a[i];l(1M.O==1C){u s=6.2K(1M),21=17.5N("21"),1Y=[0,"",""];l(!s.1b("<6v"))1Y=[1,"<3c>","</3c>"];G l(!s.1b("<6w")||!s.1b("<29"))1Y=[1,"<22>","</22>"];G l(!s.1b("<4t"))1Y=[2,"<22>","</22>"];G l(!s.1b("<6x")||!s.1b("<6z"))1Y=[3,"<22><29><4t>","</4t></29></22>"];21.2V=1Y[1]+s+1Y[2];24(1Y[0]--)21=21.2a;I(u j=0;j<21.2f.D;j++)r.1k(21.2f[j])}G l(1M.D!=Q&&!1M.1R)I(u n=0;n<1M.D;n++)r.1k(1M[n]);G r.1k(1M.1R?1M:17.6A(1M.6C()))}v r},2u:{"":"m[2]== \'*\'||a.2p.2b()==m[2].2b()","#":"a.3a(\'3H\')&&a.3a(\'3H\')==m[2]",":":{5o:"i<m[3]-0",5X:"i>m[3]-0",5L:"m[3]-0==i",5n:"m[3]-0==i",2h:"i==0",1N:"i==r.D-1",52:"i%2==0",53:"i%2","5L-3x":"6.1x(a,m[3]).1l","2h-3x":"6.1x(a,0).1l","1N-3x":"6.1x(a,0).1N","6D-3x":"6.1x(a).D==1",5s:"a.2f.D",5B:"!a.2f.D",5p:"6.C.2B.16([a]).1b(m[3])>=0",6E:"a.B!=\'1S\'&&6.1f(a,\'1u\')!=\'20\'&&6.1f(a,\'3U\')!=\'1S\'",1S:"a.B==\'1S\'||6.1f(a,\'1u\')==\'20\'||6.1f(a,\'3U\')==\'1S\'",6F:"!a.2P",2P:"a.2P",2J:"a.2J",3V:"a.3V || 6.1t(a, \'3V\')",2B:"a.B==\'2B\'",3W:"a.B==\'3W\'",5y:"a.B==\'5y\'",3Q:"a.B==\'3Q\'",5v:"a.B==\'5v\'",4x:"a.B==\'4x\'",5w:"a.B==\'5w\'",4w:"a.B==\'4w\'",4s:"a.B==\'4s\'",5z:"a.2p.4d().4T(/5z|3c|6L|4s/)"},".":"6.1j.3t(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z && !z.1b(m[4])","$=":"z && z.32(z.D - m[4].D,m[4].D)==m[4]","*=":"z && z.1b(m[4])>=0","":"z"},"[":"6.1V(m[2],a).D"},3B:["\\\\.\\\\.|/\\\\.\\\\.","a.1i",">|/","6.1x(a.2a)","\\\\+","6.1x(a).3z","~",q(a){u r=[];u s=6.1x(a);l(s.n>0)I(u i=s.n;i<s.D;i++)r.1k(s[i]);v r}],1V:q(t,1o){l(1o&&1o.1R==Q)1o=M;1o=1o||6.1o||17;l(t.O!=1C)v[t];l(!t.1b("//")){1o=1o.4Q;t=t.32(2,t.D)}G l(!t.1b("/")){1o=1o.4Q;t=t.32(1,t.D);l(t.1b("/")>=1)t=t.32(t.1b("/"),t.D)}u L=[1o];u 1K=[];u 1N=M;24(t.D>0&&1N!=t){u r=[];1N=t;t=6.2K(t).1B(/^\\/\\//i,"");u 36=U;I(u i=0;i<6.3B.D;i+=2){l(36)51;u 2v=1h 43("^("+6.3B[i]+")");u m=2v.3d(t);l(m){r=L=6.2r(L,6.3B[i+1]);t=6.2K(t.1B(2v,""));36=T}}l(!36){l(!t.1b(",")||!t.1b("|")){l(L[0]==1o)L.4h();1K=6.1X(1K,L);r=L=[1o];t=" "+t.32(1,t.D)}G{u 3Z=/^([#.]?)([a-4Y-9\\\\*44-]*)/i;u m=3Z.3d(t);l(m[1]=="#"){u 4l=17.5V(m[2]);r=L=4l?[4l]:[];t=t.1B(3Z,"")}G{l(!m[2]||m[1]==".")m[2]="*";I(u i=0;i<L.D;i++)r=6.1X(r,m[2]=="*"?6.40(L[i]):L[i].4S(m[2]))}}}l(t){u 1D=6.1c(t,r);L=r=1D.r;t=6.2K(1D.t)}}l(L&&L[0]==1o)L.4h();1K=6.1X(1K,L);v 1K},40:q(o,r){r=r||[];u s=o.2f;I(u i=0;i<s.D;i++)l(s[i].1R==1){r.1k(s[i]);6.40(s[i],r)}v r},1t:q(F,1d,Y){u 2m={"I":"7v","6P":"1j","3p":6.11.1p?"37":"2y",2y:6.11.1p?"37":"2y",2V:"2V",1j:"1j",Y:"Y",2P:"2P",2J:"2J",6R:"6S"};l(1d=="1m"&&6.11.1p&&Y!=Q){F[\'6U\']=1;l(Y==1)v F["1c"]=F["1c"].1B(/3k\\([^\\)]*\\)/5c,"");G v F["1c"]=F["1c"].1B(/3k\\([^\\)]*\\)/5c,"")+"3k(1m="+Y*4U+")"}G l(1d=="1m"&&6.11.1p){v F["1c"]?4c(F["1c"].4T(/3k\\(1m=(.*)\\)/)[1])/4U:1}l(1d=="1m"&&6.11.2I&&Y==1)Y=0.6W;l(2m[1d]){l(Y!=Q)F[2m[1d]]=Y;v F[2m[1d]]}G l(Y==Q&&6.11.1p&&F.2p&&F.2p.2b()==\'6X\'&&(1d==\'7f\'||1d==\'7e\')){v F.70(1d).4Z}G l(F.3a!=Q&&F.7b){l(Y!=Q)F.72(1d,Y);v F.3a(1d)}G{1d=1d.1B(/-([a-z])/73,q(z,b){v b.2b()});l(Y!=Q)F[1d]=Y;v F[1d]}},4X:["\\\\[ *(@)S *([!*$^=]*) *(\'?\\"?)(.*?)\\\\4 *\\\\]","(\\\\[)\\s*(.*?)\\s*\\\\]","(:)S\\\\(\\"?\'?([^\\\\)]*?)\\"?\'?\\\\)","([:.#]*)S"],1c:q(t,r,2t){u g=2t!==U?6.2O:q(a,f){v 6.2O(a,f,T)};24(t&&/^[a-z[({<*:.#]/i.28(t)){u p=6.4X;I(u i=0;i<p.D;i++){u 2v=1h 43("^"+p[i].1B("S","([a-z*44-][a-4Y-76-]*)"),"i");u m=2v.3d(t);l(m){l(!i)m=["",m[1],m[3],m[2],m[5]];t=t.1B(2v,"");45}}l(m[1]==":"&&m[2]=="2t")r=6.1c(m[3],r,U).r;G{u f=6.2u[m[1]];l(f.O!=1C)f=6.2u[m[1]][m[2]];3A("f = q(a,i){"+(m[1]=="@"?"z=6.1t(a,m[3]);":"")+"v "+f+"}");r=g(r,f)}}v{r:r,t:t}},2K:q(t){v t.1B(/^\\s+|\\s+$/g,"")},3L:q(F){u 47=[];u 1l=F.1i;24(1l&&1l!=17){47.1k(1l);1l=1l.1i}v 47},1x:q(F,2j,2t){u 14=[];l(F){u 2k=F.1i.2f;I(u i=0;i<2k.D;i++){l(2t===T&&2k[i]==F)51;l(2k[i].1R==1)14.1k(2k[i]);l(2k[i]==F)14.n=14.D-1}}v 6.1y(14,{1N:14.n==14.D-1,1l:2j=="52"&&14.n%2==0||2j=="53"&&14.n%2||14[2j]==F,4j:14[14.n-1],3z:14[14.n+1]})},1X:q(2h,35){u 1J=[];I(u k=0;k<2h.D;k++)1J[k]=2h[k];I(u i=0;i<35.D;i++){u 48=T;I(u j=0;j<2h.D;j++)l(35[i]==2h[j])48=U;l(48)1J.1k(35[i])}v 1J},2O:q(14,C,4a){l(C.O==1C)C=1h 1v("a","i","v "+C);u 1J=[];I(u i=0;i<14.D;i++)l(!4a&&C(14[i],i)||4a&&!C(14[i],i))1J.1k(14[i]);v 1J},2r:q(14,C){l(C.O==1C)C=1h 1v("a","v "+C);u 1J=[];I(u i=0;i<14.D;i++){u 1D=C(14[i],i);l(1D!==M&&1D!=Q){l(1D.O!=2z)1D=[1D];1J=6.1X(1J,1D)}}v 1J},J:{2g:q(P,B,1H){l(6.11.1p&&P.42!=Q)P=1z;l(!1H.2q)1H.2q=7.2q++;l(!P.1E)P.1E={};u 2W=P.1E[B];l(!2W){2W=P.1E[B]={};l(P["2N"+B])2W[0]=P["2N"+B]}2W[1H.2q]=1H;P["2N"+B]=7.58;l(!7.1e[B])7.1e[B]=[];7.1e[B].1k(P)},2q:1,1e:{},25:q(P,B,1H){l(P.1E)l(B&&P.1E[B])l(1H)57 P.1E[B][1H.2q];G I(u i 1r P.1E[B])57 P.1E[B][i];G I(u j 1r P.1E)7.25(P,j)},1P:q(B,K,P){K=K||[];l(!P){u g=7.1e[B];l(g)I(u i=0;i<g.D;i++)7.1P(B,K,g[i])}G l(P["2N"+B]){K.59(7.2m({B:B,2G:P}));P["2N"+B].16(P,K)}},58:q(J){l(1T 6=="Q")v U;J=J||6.J.2m(1z.J);l(!J)v U;u 3m=T;u c=7.1E[J.B];u 1g=[].7h.3O(19,1);1g.59(J);I(u j 1r c){l(c[j].16(7,1g)===U){J.4p();J.5a();3m=U}}v 3m},2m:q(J){l(6.11.1p){J=1z.J;J.2G=J.7i}G l(6.11.2M&&J.2G.1R==3){J=6.1y({},J);J.2G=J.2G.1i}J.4p=q(){7.3m=U};J.5a=q(){7.7l=T};v J}}});1h q(){u b=5I.5K.4d();6.11={2M:/5e/.28(b),30:/30/.28(b),1p:/1p/.28(b)&&!/30/.28(b),2I:/2I/.28(b)&&!/(7m|5e)/.28(b)};6.7n=!6.11.1p||17.7o=="7p"};6.2e={2o:{4H:"5g",7q:"5h",2Y:"5i",7r:"5j"},1f:"2c,1G,7s,5l,2H,3p,3h,7t,7u".3b(","),1c:["5n","5o","5X","5p"],1t:{1D:"Y",38:"2V",3H:M,7x:M,1d:M,7z:M,3w:M,7A:M},5r:{5s:"a.1i",7B:6.3L,3L:6.3L,3z:"6.1x(a).3z",4j:"6.1x(a).4j",2k:"6.1x(a, M, T)",7C:"6.1x(a.2a)"},W:{5u:q(1L){7.7E(1L)},1A:q(){7.1a.1u=7.2A?7.2A:"";l(6.1f(7,"1u")=="20")7.1a.1u="2F"},1s:q(){7.2A=7.2A||6.1f(7,"1u");l(7.2A=="20")7.2A="2F";7.1a.1u="20"},4o:q(){6(7)[6(7).4E(":1S")?"1A":"1s"].16(6(7),19)},7F:q(c){6.1j.2g(7,c)},7G:q(c){6.1j.25(7,c)},7H:q(c){6.1j[6.1j.3t(7,c)?"25":"2g"](7,c)},25:q(a){l(!a||6.1c(a,[7]).r)7.1i.3s(7)},5B:q(){24(7.2a)7.3s(7.2a)},2Z:q(B,C){l(C.O==1C)C=1h 1v("e",(!C.1b(".")?"6(7)":"v ")+C);6.J.2g(7,B,C)},4C:q(B,C){6.J.25(7,B,C)},1P:q(B,K){6.J.1P(B,K,7)}}};6.5C();6.C.1y({5E:6.C.4o,4o:q(a,b){v a&&b&&a.O==1v&&b.O==1v?7.5M(q(e){7.1N=7.1N==a?b:a;e.4p();v 7.1N.16(7,[e])||U}):7.5E.16(7,19)},7K:q(f,g){q 4r(e){u p=(e.B=="3C"?e.7M:e.7N)||e.7O;24(p&&p!=7)3u{p=p.1i}3o(e){p=7};l(p==7)v U;v(e.B=="3C"?f:g).16(7,[e])}v 7.3C(4r).5Q(4r)},1W:q(f){l(6.3y)f.16(17);G{6.2C.1k(f)}v 7}});6.1y({3y:U,2C:[],1W:q(){l(!6.3y){6.3y=T;l(6.2C){I(u i=0;i<6.2C.D;i++)6.2C[i].16(17);6.2C=M}l(6.11.2I||6.11.30)17.7P("5T",6.1W,U)}}});1h q(){u e=("7R,7S,2S,7T,7U,4z,5M,7V,"+"7X,7Y,81,3C,5Q,83,4w,3c,"+"4x,86,87,88,2l").3b(",");I(u i=0;i<e.D;i++)1h q(){u o=e[i];6.C[o]=q(f){v f?7.2Z(o,f):7.1P(o)};6.C["89"+o]=q(f){v 7.4C(o,f)};6.C["8a"+o]=q(f){u P=6(7);u 1H=q(){P.4C(o,1H);P=M;f.16(7,19)};v 7.2Z(o,1H)}};l(6.11.2I||6.11.30){17.8c("5T",6.1W,U)}G l(6.11.1p){17.8d("<8e"+"8f 3H=5W 8n=T "+"3w=//:><\\/27>");u 27=17.5V("5W");27.2w=q(){l(7.3n!="1I")v;7.1i.3s(7);6.1W()};27=M}G l(6.11.2M){6.3N=42(q(){l(17.3n=="63"||17.3n=="1I"){56(6.3N);6.3N=M;6.1W()}},10)}6.J.2g(1z,"2S",6.1W)};l(6.11.1p)6(1z).4z(q(){u J=6.J,1e=J.1e;I(u B 1r 1e){u 3P=1e[B],i=3P.D;l(i>0)6a l(B!=\'4z\')J.25(3P[i-1],B);24(--i)}});6.C.1y({60:6.C.1A,1A:q(12,H){v 12?7.1U({1G:"1A",2c:"1A",1m:"1A"},12,H):7.60()},5U:6.C.1s,1s:q(12,H){v 12?7.1U({1G:"1s",2c:"1s",1m:"1s"},12,H):7.5U()},6n:q(12,H){v 7.1U({1G:"1A"},12,H)},6o:q(12,H){v 7.1U({1G:"1s"},12,H)},6p:q(12,H){v 7.W(q(){u 4J=6(7).4E(":1S")?"1A":"1s";6(7).1U({1G:4J},12,H)})},6r:q(12,H){v 7.1U({1m:"1A"},12,H)},6s:q(12,H){v 7.1U({1m:"1s"},12,H)},6t:q(12,2o,H){v 7.1U({1m:2o},12,H)},1U:q(E,12,H){v 7.1w(q(){7.2U=6.1y({},E);I(u p 1r E){u e=1h 6.2R(7,6.12(12,H),p);l(E[p].O==4O)e.3e(e.1l(),E[p]);G e[E[p]](E)}})},1w:q(B,C){l(!C){C=B;B="2R"}v 7.W(q(){l(!7.1w)7.1w={};l(!7.1w[B])7.1w[B]=[];7.1w[B].1k(C);l(7.1w[B].D==1)C.16(7)})}});6.1y({5f:q(e,p){l(e.5F)v;l(p=="1G"&&e.4L!=3l(6.26(e,p)))v;l(p=="2c"&&e.4M!=3l(6.26(e,p)))v;u a=e.1a[p];u o=6.26(e,p,1);l(p=="1G"&&e.4L!=o||p=="2c"&&e.4M!=o)v;e.1a[p]=e.34?"":"5H";u n=6.26(e,p,1);l(o!=n&&n!="5H"){e.1a[p]=a;e.5F=T}},12:q(s,o){o=o||{};l(o.O==1v)o={1I:o};u 5D={6G:6H,6J:4K};o.2E=(s&&s.O==4O?s:5D[s])||5k;o.3J=o.1I;o.1I=q(){6.4R(7,"2R");l(o.3J&&o.3J.O==1v)o.3J.16(7)};v o},1w:{},4R:q(F,B){B=B||"2R";l(F.1w&&F.1w[B]){F.1w[B].4h();u f=F.1w[B][0];l(f)f.16(F)}},2R:q(F,2x,E){u z=7;z.o={2E:2x.2E||5k,1I:2x.1I,2s:2x.2s};z.V=F;u y=z.V.1a;z.a=q(){l(2x.2s)2x.2s.16(F,[z.2i]);l(E=="1m")6.1t(y,"1m",z.2i);G l(3l(z.2i))y[E]=3l(z.2i)+"5d";y.1u="2F"};z.61=q(){v 4c(6.1f(z.V,E))};z.1l=q(){u r=4c(6.26(z.V,E));v r&&r>-6Z?r:z.61()};z.3e=q(41,2o){z.3M=(1h 54()).55();z.2i=41;z.a();z.49=42(q(){z.2s(41,2o)},13)};z.1A=q(){l(!z.V.1Q)z.V.1Q={};z.V.1Q[E]=7.1l();z.3e(0,z.V.1Q[E]);l(E!="1m")y[E]="77"};z.1s=q(){l(!z.V.1Q)z.V.1Q={};z.V.1Q[E]=7.1l();z.o.1s=T;z.3e(z.V.1Q[E],0)};l(!z.V.4b)z.V.4b=6.1f(z.V,"3h");y.3h="1S";z.2s=q(4B,4g){u t=(1h 54()).55();l(t>z.o.2E+z.3M){56(z.49);z.49=M;z.2i=4g;z.a();z.V.2U[E]=T;u 1K=T;I(u i 1r z.V.2U)l(z.V.2U[i]!==T)1K=U;l(1K){y.3h=z.V.4b;l(z.o.1s)y.1u=\'20\';l(z.o.1s){I(u p 1r z.V.2U){l(p=="1m")6.1t(y,p,z.V.1Q[p]);G y[p]=z.V.1Q[p]+"5d";l(p==\'1G\'||p==\'2c\')6.5f(z.V,p)}}}l(1K&&z.o.1I&&z.o.1I.O==1v)z.o.1I.16(z.V)}G{u p=(t-7.3M)/z.o.2E;z.2i=((-5q.7w(p*5q.7y)/2)+0.5)*(4g-4B)+4B;z.a()}}}});6.C.1y({7D:q(N,1O,H){7.2S(N,1O,H,1)},2S:q(N,1O,H,1F){l(N.O==1v)v 7.2Z("2S",N);H=H||q(){};u B="3T";l(1O){l(1O.O==1v){H=1O;1O=M}G{1O=6.2Q(1O);B="4W"}}u 4m=7;6.3I(B,N,1O,q(3v,18){l(18=="2D"||!1F&&18=="5m"){4m.38(3v.3G).3X().W(H,[3v.3G,18])}G H.16(4m,[3v.3G,18])},1F);v 7},7J:q(){v 6.2Q(7)},3X:q(){v 7.1V(\'27\').W(q(){l(7.3w)6.5Y(7.3w,q(){});G 3A.3O(1z,7.2B||7.7L||7.2V||"")}).4q()}});l(6.11.1p&&1T 3i=="Q")3i=q(){v 1h 7Q(5I.5K.1b("7W 5")>=0?"82.5R":"84.5R")};1h q(){u e="5O,5G,5A,5x,5t".3b(",");I(u i=0;i<e.D;i++)1h q(){u o=e[i];6.C[o]=q(f){v 7.2Z(o,f)}}};6.1y({1n:q(N,K,H,B,1F){l(K&&K.O==1v){B=H;H=K;K=M}l(K)N+=((N.1b("?")>-1)?"&":"?")+6.2Q(K);6.3I("3T",N,M,q(r,18){l(H)H(6.3r(r,B),18)},1F)},8h:q(N,K,H,B){6.1n(N,K,H,B,1)},5Y:q(N,H){l(H)6.1n(N,M,H,"27");G{6.1n(N,M,M,"27")}},64:q(N,K,H){l(H)6.1n(N,K,H,"3S");G{6.1n(N,K,"3S")}},8o:q(N,K,H,B){6.3I("4W",N,6.2Q(K),q(r,18){l(H)H(6.3r(r,B),18)})},1q:0,6h:q(1q){6.1q=1q},39:{},3I:q(B,N,K,L,1F){u 1e=T;u 1q=6.1q;l(!N){L=B.1I;u 2D=B.2D;u 2l=B.2l;u 4k=B.4k;u 1e=1T B.1e=="6q"?B.1e:T;u 1q=1T B.1q=="6u"?B.1q:6.1q;1F=B.1F||U;K=B.K;N=B.N;B=B.B}l(1e&&!6.4v++)6.J.1P("5O");u 4y=U;u R=1h 3i();R.6B(B||"3T",N,T);l(K)R.3j("6I-6K","6M/x-6N-6Q-6T");l(1F)R.3j("6V-3Y-6Y",6.39[N]||"71, 74 75 78 46:46:46 79");R.3j("X-7a-7d","3i");l(R.7g)R.3j("7j","7k");u 2w=q(4F){l(R&&(R.3n==4||4F=="1q")){4y=T;u 18=6.4G(R)&&4F!="1q"?1F&&6.4N(R,N)?"5m":"2D":"2l";l(18!="2l"){u 3q;3u{3q=R.4i("4P-3Y")}3o(e){}l(1F&&3q)6.39[N]=3q;l(2D)2D(6.3r(R,4k),18);l(1e)6.J.1P("5t")}G{l(2l)2l(R,18);l(1e)6.J.1P("5x")}l(1e)6.J.1P("5A");l(1e&&!--6.4v)6.J.1P("5G");l(L)L(R,18);R.2w=q(){};R=M}};R.2w=2w;l(1q>0)7Z(q(){l(R){R.85();l(!4y)2w("1q");R=M}},1q);R.8i(K)},4v:0,4G:q(r){3u{v!r.18&&66.6d=="3Q:"||(r.18>=4K&&r.18<6y)||r.18==5b||6.11.2M&&r.18==Q}3o(e){}v U},4N:q(R,N){3u{u 4V=R.4i("4P-3Y");v R.18==5b||4V==6.39[N]||6.11.2M&&R.18==Q}3o(e){}v U},3r:q(r,B){u 4n=r.4i("7I-B");u K=!B&&4n&&4n.1b("R")>=0;K=B=="R"||K?r.80:r.3G;l(B=="27")3A.3O(1z,K);l(B=="3S")3A("K = "+K);l(B=="38")$("<21>").38(K).3X();v K},2Q:q(a){u s=[];l(a.O==2z||a.3E){I(u i=0;i<a.D;i++)s.1k(a[i].1d+"="+50(a[i].Y))}G{I(u j 1r a)s.1k(j+"="+50(a[j]))}v s.5Z("&")}})}',62,521,'||||||jQuery|this||||||||||||||if|||||function||||var|return||||||type|fn|length|prop|elem|else|callback|for|event|data|ret|null|url|constructor|element|undefined|xml||true|false|el|each||value|||browser|speed||elems|obj|apply|document|status|arguments|style|indexOf|filter|name|global|css|args|new|parentNode|className|push|cur|opacity|get|context|msie|timeout|in|hide|attr|display|Function|queue|sibling|extend|window|show|replace|String|val|events|ifModified|height|handler|complete|result|done|key|arg|last|params|trigger|orig|nodeType|hidden|typeof|animate|find|ready|merge|wrap|old|none|div|table|num|while|remove|curCSS|script|test|tbody|firstChild|toUpperCase|width|fn2|macros|childNodes|add|first|now|pos|siblings|error|fix|pushStack|to|nodeName|guid|map|step|not|expr|re|onreadystatechange|options|cssFloat|Array|oldblock|text|readyList|success|duration|block|target|position|mozilla|checked|trim|classes|safari|on|grep|disabled|param|fx|load|domManip|curAnim|innerHTML|handlers|dir|insertBefore|bind|opera|parPos|substr|stack|currentStyle|second|foundToken|styleFloat|html|lastModified|getAttribute|split|select|exec|custom|cloneNode|defaultView|overflow|XMLHttpRequest|setRequestHeader|alpha|parseInt|returnValue|readyState|catch|float|modRes|httpData|removeChild|has|try|res|src|child|isReady|next|eval|token|mouseover|clean|jquery|oWidth|responseText|id|ajax|oldComplete|oHeight|parents|startTime|safariTimer|call|els|file|static|json|GET|visibility|selected|radio|evalScripts|Modified|re2|getAll|from|setInterval|RegExp|_|break|00|matched|noCollision|timer|inv|oldOverflow|parseFloat|toLowerCase|appendChild|clone|lastNum|shift|getResponseHeader|prev|dataType|oid|self|ct|toggle|preventDefault|end|handleHover|button|tr|getComputedStyle|active|reset|submit|requestDone|unload|swap|firstNum|unbind|deep|is|istimeout|httpSuccess|appendTo|force|state|200|scrollHeight|scrollWidth|httpNotModified|Number|Last|documentElement|dequeue|getElementsByTagName|match|100|xmlRes|POST|parse|z0|nodeValue|encodeURIComponent|continue|even|odd|Date|getTime|clearInterval|delete|handle|unshift|stopPropagation|304|gi|px|webkit|setAuto|append|prepend|before|after|400|left|notmodified|eq|lt|contains|Math|axis|parent|ajaxSuccess|removeAttr|password|image|ajaxError|checkbox|input|ajaxComplete|empty|init|ss|_toggle|notAuto|ajaxStop|auto|navigator|size|userAgent|nth|click|createElement|ajaxStart|getPropertyValue|mouseout|XMLHTTP|newProp|DOMContentLoaded|_hide|getElementById|__ie_init|gt|getScript|join|_show|max|THEAD|loaded|getJSON|initDone|location|splice|Top|Right|do|padding|border|protocol|Width|offsetHeight|offsetWidth|ajaxTimeout|absolute|right|relative|clientHeight|clientWidth|slideDown|slideUp|slideToggle|boolean|fadeIn|fadeOut|fadeTo|number|opt|thead|td|300|th|createTextNode|open|toString|only|visible|enabled|slow|600|Content|fast|Type|textarea|application|www|Bottom|class|form|readonly|readOnly|urlencoded|zoom|If|9999|FORM|Since|10000|getAttributeNode|Thu|setAttribute|ig|01|Jan|9_|1px|1970|GMT|Requested|tagName|Left|With|method|action|overrideMimeType|slice|srcElement|Connection|close|cancelBubble|compatible|boxModel|compatMode|CSS1Compat|prependTo|insertAfter|top|color|background|htmlFor|cos|title|PI|href|rel|ancestors|children|loadIfModified|removeAttribute|addClass|removeClass|toggleClass|content|serialize|hover|textContent|fromElement|toElement|relatedTarget|removeEventListener|ActiveXObject|blur|focus|resize|scroll|dblclick|MSIE|mousedown|mouseup|setTimeout|responseXML|mousemove|Microsoft|change|Msxml2|abort|keydown|keypress|keyup|un|one|prototype|addEventListener|write|scr|ipt|index|getIfModified|send|nextSibling|pop|Boolean|TABLE|defer|post'.split('|'),0,{}))
diff --git a/libs/fjsc/resources/bootstrap.factor b/libs/fjsc/resources/bootstrap.factor
new file mode 100644 (file)
index 0000000..7c16049
--- /dev/null
@@ -0,0 +1,35 @@
+: alert ( string -- )
+  #! Display the string in an alert box
+  window { } "" "alert" { "string" } alien-invoke ;
+
+"browser-dom" in
+
+: elements ( string -- result )
+  #! Call JQuery's $ function
+  window { "result" } "" "$" { "string" } alien-invoke ;
+  
+: html ( string -- element ) 
+  #! Set the innerHTML of element using jQuery
+  { } "" "html" { "string" } alien-invoke ;
+
+: bind-event ( name element quot -- )
+  >function swap { } "" "bind" { "string" "function" } alien-invoke ;
+
+"scratchpad" in
+
+: example1 ( -- )
+  "<button id='test'>Press Me</button>" "#playground" elements html ;
+
+: example2 ( -- )
+  "click" "#test" elements [ "clicked" alert ] bind-event ;
+
+: example3 ( -- )
+  [
+    [
+      >r "click" "#test" elements r> [ continue ] curry bind-event
+      "Waiting for click on button" alert
+      continue
+    ] callcc0
+    drop "Click done!" alert 
+  ] callcc0 ;
+  
diff --git a/libs/fjsc/resources/bootstrap.js b/libs/fjsc/resources/bootstrap.js
new file mode 100644 (file)
index 0000000..6de5fac
--- /dev/null
@@ -0,0 +1,577 @@
+function Word(vocab, name, source, func) {
+  this.vocab = vocab;
+  this.name = name;
+  this.source = source;
+  this.func = func;
+}
+
+Word.prototype.execute = function(next) {
+  this.func(next);
+}
+
+Word.prototype.toString = function() {
+  var html = [];
+  html.push("<a href='/responder/browser/browse?vocab=")
+  html.push(this.vocab);
+  html.push("&amp;word=")
+  html.push(this.name);
+  html.push("'>")
+  html.push(this.name);
+  html.push("</a>");
+  return html.join("");
+}
+
+function Continuation() {
+  this.data_stack = [ ];
+  this.retain_stack = [ ];
+  this.next = false;
+  this.nesting = 0;
+}
+
+Continuation.prototype.clone = function() {
+  var c = new Continuation();
+  c.data_stack = this.data_stack.slice(0);
+  c.retain_stack = this.retain_stack.slice(0);
+  c.nesting = this.nesting;
+  c.next = this.next;
+  return c;
+}
+
+function Factor() {
+  this.vocabs = { scratchpad: { } };
+  this.in_vocab = "scratchpad";
+  this.using_vocabs = [ "scratchpad", "kernel","math","sequences","parser","alien","browser-dom", "words" ];
+  this.cont = new Continuation();
+}
+
+var factor = new Factor();
+
+Factor.prototype.call_next = function(next) {
+  if(next) {
+    if(this.cont.nesting++ > 150) {
+      this.cont.nesting = 0;
+      setTimeout(next, 0);
+   }
+    else {
+      next();
+    }
+  }
+}
+
+Factor.prototype.push_data = function(v, next) {
+  factor.cont.data_stack.push(v);
+  factor.call_next(next);
+}
+
+Factor.prototype.get_word = function(vocab,name) {
+  return factor.vocabs[vocab][name];
+}
+
+Factor.prototype.find_word = function(name) {
+  for(var v = 0; v<factor.using_vocabs.length; ++v) {
+    var w = factor.vocabs[factor.using_vocabs[v]][name];
+    if(w)
+      return w;
+  }
+  return false;
+}
+
+Factor.prototype.add_word = function(vocab,name, source, func) {
+  var v = factor.vocabs[vocab];
+  if(!v) {
+    v = { };
+    factor.vocabs[vocab] = v;
+  }
+  v[name] = new Word(vocab,name,source,func);
+}
+
+Factor.prototype.remove_word = function(vocab,name) {
+  var v = factor.vocabs[vocab];
+  if(!v) {
+    v = { };
+    factor.vocabs[vocab] = v;
+  }
+  delete v[name];
+}
+    
+Factor.prototype.define_word = function(name, source, func, next) {
+  factor.vocabs[factor.in_vocab][name] = new Word(factor.in_vocab, name, source, function(next) {
+    var old = factor.cont.next;
+    factor.cont.next = function() {
+      factor.cont.next = old;
+      factor.call_next(next);
+    }
+    func();
+  });
+  factor.call_next(next);
+}
+
+Factor.prototype.make_quotation = function(source, func) {
+  return new Word("quotations", "quotation", source, function(next) {
+    var old = factor.cont.next;
+    factor.cont.next = function() {
+      factor.cont.next = old;
+      factor.call_next(next);
+    }
+    func();
+  });
+}
+
+Factor.prototype.server_eval = function(text, next) {
+   var self = this;
+   $.post("/responder/fjsc/compile", { code: text }, function(result) {
+     document.getElementById('compiled').value=result;
+     document.getElementById('code').value="";
+     var func = eval(result);
+     factor.cont.next = function() { self.display_datastack(); } 
+     func(factor);
+     if(next) 
+       factor.call_next(next);
+   });
+}
+
+Factor.prototype.display_datastack = function() {
+   var html=[];
+   html.push("<table border='1'>")
+   for(var i = 0; i < this.cont.data_stack.length; ++i) {
+      html.push("<tr><td>")
+      html.push(this.cont.data_stack[i])
+      html.push("</td></tr>")
+   }
+   html.push("</table>")
+   document.getElementById('stack').innerHTML=html.join("");
+}
+
+/* Kernel Vocabulary */
+factor.add_word("kernel","dup", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  stack[stack.length] = stack[stack.length-1];
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "drop", "primitive", function(next) {
+  factor.cont.data_stack.pop();
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "nip", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  stack[stack.length-2] = stack[stack.length-1];
+  stack.pop();
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "over", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  stack[stack.length] = stack[stack.length-2];
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "swap", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  var temp = stack[stack.length-2];
+  stack[stack.length-2] = stack[stack.length-1];
+  stack[stack.length-1] = temp;
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", ">r", "primitive", function(next) {
+  var data_stack = factor.cont.data_stack;
+  var retain_stack = factor.cont.retain_stack;
+  retain_stack.push(data_stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "r>", "primitive", function(next) {
+  var data_stack = factor.cont.data_stack;
+  var retain_stack = factor.cont.retain_stack;
+  data_stack.push(retain_stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "call", "primitive", function(next) {
+  var quot = factor.cont.data_stack.pop();
+  quot.execute(next);
+});
+
+factor.add_word("kernel", "execute", "primitive", function(next) {
+  var quot = factor.cont.data_stack.pop();
+  quot.execute(next);
+});
+
+factor.add_word("kernel", "clear", "primitive", function(next) {
+  factor.cont.data_stack = [];
+  factor.cont.retain_stack = [];
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "if", "primitive", function(next) {  
+  var stack = factor.cont.data_stack;
+  var else_quot = stack.pop();
+  var then_quot = stack.pop();
+  var condition = stack.pop();
+  if(condition) {
+    then_quot.execute(next);
+  } else {
+    else_quot.execute(next);
+  }
+});
+
+factor.add_word("kernel", "f", "primitive", function(next) {  
+  factor.cont.data_stack.push(false);
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "t", "primitive", function(next) {  
+  factor.cont.data_stack.push(true);
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "=", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  stack.push(stack.pop()==stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("kernel", "bootstrap", "primitive", function(next) {  
+  factor.cont.data_stack.push("/responder/fjsc-resources/bootstrap.factor");
+  factor.get_word("parser", "run-file").execute(next);
+});
+
+factor.add_word("kernel", "callcc0", "primitive", function(next) {  
+  var data_stack = factor.cont.data_stack;
+  var quot = data_stack.pop();
+  var new_cont = factor.cont.clone();  
+  var old_next = factor.cont.next;
+  factor.cont.next = function() {
+      factor.cont.next = old_next;
+      factor.call_next(next);
+  }
+  new_cont.data_stack.push(factor.cont);
+  factor.cont = new_cont;
+  quot.execute(next);  
+});
+
+factor.add_word("kernel", "callcc1", "primitive", function(next) {  
+  factor.get_word("kernel", "callcc0").execute(next);
+});
+
+factor.add_word("kernel", "continue", "primitive", function(next) {  
+  var data_stack = factor.cont.data_stack;
+  var cont = data_stack.pop(); 
+  factor.cont = cont.clone();
+  factor.call_next(cont.next);
+});
+
+factor.add_word("kernel", "continue-with", "primitive", function(next) {  
+  var data_stack = factor.cont.data_stack;
+  var cont = data_stack.pop(); 
+  var data = data_stack.pop(); 
+  factor.cont = cont.clone();
+  factor.cont.data_stack.push(data);
+  factor.call_next(cont.next);
+});
+
+factor.add_word("kernel", "in", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var vocab = stack.pop();
+  var v = factor.vocabs[vocab];
+  if(!v) {
+    v = { };
+    factor.vocabs[vocab] = v;
+  }
+  factor.in_vocab = vocab;
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "current-vocab", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  stack.push(factor.in_vocab);
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "use", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var vocab = stack.pop();
+  var v = factor.vocabs[vocab];
+  if(!v) {
+    v = { };
+    factor.vocabs[vocab] = v;
+  }
+  factor.using_vocabs.push(vocab);
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "using", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var vocabs = stack.pop();
+  factor.using_vocabs = [];
+  for(var i=0;i<vocabs.length;++i) {  
+    var v = factor.vocabs[vocabs[i]];
+    if(!v) {
+      v = { };
+      factor.vocabs[vocabs[i]] = v;
+    }
+  }
+  factor.using_vocabs = vocabs;
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "current-using", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  stack.push(factor.using_vocabs);
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "forget", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var word = stack.pop();
+  factor.remove_word(word.vocab, word.name);
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", ">function", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var word = stack.pop();
+  stack.push(function() { word.func(function() { }) });
+  factor.call_next(next);  
+});
+
+factor.add_word("kernel", "curry", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var quot = stack.pop();
+  var value = stack.pop();
+  
+  stack.push(factor.make_quotation("quotation", function(next) {
+    factor.cont.data_stack.push(value);   
+    quot.execute(factor.cont.next);
+  }));
+  factor.call_next(next);
+});
+
+/* Math vocabulary */
+factor.add_word("math", "*", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  stack.push(stack.pop() * stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("math", "+", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  stack.push(stack.pop() + stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("math", "-", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  var v1 = stack.pop();
+  var v2 = stack.pop();
+  stack.push(v2 - v1);
+  factor.call_next(next);
+});
+
+factor.add_word("math", "/", "primitive", function(next) {
+  var stack = factor.cont.data_stack;
+  var v1 = stack.pop();
+  var v2 = stack.pop();
+  stack.push(v2 / v1);
+  factor.call_next(next);
+});
+
+factor.add_word("prettyprint", ".", "primitive", function(next) {
+  alert(factor.cont.data_stack.pop());
+  factor.call_next(next);
+});
+
+factor.add_word("parser", "run-file", "primitive", function(next) {  
+  var stack = factor.cont.data_stack;
+  var url = stack.pop();
+  $.get(url, function(result) {
+    factor.server_eval(result, next);
+  });
+});
+
+
+factor.add_word("alien", "alien-invoke", "primitive", function(next) {  
+  var stack = factor.cont.data_stack;
+  var arg_types = stack.pop();
+  var method_name = stack.pop();
+  var library_name = stack.pop();
+  var return_values = stack.pop();
+  var obj = stack.pop();
+  var args = [ ];
+  for(var i = 0; i < arg_types.length; ++i) {
+    args[i] = stack.pop();
+  }
+  var v = obj[method_name].apply(obj, args.reverse());
+  if(return_values.length > 0)
+    stack.push(v);
+  factor.call_next(next);
+});
+
+factor.add_word("alien", "alien-property", "primitive", function(next) {  
+  var stack = factor.cont.data_stack;
+  var obj = stack.pop();
+  var property_name = stack.pop();
+  var v = obj[property_name];
+  stack.push(v);
+  factor.call_next(next);
+});
+
+factor.add_word("alien", "set-alien-property", "primitive", function(next) {  
+  var stack = factor.cont.data_stack;
+  var obj = stack.pop();
+  var property_name = stack.pop();
+  var data = stack.pop();
+  obj[property_name] = v;
+  factor.call_next(next);
+});
+
+factor.add_word("words", "vocabs", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var result = [];
+  for(v in factor.vocabs) {
+    result.push(v);
+  }
+  stack.push(result);
+  factor.call_next(next);
+});
+
+factor.add_word("words", "words", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var vocab = factor.vocabs[stack.pop()];
+  var result = [];
+  for(w in vocab) {
+    result.push(vocab[w]);
+  }
+  stack.push(result);
+  factor.call_next(next);
+});
+
+factor.add_word("words", "all-words", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var result = [];
+  for(v in factor.vocabs) {
+    for(w in factor.vocabs[v]) {
+      result.push(factor.vocabs[v][w]);
+    }
+  }
+  stack.push(result);
+  factor.call_next(next);
+});
+
+/* Sequences vocabulary */
+factor.add_word("sequences", "nth", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  var index = stack.pop();
+  stack.push(seq[index]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "second", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[1]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "third", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[2]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "fourth", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first2", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first3", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1],seq[2]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first4", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1],seq[2],seq[3]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "each", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var quot = stack.pop();
+  var seq = stack.pop();
+  for(var i=0;i<seq.length;++i) {  
+    stack.push(seq[i]);
+    quot.execute();
+  }
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "map", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var quot = stack.pop();
+  var seq = stack.pop();
+  var result = [ ];
+  for(var i=0;i<seq.length;++i) {  
+    stack.push(seq[i]);
+    quot.execute();
+    result[i]=stack.pop();
+  }
+  stack.push(result);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "reduce", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var quot = stack.pop();
+  var prev = stack.pop();
+  var seq = stack.pop();
+  for(var i=0;i<seq.length;++i) {  
+    stack.push(prev);
+    stack.push(seq[i]);
+    quot.execute();
+    prev=stack.pop();
+  }
+  stack.push(prev);
+  factor.call_next(next);
+});
+
+/* browser-dom vocab */
+factor.add_word("browser-dom", "window", "primitive", function(next) {  
+  factor.cont.data_stack.push(window);
+  factor.call_next(next);
+});
+
+factor.add_word("browser-dom", "document", "primitive", function(next) {  
+  factor.cont.data_stack.push(document);
+  factor.call_next(next);
+});
+
+/* Run initial factor code */
+$(document).ready(function() {
+  $.get("/responder/fjsc-resources/bootstrap.factor", function(result) {
+    factor.server_eval(result, function() { });
+  });
+});
diff --git a/libs/fjsc/resources/jquery.js b/libs/fjsc/resources/jquery.js
new file mode 100644 (file)
index 0000000..2531342
--- /dev/null
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('l(1T 1z.6=="Q"){1z.Q=1z.Q;u 6=q(a,c){l(a&&1T a=="q"&&6.C.1W)v 6(17).1W(a);a=a||6.1o||17;l(a.3E)v 6(6.1X(a,[]));l(c&&c.3E)v 6(c).1V(a);l(1z==7)v 1h 6(a,c);l(a.O==1C){u m=/^[^<]*(<.+>)[^>]*$/.3d(a);l(m)a=6.3D([m[1]])}7.1n(a.O==2z||a.D&&!a.1R&&a[0]!=Q&&a[0].1R?6.1X(a,[]):6.1V(a,c));u C=19[19.D-1];l(C&&1T C=="q")7.W(C);v 7};l(1T $!="Q")6.44$=$;u $=6;6.C=6.8b={3E:"1.0.3",5J:q(){v 7.D},1n:q(23){l(23&&23.O==2z){7.D=0;[].1k.16(7,23);v 7}G v 23==Q?6.1X(7,[]):7[23]},W:q(C,1g){v 6.W(7,C,1g)},8g:q(15){u 2j=-1;7.W(q(i){l(7==15)2j=i});v 2j},1t:q(1L,Y,B){v 1L.O!=1C||Y!=Q?7.W(q(){l(Y==Q)I(u E 1r 1L)6.1t(B?7.1a:7,E,1L[E]);G 6.1t(B?7.1a:7,1L,Y)}):6[B||"1t"](7[0],1L)},1f:q(1L,Y){v 7.1t(1L,Y,"26")},2B:q(e){e=e||7;u t="";I(u j=0;j<e.D;j++){u r=e[j].2f;I(u i=0;i<r.D;i++)l(r[i].1R!=8)t+=r[i].1R!=1?r[i].4Z:6.C.2B([r[i]])}v t},1Y:q(){u a=6.3D(19);v 7.W(q(){u b=a[0].3f(T);7.1i.2Y(b,7);24(b.2a)b=b.2a;b.4e(7)})},5g:q(){v 7.2T(19,T,1,q(a){7.4e(a)})},5h:q(){v 7.2T(19,T,-1,q(a){7.2Y(a,7.2a)})},5i:q(){v 7.2T(19,U,1,q(a){7.1i.2Y(a,7)})},5j:q(){v 7.2T(19,U,-1,q(a){7.1i.2Y(a,7.8j)})},4q:q(){v 7.1n(7.33.8k())},1V:q(t){v 7.2n(6.2r(7,q(a){v 6.1V(t,a)}),19)},4f:q(4D){v 7.2n(6.2r(7,q(a){v a.3f(4D!=Q?4D:T)}),19)},1c:q(t){v 7.2n(t.O==2z&&6.2r(7,q(a){I(u i=0;i<t.D;i++)l(6.1c(t[i],[a]).r.D)v a;v U})||t.O==8l&&(t?7.1n():[])||1T t=="q"&&6.2O(7,t)||6.1c(t,7).r,19)},2t:q(t){v 7.2n(t.O==1C?6.1c(t,7,U).r:6.2O(7,q(a){v a!=t}),19)},2g:q(t){v 7.2n(6.1X(7,t.O==1C?6.1V(t):t.O==2z?t:[t]),19)},4E:q(2u){v 2u?6.1c(2u,7).r.D>0:U},2T:q(1g,22,2X,C){u 4f=7.5J()>1;u a=6.3D(1g);v 7.W(q(){u 15=7;l(22&&7.2p.2b()=="8m"&&a[0].2p.2b()!="62"){u 29=7.4S("29");l(!29.D){15=17.5N("29");7.4e(15)}G 15=29[0]}I(u i=(2X<0?a.D-1:0);i!=(2X<0?2X:a.D);i+=2X){C.16(15,[4f?a[i].3f(T):a[i]])}})},2n:q(a,1g){u C=1g&&1g[1g.D-1];u 2d=1g&&1g[1g.D-2];l(C&&C.O!=1v)C=M;l(2d&&2d.O!=1v)2d=M;l(!C){l(!7.33)7.33=[];7.33.1k(7.1n());7.1n(a)}G{u 1Z=7.1n();7.1n(a);l(2d&&a.D||!2d)7.W(2d||C).1n(1Z);G 7.1n(1Z).W(C)}v 7}};6.1y=6.C.1y=q(15,E){l(19.D>1&&(E===M||E==Q))v 15;l(!E){E=15;15=7}I(u i 1r E)15[i]=E[i];v 15};6.1y({5C:q(){6.65=T;6.W(6.2e.5r,q(i,n){6.C[i]=q(a){u L=6.2r(7,n);l(a&&a.O==1C)L=6.1c(a,L).r;v 7.2n(L,19)}});6.W(6.2e.2o,q(i,n){6.C[i]=q(){u a=19;v 7.W(q(){I(u j=0;j<a.D;j++)6(a[j])[n](7)})}});6.W(6.2e.W,q(i,n){6.C[i]=q(){v 7.W(n,19)}});6.W(6.2e.1c,q(i,n){6.C[n]=q(23,C){v 7.1c(":"+n+"("+23+")",C)}});6.W(6.2e.1t,q(i,n){n=n||i;6.C[i]=q(h){v h==Q?7.D?7[0][n]:M:7.1t(n,h)}});6.W(6.2e.1f,q(i,n){6.C[n]=q(h){v h==Q?(7.D?6.1f(7[0],n):M):7.1f(n,h)}})},W:q(15,C,1g){l(15.D==Q)I(u i 1r 15)C.16(15[i],1g||[i,15[i]]);G I(u i=0;i<15.D;i++)l(C.16(15[i],1g||[i,15[i]])===U)45;v 15},1j:{2g:q(o,c){l(6.1j.3t(o,c))v;o.1j+=(o.1j?" ":"")+c},25:q(o,c){l(!c){o.1j=""}G{u 2L=o.1j.3b(" ");I(u i=0;i<2L.D;i++){l(2L[i]==c){2L.67(i,1);45}}o.1j=2L.5Z(\' \')}},3t:q(e,a){l(e.1j!=Q)e=e.1j;v 1h 43("(^|\\\\s)"+a+"(\\\\s|$)").28(e)}},4A:q(e,o,f){I(u i 1r o){e.1a["1Z"+i]=e.1a[i];e.1a[i]=o[i]}f.16(e,[]);I(u i 1r o)e.1a[i]=e.1a["1Z"+i]},1f:q(e,p){l(p=="1G"||p=="2c"){u 1Z={},3K,3F,d=["68","6O","69","7c"];I(u i 1r d){1Z["6b"+d[i]]=0;1Z["6c"+d[i]+"6e"]=0}6.4A(e,1Z,q(){l(6.1f(e,"1u")!="20"){3K=e.6f;3F=e.6g}G{e=6(e.3f(T)).1V(":3W").5u("2J").4q().1f({3U:"1S",2H:"6i",1u:"2F",6j:"0",5l:"0"}).4H(e.1i)[0];u 31=6.1f(e.1i,"2H");l(31==""||31=="3R")e.1i.1a.2H="6k";3K=e.6l;3F=e.6m;l(31==""||31=="3R")e.1i.1a.2H="3R";e.1i.3s(e)}});v p=="1G"?3K:3F}v 6.26(e,p)},26:q(F,E,4I){u L;l(E==\'1m\'&&6.11.1p)v 6.1t(F.1a,\'1m\');l(E=="3p"||E=="2y")E=6.11.1p?"37":"2y";l(!4I&&F.1a[E]){L=F.1a[E]}G l(F.34){u 5S=E.1B(/\\-(\\w)/g,q(m,c){v c.2b()});L=F.34[E]||F.34[5S]}G l(17.3g&&17.3g.4u){l(E=="2y"||E=="37")E="3p";E=E.1B(/([A-Z])/g,"-$1").4d();u 1l=17.3g.4u(F,M);l(1l)L=1l.5P(E);G l(E==\'1u\')L=\'20\';G 6.4A(F,{1u:\'2F\'},q(){L=17.3g.4u(7,M).5P(E)})}v L},3D:q(a){u r=[];I(u i=0;i<a.D;i++){u 1M=a[i];l(1M.O==1C){u s=6.2K(1M),21=17.5N("21"),1Y=[0,"",""];l(!s.1b("<6v"))1Y=[1,"<3c>","</3c>"];G l(!s.1b("<6w")||!s.1b("<29"))1Y=[1,"<22>","</22>"];G l(!s.1b("<4t"))1Y=[2,"<22>","</22>"];G l(!s.1b("<6x")||!s.1b("<6z"))1Y=[3,"<22><29><4t>","</4t></29></22>"];21.2V=1Y[1]+s+1Y[2];24(1Y[0]--)21=21.2a;I(u j=0;j<21.2f.D;j++)r.1k(21.2f[j])}G l(1M.D!=Q&&!1M.1R)I(u n=0;n<1M.D;n++)r.1k(1M[n]);G r.1k(1M.1R?1M:17.6A(1M.6C()))}v r},2u:{"":"m[2]== \'*\'||a.2p.2b()==m[2].2b()","#":"a.3a(\'3H\')&&a.3a(\'3H\')==m[2]",":":{5o:"i<m[3]-0",5X:"i>m[3]-0",5L:"m[3]-0==i",5n:"m[3]-0==i",2h:"i==0",1N:"i==r.D-1",52:"i%2==0",53:"i%2","5L-3x":"6.1x(a,m[3]).1l","2h-3x":"6.1x(a,0).1l","1N-3x":"6.1x(a,0).1N","6D-3x":"6.1x(a).D==1",5s:"a.2f.D",5B:"!a.2f.D",5p:"6.C.2B.16([a]).1b(m[3])>=0",6E:"a.B!=\'1S\'&&6.1f(a,\'1u\')!=\'20\'&&6.1f(a,\'3U\')!=\'1S\'",1S:"a.B==\'1S\'||6.1f(a,\'1u\')==\'20\'||6.1f(a,\'3U\')==\'1S\'",6F:"!a.2P",2P:"a.2P",2J:"a.2J",3V:"a.3V || 6.1t(a, \'3V\')",2B:"a.B==\'2B\'",3W:"a.B==\'3W\'",5y:"a.B==\'5y\'",3Q:"a.B==\'3Q\'",5v:"a.B==\'5v\'",4x:"a.B==\'4x\'",5w:"a.B==\'5w\'",4w:"a.B==\'4w\'",4s:"a.B==\'4s\'",5z:"a.2p.4d().4T(/5z|3c|6L|4s/)"},".":"6.1j.3t(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z && !z.1b(m[4])","$=":"z && z.32(z.D - m[4].D,m[4].D)==m[4]","*=":"z && z.1b(m[4])>=0","":"z"},"[":"6.1V(m[2],a).D"},3B:["\\\\.\\\\.|/\\\\.\\\\.","a.1i",">|/","6.1x(a.2a)","\\\\+","6.1x(a).3z","~",q(a){u r=[];u s=6.1x(a);l(s.n>0)I(u i=s.n;i<s.D;i++)r.1k(s[i]);v r}],1V:q(t,1o){l(1o&&1o.1R==Q)1o=M;1o=1o||6.1o||17;l(t.O!=1C)v[t];l(!t.1b("//")){1o=1o.4Q;t=t.32(2,t.D)}G l(!t.1b("/")){1o=1o.4Q;t=t.32(1,t.D);l(t.1b("/")>=1)t=t.32(t.1b("/"),t.D)}u L=[1o];u 1K=[];u 1N=M;24(t.D>0&&1N!=t){u r=[];1N=t;t=6.2K(t).1B(/^\\/\\//i,"");u 36=U;I(u i=0;i<6.3B.D;i+=2){l(36)51;u 2v=1h 43("^("+6.3B[i]+")");u m=2v.3d(t);l(m){r=L=6.2r(L,6.3B[i+1]);t=6.2K(t.1B(2v,""));36=T}}l(!36){l(!t.1b(",")||!t.1b("|")){l(L[0]==1o)L.4h();1K=6.1X(1K,L);r=L=[1o];t=" "+t.32(1,t.D)}G{u 3Z=/^([#.]?)([a-4Y-9\\\\*44-]*)/i;u m=3Z.3d(t);l(m[1]=="#"){u 4l=17.5V(m[2]);r=L=4l?[4l]:[];t=t.1B(3Z,"")}G{l(!m[2]||m[1]==".")m[2]="*";I(u i=0;i<L.D;i++)r=6.1X(r,m[2]=="*"?6.40(L[i]):L[i].4S(m[2]))}}}l(t){u 1D=6.1c(t,r);L=r=1D.r;t=6.2K(1D.t)}}l(L&&L[0]==1o)L.4h();1K=6.1X(1K,L);v 1K},40:q(o,r){r=r||[];u s=o.2f;I(u i=0;i<s.D;i++)l(s[i].1R==1){r.1k(s[i]);6.40(s[i],r)}v r},1t:q(F,1d,Y){u 2m={"I":"7v","6P":"1j","3p":6.11.1p?"37":"2y",2y:6.11.1p?"37":"2y",2V:"2V",1j:"1j",Y:"Y",2P:"2P",2J:"2J",6R:"6S"};l(1d=="1m"&&6.11.1p&&Y!=Q){F[\'6U\']=1;l(Y==1)v F["1c"]=F["1c"].1B(/3k\\([^\\)]*\\)/5c,"");G v F["1c"]=F["1c"].1B(/3k\\([^\\)]*\\)/5c,"")+"3k(1m="+Y*4U+")"}G l(1d=="1m"&&6.11.1p){v F["1c"]?4c(F["1c"].4T(/3k\\(1m=(.*)\\)/)[1])/4U:1}l(1d=="1m"&&6.11.2I&&Y==1)Y=0.6W;l(2m[1d]){l(Y!=Q)F[2m[1d]]=Y;v F[2m[1d]]}G l(Y==Q&&6.11.1p&&F.2p&&F.2p.2b()==\'6X\'&&(1d==\'7f\'||1d==\'7e\')){v F.70(1d).4Z}G l(F.3a!=Q&&F.7b){l(Y!=Q)F.72(1d,Y);v F.3a(1d)}G{1d=1d.1B(/-([a-z])/73,q(z,b){v b.2b()});l(Y!=Q)F[1d]=Y;v F[1d]}},4X:["\\\\[ *(@)S *([!*$^=]*) *(\'?\\"?)(.*?)\\\\4 *\\\\]","(\\\\[)\\s*(.*?)\\s*\\\\]","(:)S\\\\(\\"?\'?([^\\\\)]*?)\\"?\'?\\\\)","([:.#]*)S"],1c:q(t,r,2t){u g=2t!==U?6.2O:q(a,f){v 6.2O(a,f,T)};24(t&&/^[a-z[({<*:.#]/i.28(t)){u p=6.4X;I(u i=0;i<p.D;i++){u 2v=1h 43("^"+p[i].1B("S","([a-z*44-][a-4Y-76-]*)"),"i");u m=2v.3d(t);l(m){l(!i)m=["",m[1],m[3],m[2],m[5]];t=t.1B(2v,"");45}}l(m[1]==":"&&m[2]=="2t")r=6.1c(m[3],r,U).r;G{u f=6.2u[m[1]];l(f.O!=1C)f=6.2u[m[1]][m[2]];3A("f = q(a,i){"+(m[1]=="@"?"z=6.1t(a,m[3]);":"")+"v "+f+"}");r=g(r,f)}}v{r:r,t:t}},2K:q(t){v t.1B(/^\\s+|\\s+$/g,"")},3L:q(F){u 47=[];u 1l=F.1i;24(1l&&1l!=17){47.1k(1l);1l=1l.1i}v 47},1x:q(F,2j,2t){u 14=[];l(F){u 2k=F.1i.2f;I(u i=0;i<2k.D;i++){l(2t===T&&2k[i]==F)51;l(2k[i].1R==1)14.1k(2k[i]);l(2k[i]==F)14.n=14.D-1}}v 6.1y(14,{1N:14.n==14.D-1,1l:2j=="52"&&14.n%2==0||2j=="53"&&14.n%2||14[2j]==F,4j:14[14.n-1],3z:14[14.n+1]})},1X:q(2h,35){u 1J=[];I(u k=0;k<2h.D;k++)1J[k]=2h[k];I(u i=0;i<35.D;i++){u 48=T;I(u j=0;j<2h.D;j++)l(35[i]==2h[j])48=U;l(48)1J.1k(35[i])}v 1J},2O:q(14,C,4a){l(C.O==1C)C=1h 1v("a","i","v "+C);u 1J=[];I(u i=0;i<14.D;i++)l(!4a&&C(14[i],i)||4a&&!C(14[i],i))1J.1k(14[i]);v 1J},2r:q(14,C){l(C.O==1C)C=1h 1v("a","v "+C);u 1J=[];I(u i=0;i<14.D;i++){u 1D=C(14[i],i);l(1D!==M&&1D!=Q){l(1D.O!=2z)1D=[1D];1J=6.1X(1J,1D)}}v 1J},J:{2g:q(P,B,1H){l(6.11.1p&&P.42!=Q)P=1z;l(!1H.2q)1H.2q=7.2q++;l(!P.1E)P.1E={};u 2W=P.1E[B];l(!2W){2W=P.1E[B]={};l(P["2N"+B])2W[0]=P["2N"+B]}2W[1H.2q]=1H;P["2N"+B]=7.58;l(!7.1e[B])7.1e[B]=[];7.1e[B].1k(P)},2q:1,1e:{},25:q(P,B,1H){l(P.1E)l(B&&P.1E[B])l(1H)57 P.1E[B][1H.2q];G I(u i 1r P.1E[B])57 P.1E[B][i];G I(u j 1r P.1E)7.25(P,j)},1P:q(B,K,P){K=K||[];l(!P){u g=7.1e[B];l(g)I(u i=0;i<g.D;i++)7.1P(B,K,g[i])}G l(P["2N"+B]){K.59(7.2m({B:B,2G:P}));P["2N"+B].16(P,K)}},58:q(J){l(1T 6=="Q")v U;J=J||6.J.2m(1z.J);l(!J)v U;u 3m=T;u c=7.1E[J.B];u 1g=[].7h.3O(19,1);1g.59(J);I(u j 1r c){l(c[j].16(7,1g)===U){J.4p();J.5a();3m=U}}v 3m},2m:q(J){l(6.11.1p){J=1z.J;J.2G=J.7i}G l(6.11.2M&&J.2G.1R==3){J=6.1y({},J);J.2G=J.2G.1i}J.4p=q(){7.3m=U};J.5a=q(){7.7l=T};v J}}});1h q(){u b=5I.5K.4d();6.11={2M:/5e/.28(b),30:/30/.28(b),1p:/1p/.28(b)&&!/30/.28(b),2I:/2I/.28(b)&&!/(7m|5e)/.28(b)};6.7n=!6.11.1p||17.7o=="7p"};6.2e={2o:{4H:"5g",7q:"5h",2Y:"5i",7r:"5j"},1f:"2c,1G,7s,5l,2H,3p,3h,7t,7u".3b(","),1c:["5n","5o","5X","5p"],1t:{1D:"Y",38:"2V",3H:M,7x:M,1d:M,7z:M,3w:M,7A:M},5r:{5s:"a.1i",7B:6.3L,3L:6.3L,3z:"6.1x(a).3z",4j:"6.1x(a).4j",2k:"6.1x(a, M, T)",7C:"6.1x(a.2a)"},W:{5u:q(1L){7.7E(1L)},1A:q(){7.1a.1u=7.2A?7.2A:"";l(6.1f(7,"1u")=="20")7.1a.1u="2F"},1s:q(){7.2A=7.2A||6.1f(7,"1u");l(7.2A=="20")7.2A="2F";7.1a.1u="20"},4o:q(){6(7)[6(7).4E(":1S")?"1A":"1s"].16(6(7),19)},7F:q(c){6.1j.2g(7,c)},7G:q(c){6.1j.25(7,c)},7H:q(c){6.1j[6.1j.3t(7,c)?"25":"2g"](7,c)},25:q(a){l(!a||6.1c(a,[7]).r)7.1i.3s(7)},5B:q(){24(7.2a)7.3s(7.2a)},2Z:q(B,C){l(C.O==1C)C=1h 1v("e",(!C.1b(".")?"6(7)":"v ")+C);6.J.2g(7,B,C)},4C:q(B,C){6.J.25(7,B,C)},1P:q(B,K){6.J.1P(B,K,7)}}};6.5C();6.C.1y({5E:6.C.4o,4o:q(a,b){v a&&b&&a.O==1v&&b.O==1v?7.5M(q(e){7.1N=7.1N==a?b:a;e.4p();v 7.1N.16(7,[e])||U}):7.5E.16(7,19)},7K:q(f,g){q 4r(e){u p=(e.B=="3C"?e.7M:e.7N)||e.7O;24(p&&p!=7)3u{p=p.1i}3o(e){p=7};l(p==7)v U;v(e.B=="3C"?f:g).16(7,[e])}v 7.3C(4r).5Q(4r)},1W:q(f){l(6.3y)f.16(17);G{6.2C.1k(f)}v 7}});6.1y({3y:U,2C:[],1W:q(){l(!6.3y){6.3y=T;l(6.2C){I(u i=0;i<6.2C.D;i++)6.2C[i].16(17);6.2C=M}l(6.11.2I||6.11.30)17.7P("5T",6.1W,U)}}});1h q(){u e=("7R,7S,2S,7T,7U,4z,5M,7V,"+"7X,7Y,81,3C,5Q,83,4w,3c,"+"4x,86,87,88,2l").3b(",");I(u i=0;i<e.D;i++)1h q(){u o=e[i];6.C[o]=q(f){v f?7.2Z(o,f):7.1P(o)};6.C["89"+o]=q(f){v 7.4C(o,f)};6.C["8a"+o]=q(f){u P=6(7);u 1H=q(){P.4C(o,1H);P=M;f.16(7,19)};v 7.2Z(o,1H)}};l(6.11.2I||6.11.30){17.8c("5T",6.1W,U)}G l(6.11.1p){17.8d("<8e"+"8f 3H=5W 8n=T "+"3w=//:><\\/27>");u 27=17.5V("5W");27.2w=q(){l(7.3n!="1I")v;7.1i.3s(7);6.1W()};27=M}G l(6.11.2M){6.3N=42(q(){l(17.3n=="63"||17.3n=="1I"){56(6.3N);6.3N=M;6.1W()}},10)}6.J.2g(1z,"2S",6.1W)};l(6.11.1p)6(1z).4z(q(){u J=6.J,1e=J.1e;I(u B 1r 1e){u 3P=1e[B],i=3P.D;l(i>0)6a l(B!=\'4z\')J.25(3P[i-1],B);24(--i)}});6.C.1y({60:6.C.1A,1A:q(12,H){v 12?7.1U({1G:"1A",2c:"1A",1m:"1A"},12,H):7.60()},5U:6.C.1s,1s:q(12,H){v 12?7.1U({1G:"1s",2c:"1s",1m:"1s"},12,H):7.5U()},6n:q(12,H){v 7.1U({1G:"1A"},12,H)},6o:q(12,H){v 7.1U({1G:"1s"},12,H)},6p:q(12,H){v 7.W(q(){u 4J=6(7).4E(":1S")?"1A":"1s";6(7).1U({1G:4J},12,H)})},6r:q(12,H){v 7.1U({1m:"1A"},12,H)},6s:q(12,H){v 7.1U({1m:"1s"},12,H)},6t:q(12,2o,H){v 7.1U({1m:2o},12,H)},1U:q(E,12,H){v 7.1w(q(){7.2U=6.1y({},E);I(u p 1r E){u e=1h 6.2R(7,6.12(12,H),p);l(E[p].O==4O)e.3e(e.1l(),E[p]);G e[E[p]](E)}})},1w:q(B,C){l(!C){C=B;B="2R"}v 7.W(q(){l(!7.1w)7.1w={};l(!7.1w[B])7.1w[B]=[];7.1w[B].1k(C);l(7.1w[B].D==1)C.16(7)})}});6.1y({5f:q(e,p){l(e.5F)v;l(p=="1G"&&e.4L!=3l(6.26(e,p)))v;l(p=="2c"&&e.4M!=3l(6.26(e,p)))v;u a=e.1a[p];u o=6.26(e,p,1);l(p=="1G"&&e.4L!=o||p=="2c"&&e.4M!=o)v;e.1a[p]=e.34?"":"5H";u n=6.26(e,p,1);l(o!=n&&n!="5H"){e.1a[p]=a;e.5F=T}},12:q(s,o){o=o||{};l(o.O==1v)o={1I:o};u 5D={6G:6H,6J:4K};o.2E=(s&&s.O==4O?s:5D[s])||5k;o.3J=o.1I;o.1I=q(){6.4R(7,"2R");l(o.3J&&o.3J.O==1v)o.3J.16(7)};v o},1w:{},4R:q(F,B){B=B||"2R";l(F.1w&&F.1w[B]){F.1w[B].4h();u f=F.1w[B][0];l(f)f.16(F)}},2R:q(F,2x,E){u z=7;z.o={2E:2x.2E||5k,1I:2x.1I,2s:2x.2s};z.V=F;u y=z.V.1a;z.a=q(){l(2x.2s)2x.2s.16(F,[z.2i]);l(E=="1m")6.1t(y,"1m",z.2i);G l(3l(z.2i))y[E]=3l(z.2i)+"5d";y.1u="2F"};z.61=q(){v 4c(6.1f(z.V,E))};z.1l=q(){u r=4c(6.26(z.V,E));v r&&r>-6Z?r:z.61()};z.3e=q(41,2o){z.3M=(1h 54()).55();z.2i=41;z.a();z.49=42(q(){z.2s(41,2o)},13)};z.1A=q(){l(!z.V.1Q)z.V.1Q={};z.V.1Q[E]=7.1l();z.3e(0,z.V.1Q[E]);l(E!="1m")y[E]="77"};z.1s=q(){l(!z.V.1Q)z.V.1Q={};z.V.1Q[E]=7.1l();z.o.1s=T;z.3e(z.V.1Q[E],0)};l(!z.V.4b)z.V.4b=6.1f(z.V,"3h");y.3h="1S";z.2s=q(4B,4g){u t=(1h 54()).55();l(t>z.o.2E+z.3M){56(z.49);z.49=M;z.2i=4g;z.a();z.V.2U[E]=T;u 1K=T;I(u i 1r z.V.2U)l(z.V.2U[i]!==T)1K=U;l(1K){y.3h=z.V.4b;l(z.o.1s)y.1u=\'20\';l(z.o.1s){I(u p 1r z.V.2U){l(p=="1m")6.1t(y,p,z.V.1Q[p]);G y[p]=z.V.1Q[p]+"5d";l(p==\'1G\'||p==\'2c\')6.5f(z.V,p)}}}l(1K&&z.o.1I&&z.o.1I.O==1v)z.o.1I.16(z.V)}G{u p=(t-7.3M)/z.o.2E;z.2i=((-5q.7w(p*5q.7y)/2)+0.5)*(4g-4B)+4B;z.a()}}}});6.C.1y({7D:q(N,1O,H){7.2S(N,1O,H,1)},2S:q(N,1O,H,1F){l(N.O==1v)v 7.2Z("2S",N);H=H||q(){};u B="3T";l(1O){l(1O.O==1v){H=1O;1O=M}G{1O=6.2Q(1O);B="4W"}}u 4m=7;6.3I(B,N,1O,q(3v,18){l(18=="2D"||!1F&&18=="5m"){4m.38(3v.3G).3X().W(H,[3v.3G,18])}G H.16(4m,[3v.3G,18])},1F);v 7},7J:q(){v 6.2Q(7)},3X:q(){v 7.1V(\'27\').W(q(){l(7.3w)6.5Y(7.3w,q(){});G 3A.3O(1z,7.2B||7.7L||7.2V||"")}).4q()}});l(6.11.1p&&1T 3i=="Q")3i=q(){v 1h 7Q(5I.5K.1b("7W 5")>=0?"82.5R":"84.5R")};1h q(){u e="5O,5G,5A,5x,5t".3b(",");I(u i=0;i<e.D;i++)1h q(){u o=e[i];6.C[o]=q(f){v 7.2Z(o,f)}}};6.1y({1n:q(N,K,H,B,1F){l(K&&K.O==1v){B=H;H=K;K=M}l(K)N+=((N.1b("?")>-1)?"&":"?")+6.2Q(K);6.3I("3T",N,M,q(r,18){l(H)H(6.3r(r,B),18)},1F)},8h:q(N,K,H,B){6.1n(N,K,H,B,1)},5Y:q(N,H){l(H)6.1n(N,M,H,"27");G{6.1n(N,M,M,"27")}},64:q(N,K,H){l(H)6.1n(N,K,H,"3S");G{6.1n(N,K,"3S")}},8o:q(N,K,H,B){6.3I("4W",N,6.2Q(K),q(r,18){l(H)H(6.3r(r,B),18)})},1q:0,6h:q(1q){6.1q=1q},39:{},3I:q(B,N,K,L,1F){u 1e=T;u 1q=6.1q;l(!N){L=B.1I;u 2D=B.2D;u 2l=B.2l;u 4k=B.4k;u 1e=1T B.1e=="6q"?B.1e:T;u 1q=1T B.1q=="6u"?B.1q:6.1q;1F=B.1F||U;K=B.K;N=B.N;B=B.B}l(1e&&!6.4v++)6.J.1P("5O");u 4y=U;u R=1h 3i();R.6B(B||"3T",N,T);l(K)R.3j("6I-6K","6M/x-6N-6Q-6T");l(1F)R.3j("6V-3Y-6Y",6.39[N]||"71, 74 75 78 46:46:46 79");R.3j("X-7a-7d","3i");l(R.7g)R.3j("7j","7k");u 2w=q(4F){l(R&&(R.3n==4||4F=="1q")){4y=T;u 18=6.4G(R)&&4F!="1q"?1F&&6.4N(R,N)?"5m":"2D":"2l";l(18!="2l"){u 3q;3u{3q=R.4i("4P-3Y")}3o(e){}l(1F&&3q)6.39[N]=3q;l(2D)2D(6.3r(R,4k),18);l(1e)6.J.1P("5t")}G{l(2l)2l(R,18);l(1e)6.J.1P("5x")}l(1e)6.J.1P("5A");l(1e&&!--6.4v)6.J.1P("5G");l(L)L(R,18);R.2w=q(){};R=M}};R.2w=2w;l(1q>0)7Z(q(){l(R){R.85();l(!4y)2w("1q");R=M}},1q);R.8i(K)},4v:0,4G:q(r){3u{v!r.18&&66.6d=="3Q:"||(r.18>=4K&&r.18<6y)||r.18==5b||6.11.2M&&r.18==Q}3o(e){}v U},4N:q(R,N){3u{u 4V=R.4i("4P-3Y");v R.18==5b||4V==6.39[N]||6.11.2M&&R.18==Q}3o(e){}v U},3r:q(r,B){u 4n=r.4i("7I-B");u K=!B&&4n&&4n.1b("R")>=0;K=B=="R"||K?r.80:r.3G;l(B=="27")3A.3O(1z,K);l(B=="3S")3A("K = "+K);l(B=="38")$("<21>").38(K).3X();v K},2Q:q(a){u s=[];l(a.O==2z||a.3E){I(u i=0;i<a.D;i++)s.1k(a[i].1d+"="+50(a[i].Y))}G{I(u j 1r a)s.1k(j+"="+50(a[j]))}v s.5Z("&")}})}',62,521,'||||||jQuery|this||||||||||||||if|||||function||||var|return||||||type|fn|length|prop|elem|else|callback|for|event|data|ret|null|url|constructor|element|undefined|xml||true|false|el|each||value|||browser|speed||elems|obj|apply|document|status|arguments|style|indexOf|filter|name|global|css|args|new|parentNode|className|push|cur|opacity|get|context|msie|timeout|in|hide|attr|display|Function|queue|sibling|extend|window|show|replace|String|val|events|ifModified|height|handler|complete|result|done|key|arg|last|params|trigger|orig|nodeType|hidden|typeof|animate|find|ready|merge|wrap|old|none|div|table|num|while|remove|curCSS|script|test|tbody|firstChild|toUpperCase|width|fn2|macros|childNodes|add|first|now|pos|siblings|error|fix|pushStack|to|nodeName|guid|map|step|not|expr|re|onreadystatechange|options|cssFloat|Array|oldblock|text|readyList|success|duration|block|target|position|mozilla|checked|trim|classes|safari|on|grep|disabled|param|fx|load|domManip|curAnim|innerHTML|handlers|dir|insertBefore|bind|opera|parPos|substr|stack|currentStyle|second|foundToken|styleFloat|html|lastModified|getAttribute|split|select|exec|custom|cloneNode|defaultView|overflow|XMLHttpRequest|setRequestHeader|alpha|parseInt|returnValue|readyState|catch|float|modRes|httpData|removeChild|has|try|res|src|child|isReady|next|eval|token|mouseover|clean|jquery|oWidth|responseText|id|ajax|oldComplete|oHeight|parents|startTime|safariTimer|call|els|file|static|json|GET|visibility|selected|radio|evalScripts|Modified|re2|getAll|from|setInterval|RegExp|_|break|00|matched|noCollision|timer|inv|oldOverflow|parseFloat|toLowerCase|appendChild|clone|lastNum|shift|getResponseHeader|prev|dataType|oid|self|ct|toggle|preventDefault|end|handleHover|button|tr|getComputedStyle|active|reset|submit|requestDone|unload|swap|firstNum|unbind|deep|is|istimeout|httpSuccess|appendTo|force|state|200|scrollHeight|scrollWidth|httpNotModified|Number|Last|documentElement|dequeue|getElementsByTagName|match|100|xmlRes|POST|parse|z0|nodeValue|encodeURIComponent|continue|even|odd|Date|getTime|clearInterval|delete|handle|unshift|stopPropagation|304|gi|px|webkit|setAuto|append|prepend|before|after|400|left|notmodified|eq|lt|contains|Math|axis|parent|ajaxSuccess|removeAttr|password|image|ajaxError|checkbox|input|ajaxComplete|empty|init|ss|_toggle|notAuto|ajaxStop|auto|navigator|size|userAgent|nth|click|createElement|ajaxStart|getPropertyValue|mouseout|XMLHTTP|newProp|DOMContentLoaded|_hide|getElementById|__ie_init|gt|getScript|join|_show|max|THEAD|loaded|getJSON|initDone|location|splice|Top|Right|do|padding|border|protocol|Width|offsetHeight|offsetWidth|ajaxTimeout|absolute|right|relative|clientHeight|clientWidth|slideDown|slideUp|slideToggle|boolean|fadeIn|fadeOut|fadeTo|number|opt|thead|td|300|th|createTextNode|open|toString|only|visible|enabled|slow|600|Content|fast|Type|textarea|application|www|Bottom|class|form|readonly|readOnly|urlencoded|zoom|If|9999|FORM|Since|10000|getAttributeNode|Thu|setAttribute|ig|01|Jan|9_|1px|1970|GMT|Requested|tagName|Left|With|method|action|overrideMimeType|slice|srcElement|Connection|close|cancelBubble|compatible|boxModel|compatMode|CSS1Compat|prependTo|insertAfter|top|color|background|htmlFor|cos|title|PI|href|rel|ancestors|children|loadIfModified|removeAttribute|addClass|removeClass|toggleClass|content|serialize|hover|textContent|fromElement|toElement|relatedTarget|removeEventListener|ActiveXObject|blur|focus|resize|scroll|dblclick|MSIE|mousedown|mouseup|setTimeout|responseXML|mousemove|Microsoft|change|Msxml2|abort|keydown|keypress|keyup|un|one|prototype|addEventListener|write|scr|ipt|index|getIfModified|send|nextSibling|pop|Boolean|TABLE|defer|post'.split('|'),0,{}))