(function(n,t){var d="enumerator is disposed",g="single:sequence contains more than one element.",f=!1,u=null,s=!0,o={Identity:function(n){return n},True:function(){return s},Blank:function(){}},c={Boolean:typeof s,Number:"number",String:"string",Object:"object",Undefined:typeof t,Function:typeof function(){}},r={createLambda:function(n){var l,i,v,s,h,t,f,e,a,r;if(n==u)return o.Identity;if(typeof n==c.String){if(n=="")return o.Identity;if(n.indexOf("=>")==-1){for(l=new RegExp("[$]+","g"),i=0;v=l.exec(n);)s=v[0].length,s>i&&(i=s);for(h=[],t=1;t<=i;t++){for(f="",e=0;e<t;e++)f+="$";h.push(f)}return a=Array.prototype.join.call(h,","),new Function(a,"return "+n)}return r=n.match(/^[(\s]*([^()]*?)[)\s]*=>(.*)/),new Function(r[1],"return "+r[2])}return n},isIEnumerable:function(n){if(typeof Enumerator!==c.Undefined)try{return new Enumerator(n),s}catch(t){}return f},defineProperty:Object.defineProperties!=u?function(n,t,i){Object.defineProperty(n,t,{enumerable:f,configurable:s,writable:s,value:i})}:function(n,t,i){n[t]=i},compare:function(n,t){return n===t?0:n>t?1:-1},dispose:function(n){n!=u&&n.dispose()}},y={Before:0,Running:1,After:2},e=function(n,t,i){var u=new nt,r=y.Before;this.current=u.current,this.moveNext=function(){try{switch(r){case y.Before:r=y.Running,n();case y.Running:return t.apply(u)?s:(this.dispose(),f);case y.After:return f}}catch(i){this.dispose();throw i;}},this.dispose=function(){if(r==y.Running)try{i()}finally{r=y.After}}},nt=function(){var n=u;this.current=function(){return n},this.yieldReturn=function(t){return n=t,s},this.yieldBreak=function(){return f}},i=function(n){this.getEnumerator=n},l,p,b,h,a,v;i.Utils={},i.Utils.createLambda=function(n){return r.createLambda(n)},i.Utils.createEnumerable=function(n){return new i(n)},i.Utils.createEnumerator=function(n,t,i){return new e(n,t,i)},i.Utils.extendTo=function(n){var f=n.prototype,o,t,e;n===Array?(o=h.prototype,r.defineProperty(f,"getSource",function(){return this})):(o=i.prototype,r.defineProperty(f,"getEnumerator",function(){return i.from(this).getEnumerator()}));for(t in o)(e=o[t],f[t]!=e)&&(f[t]==u||(t=t+"ByLinq",f[t]!=e))&&e instanceof Function&&r.defineProperty(f,t,e)},i.choice=function(){var n=arguments;return new i(function(){return new e(function(){n=n[0]instanceof Array?n[0]:n[0].getEnumerator!=u?n[0].toArray():n},function(){return this.yieldReturn(n[Math.floor(Math.random()*n.length)])},o.Blank)})},i.cycle=function(){var n=arguments;return new i(function(){var t=0;return new e(function(){n=n[0]instanceof Array?n[0]:n[0].getEnumerator!=u?n[0].toArray():n},function(){return t>=n.length&&(t=0),this.yieldReturn(n[t++])},o.Blank)})},i.empty=function(){return new i(function(){return new e(o.Blank,function(){return f},o.Blank)})},i.from=function(n){if(n==u)return i.empty();if(n instanceof i)return n;if(typeof n==c.Number||typeof n==c.Boolean)return i.repeat(n,1);if(typeof n==c.String)return new i(function(){var t=0;return new e(o.Blank,function(){return t<n.length?this.yieldReturn(n.charAt(t++)):f},o.Blank)});if(typeof n!=c.Function){if(typeof n.length==c.Number)return new h(n);if(!(n instanceof Object)&&r.isIEnumerable(n))return new i(function(){var i=s,t;return new e(function(){t=new Enumerator(n)},function(){return i?i=f:t.moveNext(),t.atEnd()?f:this.yieldReturn(t.item())},o.Blank)});if(typeof Windows===c.Object&&typeof n.first===c.Function)return new i(function(){var i=s,t;return new e(function(){t=n.first()},function(){return i?i=f:t.moveNext(),t.hasCurrent?this.yieldReturn(t.current):this.yieldBreak()},o.Blank)})}return new i(function(){var t=[],i=0;return new e(function(){var i,r;for(i in n)r=n[i],!(r instanceof Function)&&Object.prototype.hasOwnProperty.call(n,i)&&t.push({key:i,value:r})},function(){return i<t.length?this.yieldReturn(t[i++]):f},o.Blank)})},i.make=function(n){return i.repeat(n,1)},i.matches=function(n,t,r){return r==u&&(r=""),t instanceof RegExp&&(r+=t.ignoreCase?"i":"",r+=t.multiline?"m":"",t=t.source),r.indexOf("g")===-1&&(r+="g"),new i(function(){var i;return new e(function(){i=new RegExp(t,r)},function(){var t=i.exec(n);return t?this.yieldReturn(t):f},o.Blank)})},i.range=function(n,t,r){return r==u&&(r=1),new i(function(){var i,u=0;return new e(function(){i=n-r},function(){return u++<t?this.yieldReturn(i+=r):this.yieldBreak()},o.Blank)})},i.rangeDown=function(n,t,r){return r==u&&(r=1),new i(function(){var i,u=0;return new e(function(){i=n+r},function(){return u++<t?this.yieldReturn(i-=r):this.yieldBreak()},o.Blank)})},i.rangeTo=function(n,t,r){return r==u&&(r=1),n<t?new i(function(){var i;return new e(function(){i=n-r},function(){var n=i+=r;return n<=t?this.yieldReturn(n):this.yieldBreak()},o.Blank)}):new i(function(){var i;return new e(function(){i=n+r},function(){var n=i-=r;return n>=t?this.yieldReturn(n):this.yieldBreak()},o.Blank)})},i.repeat=function(n,t){return t!=u?i.repeat(n).take(t):new i(function(){return new e(o.Blank,function(){return this.yieldReturn(n)},o.Blank)})},i.repeatWithFinalize=function(n,t){return n=r.createLambda(n),t=r.createLambda(t),new i(function(){var i;return new e(function(){i=n()},function(){return this.yieldReturn(i)},function(){i!=u&&(t(i),i=u)})})},i.generate=function(n,t){return t!=u?i.generate(n).take(t):(n=r.createLambda(n),new i(function(){return new e(o.Blank,function(){return this.yieldReturn(n())},o.Blank)}))},i.toInfinity=function(n,t){return n==u&&(n=0),t==u&&(t=1),new i(function(){var i;return new e(function(){i=n-t},function(){return this.yieldReturn(i+=t)},o.Blank)})},i.toNegativeInfinity=function(n,t){return n==u&&(n=0),t==u&&(t=1),new i(function(){var i;return new e(function(){i=n+t},function(){return this.yieldReturn(i-=t)},o.Blank)})},i.unfold=function(n,t){return t=r.createLambda(t),new i(function(){var r=s,i;return new e(o.Blank,function(){return r?(r=f,i=n,this.yieldReturn(i)):(i=t(i),this.yieldReturn(i))},o.Blank)})},i.defer=function(n){return new i(function(){var t;return new e(function(){t=i.from(n()).getEnumerator()},function(){return t.moveNext()?this.yieldReturn(t.current()):this.yieldBreak()},function(){r.dispose(t)})})},i.prototype.traverseBreadthFirst=function(n,t){var u=this;return n=r.createLambda(n),t=r.createLambda(t),new i(function(){var o,c=0,h=[];return new e(function(){o=u.getEnumerator()},function(){while(s){if(o.moveNext())return h.push(o.current()),this.yieldReturn(t(o.current(),c));var u=i.from(h).selectMany(function(t){return n(t)});if(u.any())c++,h=[],r.dispose(o),o=u.getEnumerator();else return f}},function(){r.dispose(o)})})},i.prototype.traverseDepthFirst=function(n,t){var u=this;return n=r.createLambda(n),t=r.createLambda(t),new i(function(){var h=[],o;return new e(function(){o=u.getEnumerator()},function(){while(s){if(o.moveNext()){var u=t(o.current(),h.length);return h.push(o),o=i.from(n(o.current())).getEnumerator(),this.yieldReturn(u)}if(h.length<=0)return f;r.dispose(o),o=h.pop()}},function(){try{r.dispose(o)}finally{i.from(h).forEach(function(n){n.dispose()})}})})},i.prototype.flatten=function(){var n=this;return new i(function(){var h,t=u;return new e(function(){h=n.getEnumerator()},function(){while(s){if(t!=u){if(t.moveNext())return this.yieldReturn(t.current());t=u}if(h.moveNext())if(h.current()instanceof Array){r.dispose(t),t=i.from(h.current()).selectMany(o.Identity).flatten().getEnumerator();continue}else return this.yieldReturn(h.current());return f}},function(){try{r.dispose(h)}finally{r.dispose(t)}})})},i.prototype.pairwise=function(n){var t=this;return n=r.createLambda(n),new i(function(){var i;return new e(function(){i=t.getEnumerator(),i.moveNext()},function(){var t=i.current();return i.moveNext()?this.yieldReturn(n(t,i.current())):f},function(){r.dispose(i)})})},i.prototype.scan=function(n,t){var o,h;return t==u?(t=r.createLambda(n),o=f):(t=r.createLambda(t),o=s),h=this,new i(function(){var i,u,c=s;return new e(function(){i=h.getEnumerator()},function(){if(c){if(c=f,o)return this.yieldReturn(u=n);if(i.moveNext())return this.yieldReturn(u=i.current())}return i.moveNext()?this.yieldReturn(u=t(u,i.current())):f},function(){r.dispose(i)})})},i.prototype.select=function(n){if(n=r.createLambda(n),n.length<=1)return new v(this,u,n);var t=this;return new i(function(){var i,u=0;return new e(function(){i=t.getEnumerator()},function(){return i.moveNext()?this.yieldReturn(n(i.current(),u++)):f},function(){r.dispose(i)})})},i.prototype.selectMany=function(n,o){var s=this;return n=r.createLambda(n),o==u&&(o=function(n,t){return t}),o=r.createLambda(o),new i(function(){var c,h=t,l=0;return new e(function(){c=s.getEnumerator()},function(){if(h===t&&!c.moveNext())return f;do{if(h==u){var e=n(c.current(),l++);h=i.from(e).getEnumerator()}if(h.moveNext())return this.yieldReturn(o(c.current(),h.current()));r.dispose(h),h=u}while(c.moveNext());return f},function(){try{r.dispose(c)}finally{r.dispose(h)}})})},i.prototype.where=function(n){if(n=r.createLambda(n),n.length<=1)return new a(this,n);var t=this;return new i(function(){var i,u=0;return new e(function(){i=t.getEnumerator()},function(){while(i.moveNext())if(n(i.current(),u++))return this.yieldReturn(i.current());return f},function(){r.dispose(i)})})},i.prototype.choose=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i,f=0;return new e(function(){i=t.getEnumerator()},function(){while(i.moveNext()){var t=n(i.current(),f++);if(t!=u)return this.yieldReturn(t)}return this.yieldBreak()},function(){r.dispose(i)})})},i.prototype.ofType=function(n){var t;switch(n){case Number:t=c.Number;break;case String:t=c.String;break;case Boolean:t=c.Boolean;break;case Function:t=c.Function;break;default:t=u}return t===u?this.where(function(t){return t instanceof n}):this.where(function(n){return typeof n===t})},i.prototype.zip=function(){var s=arguments,o=r.createLambda(arguments[arguments.length-1]),n=this,t;return arguments.length==2?(t=arguments[0],new i(function(){var s,u,h=0;return new e(function(){s=n.getEnumerator(),u=i.from(t).getEnumerator()},function(){return s.moveNext()&&u.moveNext()?this.yieldReturn(o(s.current(),u.current(),h++)):f},function(){try{r.dispose(s)}finally{r.dispose(u)}})})):new i(function(){var t,f=0;return new e(function(){var r=i.make(n).concat(i.from(s).takeExceptLast().select(i.from)).select(function(n){return n.getEnumerator()}).toArray();t=i.from(r)},function(){if(t.all(function(n){return n.moveNext()})){var n=t.select(function(n){return n.current()}).toArray();return n.push(f++),this.yieldReturn(o.apply(u,n))}return this.yieldBreak()},function(){i.from(t).forEach(r.dispose)})})},i.prototype.merge=function(){var t=arguments,n=this;return new i(function(){var u,f=-1;return new e(function(){u=i.make(n).concat(i.from(t).select(i.from)).select(function(n){return n.getEnumerator()}).toArray()},function(){while(u.length>0){f=f>=u.length-1?0:f+1;var n=u[f];if(n.moveNext())return this.yieldReturn(n.current());n.dispose(),u.splice(f--,1)}return this.yieldBreak()},function(){i.from(u).forEach(r.dispose)})})},i.prototype.join=function(n,h,c,l,a){h=r.createLambda(h),c=r.createLambda(c),l=r.createLambda(l),a=r.createLambda(a);var v=this;return new i(function(){var y,b,p=u,w=0;return new e(function(){y=v.getEnumerator(),b=i.from(n).toLookup(c,o.Identity,a)},function(){for(var n,i;s;){if(p!=u){if(n=p[w++],n!==t)return this.yieldReturn(l(y.current(),n));n=u,w=0}if(y.moveNext())i=h(y.current()),p=b.get(i).toArray();else return f}},function(){r.dispose(y)})})},i.prototype.groupJoin=function(n,t,s,h,c){t=r.createLambda(t),s=r.createLambda(s),h=r.createLambda(h),c=r.createLambda(c);var l=this;return new i(function(){var a=l.getEnumerator(),v=u;return new e(function(){a=l.getEnumerator(),v=i.from(n).toLookup(s,o.Identity,c)},function(){if(a.moveNext()){var n=v.get(t(a.current()));return this.yieldReturn(h(a.current(),n))}return f},function(){r.dispose(a)})})},i.prototype.all=function(n){n=r.createLambda(n);var t=s;return this.forEach(function(i){if(!n(i))return t=f,f}),t},i.prototype.any=function(n){n=r.createLambda(n);var t=this.getEnumerator();try{if(arguments.length==0)return t.moveNext();while(t.moveNext())if(n(t.current()))return s;return f}finally{r.dispose(t)}},i.prototype.isEmpty=function(){return!this.any()},i.prototype.concat=function(){var o=this,t,n;return arguments.length==1?(t=arguments[0],new i(function(){var s,n;return new e(function(){s=o.getEnumerator()},function(){if(n==u){if(s.moveNext())return this.yieldReturn(s.current());n=i.from(t).getEnumerator()}return n.moveNext()?this.yieldReturn(n.current()):f},function(){try{r.dispose(s)}finally{r.dispose(n)}})})):(n=arguments,new i(function(){var t;return new e(function(){t=i.make(o).concat(i.from(n).select(i.from)).select(function(n){return n.getEnumerator()}).toArray()},function(){while(t.length>0){var n=t[0];if(n.moveNext())return this.yieldReturn(n.current());n.dispose(),t.splice(0,1)}return this.yieldBreak()},function(){i.from(t).forEach(r.dispose)})}))},i.prototype.insert=function(n,t){var u=this;return new i(function(){var h,o,l=0,c=f;return new e(function(){h=u.getEnumerator(),o=i.from(t).getEnumerator()},function(){return l==n&&o.moveNext()?(c=s,this.yieldReturn(o.current())):h.moveNext()?(l++,this.yieldReturn(h.current())):!c&&o.moveNext()?this.yieldReturn(o.current()):f},function(){try{r.dispose(h)}finally{r.dispose(o)}})})},i.prototype.alternate=function(n){var t=this;return new i(function(){var h,o,c,f;return new e(function(){c=n instanceof Array||n.getEnumerator!=u?i.from(i.from(n).toArray()):i.make(n),o=t.getEnumerator(),o.moveNext()&&(h=o.current())},function(){while(s){if(f!=u){if(f.moveNext())return this.yieldReturn(f.current());f=u}if(h==u&&o.moveNext()){h=o.current(),f=c.getEnumerator();continue}else if(h!=u){var n=h;return h=u,this.yieldReturn(n)}return this.yieldBreak()}},function(){try{r.dispose(o)}finally{r.dispose(f)}})})},i.prototype.contains=function(n,t){t=r.createLambda(t);var i=this.getEnumerator();try{while(i.moveNext())if(t(i.current())===n)return s;return f}finally{r.dispose(i)}},i.prototype.defaultIfEmpty=function(n){var o=this;return n===t&&(n=u),new i(function(){var t,i=s;return new e(function(){t=o.getEnumerator()},function(){return t.moveNext()?(i=f,this.yieldReturn(t.current())):i?(i=f,this.yieldReturn(n)):f},function(){r.dispose(t)})})},i.prototype.distinct=function(n){return this.except(i.empty(),n)},i.prototype.distinctUntilChanged=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i,u,o;return new e(function(){i=t.getEnumerator()},function(){while(i.moveNext()){var t=n(i.current());if(o)return o=f,u=t,this.yieldReturn(i.current());if(u!==t)return u=t,this.yieldReturn(i.current())}return this.yieldBreak()},function(){r.dispose(i)})})},i.prototype.except=function(n,t){t=r.createLambda(t);var u=this;return new i(function(){var s,o;return new e(function(){s=u.getEnumerator(),o=new w(t),i.from(n).forEach(function(n){o.add(n)})},function(){while(s.moveNext()){var n=s.current();if(!o.contains(n))return o.add(n),this.yieldReturn(n)}return f},function(){r.dispose(s)})})},i.prototype.intersect=function(n,t){t=r.createLambda(t);var u=this;return new i(function(){var o,h,s;return new e(function(){o=u.getEnumerator(),h=new w(t),i.from(n).forEach(function(n){h.add(n)}),s=new w(t)},function(){while(o.moveNext()){var n=o.current();if(!s.contains(n)&&h.contains(n))return s.add(n),this.yieldReturn(n)}return f},function(){r.dispose(o)})})},i.prototype.sequenceEqual=function(n,t){var e,u;t=r.createLambda(t),e=this.getEnumerator();try{u=i.from(n).getEnumerator();try{while(e.moveNext())if(!u.moveNext()||t(e.current())!==t(u.current()))return f;return u.moveNext()?f:s}finally{r.dispose(u)}}finally{r.dispose(e)}},i.prototype.union=function(n,u){u=r.createLambda(u);var o=this;return new i(function(){var c,h,s;return new e(function(){c=o.getEnumerator(),s=new w(u)},function(){var r;if(h===t){while(c.moveNext())if(r=c.current(),!s.contains(r))return s.add(r),this.yieldReturn(r);h=i.from(n).getEnumerator()}while(h.moveNext())if(r=h.current(),!s.contains(r))return s.add(r),this.yieldReturn(r);return f},function(){try{r.dispose(c)}finally{r.dispose(h)}})})},i.prototype.orderBy=function(n){return new l(this,n,f)},i.prototype.orderByDescending=function(n){return new l(this,n,s)},i.prototype.reverse=function(){var n=this;return new i(function(){var i,t;return new e(function(){i=n.toArray(),t=i.length},function(){return t>0?this.yieldReturn(i[--t]):f},o.Blank)})},i.prototype.shuffle=function(){var n=this;return new i(function(){var t;return new e(function(){t=n.toArray()},function(){if(t.length>0){var n=Math.floor(Math.random()*t.length);return this.yieldReturn(t.splice(n,1)[0])}return f},o.Blank)})},i.prototype.weightedSample=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i,r=0;return new e(function(){i=t.choose(function(t){var i=n(t);return i<=0?u:(r+=i,{value:t,bound:r})}).toArray()},function(){var t;if(i.length>0){for(var f=Math.floor(Math.random()*r)+1,u=-1,n=i.length;n-u>1;)t=Math.floor((u+n)/2),i[t].bound>=f?n=t:u=t;return this.yieldReturn(i[n].value)}return this.yieldBreak()},o.Blank)})},i.prototype.groupBy=function(n,t,o,s){var h=this;return n=r.createLambda(n),t=r.createLambda(t),o!=u&&(o=r.createLambda(o)),s=r.createLambda(s),new i(function(){var i;return new e(function(){i=h.toLookup(n,t,s).toEnumerable().getEnumerator()},function(){while(i.moveNext())return o==u?this.yieldReturn(i.current()):this.yieldReturn(o(i.current().key(),i.current()));return f},function(){r.dispose(i)})})},i.prototype.partitionBy=function(n,t,o,h){var l=this,c;return n=r.createLambda(n),t=r.createLambda(t),h=r.createLambda(h),o==u?(c=f,o=function(n,t){return new k(n,t)}):(c=s,o=r.createLambda(o)),new i(function(){var u,v,y,a=[];return new e(function(){u=l.getEnumerator(),u.moveNext()&&(v=n(u.current()),y=h(v),a.push(t(u.current())))},function(){for(var e,r;(e=u.moveNext())==s;)if(y===h(n(u.current())))a.push(t(u.current()));else break;return a.length>0?(r=c?o(v,i.from(a)):o(v,a),e?(v=n(u.current()),y=h(v),a=[t(u.current())]):a=[],this.yieldReturn(r)):f},function(){r.dispose(u)})})},i.prototype.buffer=function(n){var t=this;return new i(function(){var i;return new e(function(){i=t.getEnumerator()},function(){for(var t=[],r=0;i.moveNext();)if(t.push(i.current()),++r>=n)return this.yieldReturn(t);return t.length>0?this.yieldReturn(t):f},function(){r.dispose(i)})})},i.prototype.aggregate=function(n,t,i){return i=r.createLambda(i),i(this.scan(n,t,i).last())},i.prototype.average=function(n){n=r.createLambda(n);var i=0,t=0;return this.forEach(function(r){i+=n(r),++t}),i/t},i.prototype.count=function(n){n=n==u?o.True:r.createLambda(n);var t=0;return this.forEach(function(i,r){n(i,r)&&++t}),t},i.prototype.max=function(n){return n==u&&(n=o.Identity),this.select(n).aggregate(function(n,t){return n>t?n:t})},i.prototype.min=function(n){return n==u&&(n=o.Identity),this.select(n).aggregate(function(n,t){return n<t?n:t})},i.prototype.maxBy=function(n){return n=r.createLambda(n),this.aggregate(function(t,i){return n(t)>n(i)?t:i})},i.prototype.minBy=function(n){return n=r.createLambda(n),this.aggregate(function(t,i){return n(t)<n(i)?t:i})},i.prototype.sum=function(n){return n==u&&(n=o.Identity),this.select(n).aggregate(0,function(n,t){return n+t})},i.prototype.elementAt=function(n){var i,t=f;if(this.forEach(function(r,u){if(u==n)return i=r,t=s,f}),!t)throw new Error("index is less than 0 or greater than or equal to the number of elements in source.");return i},i.prototype.elementAtOrDefault=function(n,i){i===t&&(i=u);var e,r=f;return this.forEach(function(t,i){if(i==n)return e=t,r=s,f}),r?e:i},i.prototype.first=function(n){if(n!=u)return this.where(n).first();var i,t=f;if(this.forEach(function(n){return i=n,t=s,f}),!t)throw new Error("first:No element satisfies the condition.");return i},i.prototype.firstOrDefault=function(n,i){if(i===t&&(i=u),n!=u)return this.where(n).firstOrDefault(u,i);var e,r=f;return this.forEach(function(n){return e=n,r=s,f}),r?e:i},i.prototype.last=function(n){if(n!=u)return this.where(n).last();var i,t=f;if(this.forEach(function(n){t=s,i=n}),!t)throw new Error("last:No element satisfies the condition.");return i},i.prototype.lastOrDefault=function(n,i){if(i===t&&(i=u),n!=u)return this.where(n).lastOrDefault(u,i);var e,r=f;return this.forEach(function(n){r=s,e=n}),r?e:i},i.prototype.single=function(n){if(n!=u)return this.where(n).single();var i,t=f;if(this.forEach(function(n){if(t)throw new Error(g);else t=s,i=n}),!t)throw new Error("single:No element satisfies the condition.");return i},i.prototype.singleOrDefault=function(n,i){if(i===t&&(i=u),n!=u)return this.where(n).singleOrDefault(u,i);var e,r=f;return this.forEach(function(n){if(r)throw new Error(g);else r=s,e=n}),r?e:i},i.prototype.skip=function(n){var t=this;return new i(function(){var i,u=0;return new e(function(){for(i=t.getEnumerator();u++<n&&i.moveNext(););},function(){return i.moveNext()?this.yieldReturn(i.current()):f},function(){r.dispose(i)})})},i.prototype.skipWhile=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i,o=0,u=f;return new e(function(){i=t.getEnumerator()},function(){while(!u)if(i.moveNext()){if(!n(i.current(),o++))return u=s,this.yieldReturn(i.current());continue}else return f;return i.moveNext()?this.yieldReturn(i.current()):f},function(){r.dispose(i)})})},i.prototype.take=function(n){var t=this;return new i(function(){var i,u=0;return new e(function(){i=t.getEnumerator()},function(){return u++<n&&i.moveNext()?this.yieldReturn(i.current()):f},function(){r.dispose(i)})})},i.prototype.takeWhile=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i,u=0;return new e(function(){i=t.getEnumerator()},function(){return i.moveNext()&&n(i.current(),u++)?this.yieldReturn(i.current()):f},function(){r.dispose(i)})})},i.prototype.takeExceptLast=function(n){n==u&&(n=1);var t=this;return new i(function(){if(n<=0)return t.getEnumerator();var i,u=[];return new e(function(){i=t.getEnumerator()},function(){while(i.moveNext()){if(u.length==n)return u.push(i.current()),this.yieldReturn(u.shift());u.push(i.current())}return f},function(){r.dispose(i)})})},i.prototype.takeFromLast=function(n){if(n<=0||n==u)return i.empty();var t=this;return new i(function(){var h,o,s=[];return new e(function(){h=t.getEnumerator()},function(){while(h.moveNext())s.length==n&&s.shift(),s.push(h.current());return o==u&&(o=i.from(s).getEnumerator()),o.moveNext()?this.yieldReturn(o.current()):f},function(){r.dispose(o)})})},i.prototype.indexOf=function(n){var t=u;return typeof n===c.Function?this.forEach(function(i,r){if(n(i,r))return t=r,f}):this.forEach(function(i,r){if(i===n)return t=r,f}),t!==u?t:-1},i.prototype.lastIndexOf=function(n){var t=-1;return typeof n===c.Function?this.forEach(function(i,r){n(i,r)&&(t=r)}):this.forEach(function(i,r){i===n&&(t=r)}),t},i.prototype.asEnumerable=function(){return i.from(this)},i.prototype.toArray=function(){var n=[];return this.forEach(function(t){n.push(t)}),n},i.prototype.toLookup=function(n,i,u){n=r.createLambda(n),i=r.createLambda(i),u=r.createLambda(u);var f=new w(u);return this.forEach(function(r){var o=n(r),e=i(r),u=f.get(o);u!==t?u.push(e):f.add(o,[e])}),new tt(f)},i.prototype.toObject=function(n,t){n=r.createLambda(n),t=r.createLambda(t);var i={};return this.forEach(function(r){i[n(r)]=t(r)}),i},i.prototype.toDictionary=function(n,t,i){n=r.createLambda(n),t=r.createLambda(t),i=r.createLambda(i);var u=new w(i);return this.forEach(function(i){u.add(n(i),t(i))}),u},i.prototype.toJSONString=function(n,t){if(typeof JSON===c.Undefined||JSON.stringify==u)throw new Error("toJSONString can't find JSON.stringify. This works native JSON support Browser or include json2.js");return JSON.stringify(this.toArray(),n,t)},i.prototype.toJoinedString=function(n,t){return n==u&&(n=""),t==u&&(t=o.Identity),this.select(t).toArray().join(n)},i.prototype.doAction=function(n){var t=this;return n=r.createLambda(n),new i(function(){var i,u=0;return new e(function(){i=t.getEnumerator()},function(){return i.moveNext()?(n(i.current(),u++),this.yieldReturn(i.current())):f},function(){r.dispose(i)})})},i.prototype.forEach=function(n){n=r.createLambda(n);var i=0,t=this.getEnumerator();try{while(t.moveNext())if(n(t.current(),i++)===f)break}finally{r.dispose(t)}},i.prototype.write=function(n,t){n==u&&(n=""),t=r.createLambda(t);var i=s;this.forEach(function(r){i?i=f:document.write(n),document.write(t(r))})},i.prototype.writeLine=function(n){n=r.createLambda(n),this.forEach(function(t){document.writeln(n(t)+"<br />")})},i.prototype.force=function(){var n=this.getEnumerator();try{while(n.moveNext());}finally{r.dispose(n)}},i.prototype.letBind=function(n){n=r.createLambda(n);var t=this;return new i(function(){var u;return new e(function(){u=i.from(n(t)).getEnumerator()},function(){return u.moveNext()?this.yieldReturn(u.current()):f},function(){r.dispose(u)})})},i.prototype.share=function(){var i=this,n,t=f;return new b(function(){return new e(function(){n==u&&(n=i.getEnumerator())},function(){if(t)throw new Error(d);return n.moveNext()?this.yieldReturn(n.current()):f},o.Blank)},function(){t=s,r.dispose(n)})},i.prototype.memoize=function(){var h=this,t,n,i=f;return new b(function(){var r=-1;return new e(function(){n==u&&(n=h.getEnumerator(),t=[])},function(){if(i)throw new Error(d);return r++,t.length<=r?n.moveNext()?this.yieldReturn(t[r]=n.current()):f:this.yieldReturn(t[r])},o.Blank)},function(){i=s,r.dispose(n),t=u})},i.prototype.catchError=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i;return new e(function(){i=t.getEnumerator()},function(){try{return i.moveNext()?this.yieldReturn(i.current()):f}catch(t){return n(t),f}},function(){r.dispose(i)})})},i.prototype.finallyAction=function(n){n=r.createLambda(n);var t=this;return new i(function(){var i;return new e(function(){i=t.getEnumerator()},function(){return i.moveNext()?this.yieldReturn(i.current()):f},function(){try{r.dispose(i)}finally{n()}})})},i.prototype.log=function(n){return n=r.createLambda(n),this.doAction(function(t){typeof console!==c.Undefined&&console.log(n(t))})},i.prototype.trace=function(n,t){return n==u&&(n="Trace"),t=r.createLambda(t),this.doAction(function(i){typeof console!==c.Undefined&&console.log(n,t(i))})},l=function(n,t,i,u){var f=this;f.source=n,f.keySelector=r.createLambda(t),f.descending=i,f.parent=u},l.prototype=new i,l.prototype.createOrderedEnumerable=function(n,t){return new l(this.source,n,t,this)},l.prototype.thenBy=function(n){return this.createOrderedEnumerable(n,f)},l.prototype.thenByDescending=function(n){return this.createOrderedEnumerable(n,s)},l.prototype.getEnumerator=function(){var r=this,t,n,i=0;return new e(function(){t=[],n=[],r.source.forEach(function(i,r){t.push(i),n.push(r)});var i=p.create(r,u);i.GenerateKeys(t),n.sort(function(n,t){return i.compare(n,t)})},function(){return i<n.length?this.yieldReturn(t[n[i++]]):f},o.Blank)},p=function(n,t,i){var r=this;r.keySelector=n,r.descending=t,r.child=i,r.keys=u},p.create=function(n,t){var i=new p(n.keySelector,n.descending,t);return n.parent!=u?p.create(n.parent,i):i},p.prototype.GenerateKeys=function(n){for(var i=this,f=n.length,e=i.keySelector,r=new Array(f),t=0;t<f;t++)r[t]=e(n[t]);i.keys=r,i.child!=u&&i.child.GenerateKeys(n)},p.prototype.compare=function(n,t){var i=this,f=r.compare(i.keys[n],i.keys[t]);return f==0?i.child!=u?i.child.compare(n,t):r.compare(n,t):i.descending?-f:f},b=function(n,t){this.dispose=t,i.call(this,n)},b.prototype=new i,h=function(n){this.getSource=function(){return n}},h.prototype=new i,h.prototype.any=function(n){return n==u?this.getSource().length>0:i.prototype.any.apply(this,arguments)},h.prototype.count=function(n){return n==u?this.getSource().length:i.prototype.count.apply(this,arguments)},h.prototype.elementAt=function(n){var t=this.getSource();return 0<=n&&n<t.length?t[n]:i.prototype.elementAt.apply(this,arguments)},h.prototype.elementAtOrDefault=function(n,i){i===t&&(i=u);var r=this.getSource();return 0<=n&&n<r.length?r[n]:i},h.prototype.first=function(n){var t=this.getSource();return n==u&&t.length>0?t[0]:i.prototype.first.apply(this,arguments)},h.prototype.firstOrDefault=function(n,r){if(r===t&&(r=u),n!=u)return i.prototype.firstOrDefault.apply(this,arguments);var f=this.getSource();return f.length>0?f[0]:r},h.prototype.last=function(n){var t=this.getSource();return n==u&&t.length>0?t[t.length-1]:i.prototype.last.apply(this,arguments)},h.prototype.lastOrDefault=function(n,r){if(r===t&&(r=u),n!=u)return i.prototype.lastOrDefault.apply(this,arguments);var f=this.getSource();return f.length>0?f[f.length-1]:r},h.prototype.skip=function(n){var t=this.getSource();return new i(function(){var i;return new e(function(){i=n<0?0:n},function(){return i<t.length?this.yieldReturn(t[i++]):f},o.Blank)})},h.prototype.takeExceptLast=function(n){return n==u&&(n=1),this.take(this.getSource().length-n)},h.prototype.takeFromLast=function(n){return this.skip(this.getSource().length-n)},h.prototype.reverse=function(){var n=this.getSource();return new i(function(){var t;return new e(function(){t=n.length},function(){return t>0?this.yieldReturn(n[--t]):f},o.Blank)})},h.prototype.sequenceEqual=function(n,t){return(n instanceof h||n instanceof Array)&&t==u&&i.from(n).count()!=this.count()?f:i.prototype.sequenceEqual.apply(this,arguments)},h.prototype.toJoinedString=function(n,t){var r=this.getSource();return t!=u||!(r instanceof Array)?i.prototype.toJoinedString.apply(this,arguments):(n==u&&(n=""),r.join(n))},h.prototype.getEnumerator=function(){var t=this.getSource(),n=-1;return{current:function(){return t[n]},moveNext:function(){return++n<t.length},dispose:o.Blank}},a=function(n,t){this.prevSource=n,this.prevPredicate=t},a.prototype=new i,a.prototype.where=function(n){if(n=r.createLambda(n),n.length<=1){var u=this.prevPredicate,t=function(t){return u(t)&&n(t)};return new a(this.prevSource,t)}return i.prototype.where.call(this,n)},a.prototype.select=function(n){return n=r.createLambda(n),n.length<=1?new v(this.prevSource,this.prevPredicate,n):i.prototype.select.call(this,n)},a.prototype.getEnumerator=function(){var t=this.prevPredicate,i=this.prevSource,n;return new e(function(){n=i.getEnumerator()},function(){while(n.moveNext())if(t(n.current()))return this.yieldReturn(n.current());return f},function(){r.dispose(n)})},v=function(n,t,i){this.prevSource=n,this.prevPredicate=t,this.prevSelector=i},v.prototype=new i,v.prototype.where=function(n){return n=r.createLambda(n),n.length<=1?new a(this,n):i.prototype.where.call(this,n)},v.prototype.select=function(n){var t=this,f,u;return n=r.createLambda(n),n.length<=1?(f=t.prevSelector,u=function(t){return n(f(t))},new v(t.prevSource,t.prevPredicate,u)):i.prototype.select.call(t,n)},v.prototype.getEnumerator=function(){var t=this.prevPredicate,i=this.prevSelector,o=this.prevSource,n;return new e(function(){n=o.getEnumerator()},function(){while(n.moveNext())if(t==u||t(n.current()))return this.yieldReturn(i(n.current()));return f},function(){r.dispose(n)})};var w=function(){var r=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},n=function(n){return n===u?"null":n===t?"undefined":typeof n.toString===c.Function?n.toString():Object.prototype.toString.call(n)},a=function(n,t){var i=this;i.key=n,i.value=t,i.prev=u,i.next=u},h=function(){this.first=u,this.last=u},l;return h.prototype={addLast:function(n){var t=this;t.last!=u?(t.last.next=n,n.prev=t.last,t.last=n):t.first=t.last=n},replace:function(n,t){n.prev!=u?(n.prev.next=t,t.prev=n.prev):this.first=t,n.next!=u?(n.next.prev=t,t.next=n.next):this.last=t},remove:function(n){n.prev!=u?n.prev.next=n.next:this.first=n.next,n.next!=u?n.next.prev=n.prev:this.last=n.prev}},l=function(n){var t=this;t.countField=0,t.entryList=new h,t.buckets={},t.compareSelector=n==u?o.Identity:n},l.prototype={add:function(t,i){var u=this,h=u.compareSelector(t),s=n(h),o=new a(t,i),f,e;if(r(u.buckets,s)){for(f=u.buckets[s],e=0;e<f.length;e++)if(u.compareSelector(f[e].key)===h){u.entryList.replace(f[e],o),f[e]=o;return}f.push(o)}else u.buckets[s]=[o];u.countField++,u.entryList.addLast(o)},get:function(i){var f=this,h=f.compareSelector(i),s=n(h),e,u,o;if(!r(f.buckets,s))return t;for(e=f.buckets[s],u=0;u<e.length;u++)if(o=e[u],f.compareSelector(o.key)===h)return o.value;return t},set:function(t,i){var o=this,c=o.compareSelector(t),l=n(c),e,u,h;if(r(o.buckets,l))for(e=o.buckets[l],u=0;u<e.length;u++)if(o.compareSelector(e[u].key)===c)return h=new a(t,i),o.entryList.replace(e[u],h),e[u]=h,s;return f},contains:function(t){var u=this,o=u.compareSelector(t),h=n(o),e,i;if(!r(u.buckets,h))return f;for(e=u.buckets[h],i=0;i<e.length;i++)if(u.compareSelector(e[i].key)===o)return s;return f},clear:function(){this.countField=0,this.buckets={},this.entryList=new h},remove:function(t){var i=this,o=i.compareSelector(t),e=n(o),u,f;if(r(i.buckets,e))for(u=i.buckets[e],f=0;f<u.length;f++)if(i.compareSelector(u[f].key)===o){i.entryList.remove(u[f]),u.splice(f,1),u.length==0&&delete i.buckets[e],i.countField--;return}},count:function(){return this.countField},toEnumerable:function(){var n=this;return new i(function(){var t;return new e(function(){t=n.entryList.first},function(){if(t!=u){var n={key:t.key,value:t.value};return t=t.next,this.yieldReturn(n)}return f},o.Blank)})}},l}(),tt=function(n){var t=this;t.count=function(){return n.count()},t.get=function(t){return i.from(n.get(t))},t.contains=function(t){return n.contains(t)},t.toEnumerable=function(){return n.toEnumerable().select(function(n){return new k(n.key,n.value)})}},k=function(n,t){this.key=function(){return n},h.call(this,t)};k.prototype=new h,typeof define===c.Function&&define.amd?define("linqjs",[],function(){return i}):typeof module!==c.Undefined&&module.exports?module.exports=i:n.Enumerable=i})(this)