-
Notifications
You must be signed in to change notification settings - Fork 9
/
glue.min.js
4 lines (4 loc) · 124 KB
/
glue.min.js
1
2
3
4
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.glue=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}else{throw TypeError('Uncaught, unspecified "error" event.')}return false}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];handler.apply(this,args)}}else if(isObject(handler)){len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){var m;if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],2:[function(_dereq_,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],3:[function(_dereq_,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],4:[function(_dereq_,module,exports){(function(global){(function(root){var freeExports=typeof exports=="object"&&exports;var freeModule=typeof module=="object"&&module&&module.exports==freeExports&&module;var freeGlobal=typeof global=="object"&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal){root=freeGlobal}var punycode,maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter="-",regexPunycode=/^xn--/,regexNonASCII=/[^ -~]/,regexSeparators=/\x2E|\u3002|\uFF0E|\uFF61/g,errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,key;function error(type){throw RangeError(errors[type])}function map(array,fn){var length=array.length;while(length--){array[length]=fn(array[length])}return array}function mapDomain(string,fn){return map(string.split(regexSeparators),fn).join(".")}function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=55296&&value<=56319&&counter<length){extra=string.charCodeAt(counter++);if((extra&64512)==56320){output.push(((value&1023)<<10)+(extra&1023)+65536)}else{output.push(value);counter--}}else{output.push(value)}}return output}function ucs2encode(array){return map(array,function(value){var output="";if(value>65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value);return output}).join("")}function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22}if(codePoint-65<26){return codePoint-65}if(codePoint-97<26){return codePoint-97}return base}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5)}function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin)}return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0}for(j=0;j<basic;++j){if(input.charCodeAt(j)>=128){error("not-basic")}output.push(input.charCodeAt(j))}for(index=basic>0?basic+1:0;index<inputLength;){for(oldi=i,w=1,k=base;;k+=base){if(index>=inputLength){error("invalid-input")}digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow")}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digit<t){break}baseMinusT=base-t;if(w>floor(maxInt/baseMinusT)){error("overflow")}w*=baseMinusT}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow")}n+=floor(i/out);i%=out;output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<128){output.push(stringFromCharCode(currentValue))}}handledCPCount=basicLength=output.length;if(basicLength){output.push(delimiter)}while(handledCPCount<inputLength){for(m=maxInt,j=0;j<inputLength;++j){currentValue=input[j];if(currentValue>=n&¤tValue<m){m=currentValue}}handledCPCountPlusOne=handledCPCount+1;if(m-n>floor((maxInt-delta)/handledCPCountPlusOne)){error("overflow")}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<n&&++delta>maxInt){error("overflow")}if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q<t){break}qMinusT=q-t;baseMinusT=base-t;output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0)));q=floor(qMinusT/baseMinusT)}output.push(stringFromCharCode(digitToBasic(q,0)));bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength);delta=0;++handledCPCount}}++delta;++n}return output.join("")}function toUnicode(domain){return mapDomain(domain,function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string})}function toASCII(domain){return mapDomain(domain,function(string){return regexNonASCII.test(string)?"xn--"+encode(string):string})}punycode={version:"1.2.4",ucs2:{decode:ucs2decode,encode:ucs2encode},decode:decode,encode:encode,toASCII:toASCII,toUnicode:toUnicode};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define("punycode",function(){return punycode})}else if(freeExports&&!freeExports.nodeType){if(freeModule){freeModule.exports=punycode}else{for(key in punycode){punycode.hasOwnProperty(key)&&(freeExports[key]=punycode[key])}}}else{root.punycode=punycode}})(this)}).call(this,typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],5:[function(_dereq_,module,exports){"use strict";function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=function(qs,sep,eq,options){sep=sep||"&";eq=eq||"=";var obj={};if(typeof qs!=="string"||qs.length===0){return obj}var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1e3;if(options&&typeof options.maxKeys==="number"){maxKeys=options.maxKeys}var len=qs.length;if(maxKeys>0&&len>maxKeys){len=maxKeys}for(var i=0;i<len;++i){var x=qs[i].replace(regexp,"%20"),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1)}else{kstr=x;vstr=""}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v}else if(isArray(obj[k])){obj[k].push(v)}else{obj[k]=[obj[k],v]}}return obj};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"}},{}],6:[function(_dereq_,module,exports){"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){sep=sep||"&";eq=eq||"=";if(obj===null){obj=undefined}if(typeof obj==="object"){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return map(obj[k],function(v){return ks+encodeURIComponent(stringifyPrimitive(v))}).join(sep)}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]))}}).join(sep)}if(!name)return"";return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj))};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i<xs.length;i++){res.push(f(xs[i],i))}return res}var objectKeys=Object.keys||function(obj){var res=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))res.push(key)}return res}},{}],7:[function(_dereq_,module,exports){"use strict";exports.decode=exports.parse=_dereq_("./decode");exports.encode=exports.stringify=_dereq_("./encode")},{"./decode":5,"./encode":6}],8:[function(_dereq_,module,exports){var punycode=_dereq_("punycode");exports.parse=urlParse;exports.resolve=urlResolve;exports.resolveObject=urlResolveObject;exports.format=urlFormat;exports.Url=Url;function Url(){this.protocol=null;this.slashes=null;this.auth=null;this.host=null;this.port=null;this.hostname=null;this.hash=null;this.search=null;this.query=null;this.pathname=null;this.path=null;this.href=null}var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:true,"javascript:":true},hostlessProtocol={javascript:true,"javascript:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true},querystring=_dereq_("querystring");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url;u.parse(url,parseQueryString,slashesDenoteHost);return u}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url)){throw new TypeError("Parameter 'url' must be a string, not "+typeof url)}var rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();this.protocol=lowerProto;rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var hostEnd=-1;for(var i=0;i<hostEndingChars.length;i++){var hec=rest.indexOf(hostEndingChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}var auth,atSign;if(hostEnd===-1){atSign=rest.lastIndexOf("@")}else{atSign=rest.lastIndexOf("@",hostEnd)}if(atSign!==-1){auth=rest.slice(0,atSign);rest=rest.slice(atSign+1);this.auth=decodeURIComponent(auth)}hostEnd=-1;for(var i=0;i<nonHostChars.length;i++){var hec=rest.indexOf(nonHostChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec}if(hostEnd===-1)hostEnd=rest.length;this.host=rest.slice(0,hostEnd);rest=rest.slice(hostEnd);this.parseHost();this.hostname=this.hostname||"";var ipv6Hostname=this.hostname[0]==="["&&this.hostname[this.hostname.length-1]==="]";if(!ipv6Hostname){var hostparts=this.hostname.split(/\./);for(var i=0,l=hostparts.length;i<l;i++){var part=hostparts[i];if(!part)continue;if(!part.match(hostnamePartPattern)){var newpart="";for(var j=0,k=part.length;j<k;j++){if(part.charCodeAt(j)>127){newpart+="x"}else{newpart+=part[j]}}if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2])}if(notHost.length){rest="/"+notHost.join(".")+rest}this.hostname=validParts.join(".");break}}}}if(this.hostname.length>hostnameMaxLen){this.hostname=""}else{this.hostname=this.hostname.toLowerCase()}if(!ipv6Hostname){var domainArray=this.hostname.split(".");var newOut=[];for(var i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?"xn--"+punycode.encode(s):s)}this.hostname=newOut.join(".")}var p=this.port?":"+this.port:"";var h=this.hostname||"";this.host=h+p;this.href+=this.host;if(ipv6Hostname){this.hostname=this.hostname.substr(1,this.hostname.length-2);if(rest[0]!=="/"){rest="/"+rest}}}if(!unsafeProtocol[lowerProto]){for(var i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i];var esc=encodeURIComponent(ae);if(esc===ae){esc=escape(ae)}rest=rest.split(ae).join(esc)}}var hash=rest.indexOf("#");if(hash!==-1){this.hash=rest.substr(hash);rest=rest.slice(0,hash)}var qm=rest.indexOf("?");if(qm!==-1){this.search=rest.substr(qm);this.query=rest.substr(qm+1);if(parseQueryString){this.query=querystring.parse(this.query)}rest=rest.slice(0,qm)}else if(parseQueryString){this.search="";this.query={}}if(rest)this.pathname=rest;if(slashedProtocol[lowerProto]&&this.hostname&&!this.pathname){this.pathname="/"}if(this.pathname||this.search){var p=this.pathname||"";var s=this.search||"";this.path=p+s}this.href=this.format();return this};function urlFormat(obj){if(isString(obj))obj=urlParse(obj);if(!(obj instanceof Url))return Url.prototype.format.call(obj);return obj.format()}Url.prototype.format=function(){var auth=this.auth||"";if(auth){auth=encodeURIComponent(auth);auth=auth.replace(/%3A/i,":");auth+="@"}var protocol=this.protocol||"",pathname=this.pathname||"",hash=this.hash||"",host=false,query="";if(this.host){host=auth+this.host}else if(this.hostname){host=auth+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]");if(this.port){host+=":"+this.port}}if(this.query&&isObject(this.query)&&Object.keys(this.query).length){query=querystring.stringify(this.query)}var search=this.search||query&&"?"+query||"";if(protocol&&protocol.substr(-1)!==":")protocol+=":";if(this.slashes||(!protocol||slashedProtocol[protocol])&&host!==false){host="//"+(host||"");if(pathname&&pathname.charAt(0)!=="/")pathname="/"+pathname}else if(!host){host=""}if(hash&&hash.charAt(0)!=="#")hash="#"+hash;if(search&&search.charAt(0)!=="?")search="?"+search;pathname=pathname.replace(/[?#]/g,function(match){return encodeURIComponent(match)});search=search.replace("#","%23");return protocol+host+pathname+search+hash};function urlResolve(source,relative){return urlParse(source,false,true).resolve(relative)}Url.prototype.resolve=function(relative){return this.resolveObject(urlParse(relative,false,true)).format()};function urlResolveObject(source,relative){if(!source)return relative;return urlParse(source,false,true).resolveObject(relative)}Url.prototype.resolveObject=function(relative){if(isString(relative)){var rel=new Url;rel.parse(relative,false,true);relative=rel}var result=new Url;Object.keys(this).forEach(function(k){result[k]=this[k]},this);result.hash=relative.hash;if(relative.href===""){result.href=result.format();return result}if(relative.slashes&&!relative.protocol){Object.keys(relative).forEach(function(k){if(k!=="protocol")result[k]=relative[k]});if(slashedProtocol[result.protocol]&&result.hostname&&!result.pathname){result.path=result.pathname="/"}result.href=result.format();return result}if(relative.protocol&&relative.protocol!==result.protocol){if(!slashedProtocol[relative.protocol]){Object.keys(relative).forEach(function(k){result[k]=relative[k]});result.href=result.format();return result}result.protocol=relative.protocol;if(!relative.host&&!hostlessProtocol[relative.protocol]){var relPath=(relative.pathname||"").split("/");while(relPath.length&&!(relative.host=relPath.shift()));if(!relative.host)relative.host="";if(!relative.hostname)relative.hostname="";if(relPath[0]!=="")relPath.unshift("");if(relPath.length<2)relPath.unshift("");result.pathname=relPath.join("/")}else{result.pathname=relative.pathname}result.search=relative.search;result.query=relative.query;result.host=relative.host||"";result.auth=relative.auth;result.hostname=relative.hostname||relative.host;result.port=relative.port;if(result.pathname||result.search){var p=result.pathname||"";var s=result.search||"";result.path=p+s}result.slashes=result.slashes||relative.slashes;result.href=result.format();return result}var isSourceAbs=result.pathname&&result.pathname.charAt(0)==="/",isRelAbs=relative.host||relative.pathname&&relative.pathname.charAt(0)==="/",mustEndAbs=isRelAbs||isSourceAbs||result.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=result.pathname&&result.pathname.split("/")||[],relPath=relative.pathname&&relative.pathname.split("/")||[],psychotic=result.protocol&&!slashedProtocol[result.protocol];if(psychotic){result.hostname="";result.port=null;if(result.host){if(srcPath[0]==="")srcPath[0]=result.host;else srcPath.unshift(result.host)}result.host="";if(relative.protocol){relative.hostname=null;relative.port=null;if(relative.host){if(relPath[0]==="")relPath[0]=relative.host;else relPath.unshift(relative.host)}relative.host=null}mustEndAbs=mustEndAbs&&(relPath[0]===""||srcPath[0]==="")}if(isRelAbs){result.host=relative.host||relative.host===""?relative.host:result.host;result.hostname=relative.hostname||relative.hostname===""?relative.hostname:result.hostname;result.search=relative.search;result.query=relative.query;srcPath=relPath}else if(relPath.length){if(!srcPath)srcPath=[];srcPath.pop();srcPath=srcPath.concat(relPath);result.search=relative.search;result.query=relative.query}else if(!isNullOrUndefined(relative.search)){if(psychotic){result.hostname=result.host=srcPath.shift();var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}result.search=relative.search;result.query=relative.query;if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.href=result.format();return result}if(!srcPath.length){result.pathname=null;if(result.search){result.path="/"+result.search}else{result.path=null}result.href=result.format();return result}var last=srcPath.slice(-1)[0];var hasTrailingSlash=(result.host||relative.host)&&(last==="."||last==="..")||last==="";var up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=="."){srcPath.splice(i,1)}else if(last===".."){srcPath.splice(i,1);up++}else if(up){srcPath.splice(i,1);up--}}if(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift("..")}}if(mustEndAbs&&srcPath[0]!==""&&(!srcPath[0]||srcPath[0].charAt(0)!=="/")){srcPath.unshift("")}if(hasTrailingSlash&&srcPath.join("/").substr(-1)!=="/"){srcPath.push("")}var isAbsolute=srcPath[0]===""||srcPath[0]&&srcPath[0].charAt(0)==="/";if(psychotic){result.hostname=result.host=isAbsolute?"":srcPath.length?srcPath.shift():"";var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}mustEndAbs=mustEndAbs||result.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift("")}if(!srcPath.length){result.pathname=null;result.path=null}else{result.pathname=srcPath.join("/")}if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.auth=relative.auth||result.auth;result.slashes=result.slashes||relative.slashes;result.href=result.format();return result};Url.prototype.parseHost=function(){var host=this.host;var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){this.port=port.substr(1)}host=host.substr(0,host.length-port.length)}if(host)this.hostname=host};function isString(arg){return typeof arg==="string"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isNull(arg){return arg===null}function isNullOrUndefined(arg){return arg==null}},{punycode:4,querystring:7}],9:[function(_dereq_,module,exports){module.exports=function isBuffer(arg){return arg&&typeof arg==="object"&&typeof arg.copy==="function"&&typeof arg.fill==="function"&&typeof arg.readUInt8==="function"}},{}],10:[function(_dereq_,module,exports){(function(process,global){var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i<arguments.length;i++){objects.push(inspect(arguments[i]))}return objects.join(" ")}var i=1;var args=arguments;var len=args.length;var str=String(f).replace(formatRegExp,function(x){if(x==="%%")return"%";if(i>=len)return x;switch(x){case"%s":return String(args[i++]);case"%d":return Number(args[i++]);case"%j":try{return JSON.stringify(args[i++])}catch(_){return"[Circular]"}default:return x}});for(var x=args[i];i<len;x=args[++i]){if(isNull(x)||!isObject(x)){str+=" "+x}else{str+=" "+inspect(x)}}return str};exports.deprecate=function(fn,msg){if(isUndefined(global.process)){return function(){return exports.deprecate(fn,msg).apply(this,arguments)}}if(process.noDeprecation===true){return fn}var warned=false;function deprecated(){if(!warned){if(process.throwDeprecation){throw new Error(msg)}else if(process.traceDeprecation){console.trace(msg)}else{console.error(msg)}warned=true}return fn.apply(this,arguments)}return deprecated};var debugs={};var debugEnviron;exports.debuglog=function(set){if(isUndefined(debugEnviron))debugEnviron=process.env.NODE_DEBUG||"";set=set.toUpperCase();if(!debugs[set]){if(new RegExp("\\b"+set+"\\b","i").test(debugEnviron)){var pid=process.pid;debugs[set]=function(){var msg=exports.format.apply(exports,arguments);console.error("%s %d: %s",set,pid,msg)}}else{debugs[set]=function(){}}}return debugs[set]};function inspect(obj,opts){var ctx={seen:[],stylize:stylizeNoColor};if(arguments.length>=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){ctx.showHidden=opts}else if(opts){exports._extend(ctx,opts)}if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth)}exports.inspect=inspect;inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};inspect.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return"["+inspect.colors[style][0]+"m"+str+"["+inspect.colors[style][1]+"m"}else{return str}}function stylizeNoColor(str,styleType){return str}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true});return hash}function formatValue(ctx,value,recurseTimes){if(ctx.customInspect&&value&&isFunction(value.inspect)&&value.inspect!==exports.inspect&&!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes)}return ret}var primitive=formatPrimitive(ctx,value);if(primitive){return primitive}var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value)}if(isError(value)&&(keys.indexOf("message")>=0||keys.indexOf("description")>=0)){return formatError(value)}if(keys.length===0){if(isFunction(value)){var name=value.name?": "+value.name:"";return ctx.stylize("[Function"+name+"]","special")}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),"date")}if(isError(value)){return formatError(value)}}var base="",array=false,braces=["{","}"];if(isArray(value)){array=true;braces=["[","]"]}if(isFunction(value)){var n=value.name?": "+value.name:"";base=" [Function"+n+"]"}if(isRegExp(value)){base=" "+RegExp.prototype.toString.call(value)}if(isDate(value)){base=" "+Date.prototype.toUTCString.call(value)}if(isError(value)){base=" "+formatError(value)}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1]}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}else{return ctx.stylize("[Object]","special")}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys)}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array)})}ctx.seen.pop();return reduceToSingleString(output,base,braces)}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize("undefined","undefined");if(isString(value)){var simple="'"+JSON.stringify(value).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return ctx.stylize(simple,"string")}if(isNumber(value))return ctx.stylize(""+value,"number");if(isBoolean(value))return ctx.stylize(""+value,"boolean");if(isNull(value))return ctx.stylize("null","null")}function formatError(value){return"["+Error.prototype.toString.call(value)+"]"}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i<l;++i){if(hasOwnProperty(value,String(i))){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,String(i),true))}else{output.push("")}}keys.forEach(function(key){if(!key.match(/^\d+$/)){output.push(formatProperty(ctx,value,recurseTimes,visibleKeys,key,true))}});return output}function formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){var name,str,desc;desc=Object.getOwnPropertyDescriptor(value,key)||{value:value[key]};if(desc.get){if(desc.set){str=ctx.stylize("[Getter/Setter]","special")}else{str=ctx.stylize("[Getter]","special")}}else{if(desc.set){str=ctx.stylize("[Setter]","special")}}if(!hasOwnProperty(visibleKeys,key)){name="["+key+"]"}if(!str){if(ctx.seen.indexOf(desc.value)<0){if(isNull(recurseTimes)){str=formatValue(ctx,desc.value,null)}else{str=formatValue(ctx,desc.value,recurseTimes-1)}if(str.indexOf("\n")>-1){if(array){str=str.split("\n").map(function(line){return" "+line}).join("\n").substr(2)}else{str="\n"+str.split("\n").map(function(line){return" "+line}).join("\n")}}}else{str=ctx.stylize("[Circular]","special")}}if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str}name=JSON.stringify(""+key);
if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,"name")}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,"string")}}return name+": "+str}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf("\n")>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,"").length+1},0);if(length>60){return braces[0]+(base===""?"":base+"\n ")+" "+output.join(",\n ")+" "+braces[1]}return braces[0]+base+" "+output.join(", ")+" "+braces[1]}function isArray(ar){return Array.isArray(ar)}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==="[object Error]"||e instanceof Error)}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=_dereq_("./support/isBuffer");function objectToString(o){return Object.prototype.toString.call(o)}function pad(n){return n<10?"0"+n.toString(10):n.toString(10)}var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function timestamp(){var d=new Date;var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(":");return[d.getDate(),months[d.getMonth()],time].join(" ")}exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))};exports.inherits=_dereq_("inherits");exports._extend=function(origin,add){if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]]}return origin};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}}).call(this,_dereq_("zLFzcF"),typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./support/isBuffer":9,inherits:2,zLFzcF:3}],11:[function(_dereq_,module,exports){"use strict";var eve=_dereq_("eve");var rePrefixed=/^glue\./;["on","once","off"].forEach(function(method){exports[method]=function(name,handler){if(!rePrefixed.test(name)){name="glue."+name}eve[method](name,handler)}})},{eve:20}],12:[function(_dereq_,module,exports){"use strict";var async=_dereq_("async");var url=_dereq_("url");var eve=_dereq_("eve");var qsa=_dereq_("fdom/qsa");var on=_dereq_("fdom/on");var extend=_dereq_("cog/extend");var defaults=_dereq_("cog/defaults");var logger=_dereq_("cog/logger");var debug=logger("glue");var signaller=_dereq_("rtc-signaller");var loadPrimus=_dereq_("rtc-signaller/primus-loader");var media=_dereq_("rtc-media");var captureConfig=_dereq_("rtc-captureconfig");var transform=_dereq_("sdp-transform");var resetEl=_dereq_("rtc-core/reset");var reSep=/[\s\,]\s*/;var reTrailingSlash=/\/$/;var reSemiColonDelim=/\;\s*/;var canGetSources=typeof MediaStreamTrack!="undefined"&&MediaStreamTrack.getSources;var config=defaults({},_dereq_("fdom/meta")(/^rtc-(.*)$/),{room:location.hash.slice(1),signalhost:location.origin||"http://rtc.io/switchboard/"});var SessionManager=_dereq_("./sessionmanager");var sessionMgr;var sources;var SELECTOR_DC='meta[name="rtc-data"],meta[name="rtc-channel"]';var glue=module.exports=function(scope,opts){var startupOps=[initSignaller];var debugTarget;var channels=qsa(SELECTOR_DC).map(readChannelConfig);var peers=qsa("*[rtc-peer]",scope).map(initPeer);extend(config,{channels:channels},opts);debugTarget=(config||{}).debug;if(debugTarget){if(debugTarget===true){logger.enable("*")}else if(Array.isArray(debugTarget)){logger.enable.apply(logger,debugTarget)}else{logger.enable(debugTarget)}}async.parallel(startupOps,function(err){var captureTags=qsa("*[rtc-capture]",scope);debug("startup ops completed, starting glue",config);eve("glue.ready");if(!config.room){config.room=generateRoomName()}sessionMgr=typeof Primus!="undefined"&&new SessionManager(config);if(sessionMgr){sessionMgr.streamCount=captureTags.length;sessionMgr.once("active",function(){captureTags.forEach(initCapture);sessionMgr.announce();eve("glue.connected",null,sessionMgr.signaller,sessionMgr)})}else{captureTags.forEach(initCapture)}})};glue.events=_dereq_("./events");glue.config=config;if(typeof window!="undefined"){on("load",window,function(){if(config.autoload===undefined||config.autoload){glue()}})}function readChannelConfig(el){var content=(el||{}).content||"";var params=content.split(reSemiColonDelim);return{name:params[0]}}function initPeer(el){var propValue=el.getAttribute("rtc-peer");var targetStream=el.getAttribute("rtc-stream");var peerRoles=propValue?propValue.split(reSep):["*"];var data=el._rtc||(el._rtc={});function attachStream(stream){debug("attaching stream");media(stream).render(el);data.streamId=stream.id}function addStream(stream,peer){if(data.streamId){return}if(targetStream){debug("requesting stream data");sessionMgr.getStreamData(stream,function(data){debug("got stream data",data);if(data&&data.name===targetStream){attachStream(stream)}})}else{attachStream(stream)}}peerRoles.forEach(function(role){eve.on("glue.peer.active."+role,function(peer,peerId){if(data.peerId){return}debug("peer active",peer.getRemoteStreams());data.peerId=peerId;[].slice.call(peer.getRemoteStreams()).forEach(addStream)})});eve.on("glue.peer.leave",function(peer,peerId){if(data.peerId===peerId){resetEl(el);data=el._rtc={}}});return el}function initCapture(el){var configText=el.getAttribute("rtc-capture")||"";var res=el.getAttribute("rtc-resolution")||el.getAttribute("rtc-res");var fps=el.getAttribute("rtc-fps");if(res){configText+=" min:"+res+" max:"+res}if(fps){configText+=" minfps:"+fps+" maxfps:"+fps}el.capture=enableCapture(el,captureConfig(configText));el.capture(function(stream){if(sessionMgr){sessionMgr.broadcast(stream,{name:el.id})}})}function enableCapture(el,config){function cap(callback){var stream=media({constraints:config.toConstraints({sources:sources})});stream.render(el);stream.on("error",function(err){console.log("Error attempting to capture media, requested constraints",stream.constraints)});stream.on("capture",function(stream){el.dispatchEvent(new CustomEvent("capture",{detail:{stream:stream}}));if(typeof callback=="function"){callback(stream)}})}return function(callback){if(sources||!canGetSources){return cap(callback)}MediaStreamTrack.getSources(function(s){sources=s;cap(callback)})}}function generateRoomName(){location.hash=Math.pow(2,53)*Math.random();return location.hash.slice(1)}function initSignaller(callback){return loadPrimus(config.signalhost,callback)}},{"./events":11,"./sessionmanager":50,async:13,"cog/defaults":14,"cog/extend":15,"cog/logger":18,eve:20,"fdom/meta":21,"fdom/on":22,"fdom/qsa":23,"rtc-captureconfig":24,"rtc-core/reset":28,"rtc-media":29,"rtc-signaller":30,"rtc-signaller/primus-loader":36,"sdp-transform":46,url:8}],13:[function(_dereq_,module,exports){(function(process){(function(){var async={};var root,previous_async;root=this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){var called=false;return function(){if(called)throw new Error("Callback was already called.");called=true;fn.apply(root,arguments)}}var _toString=Object.prototype.toString;var _isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var _each=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_each(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_each(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){if(typeof setImmediate==="function"){async.nextTick=function(fn){setImmediate(fn)};async.setImmediate=async.nextTick}else{async.nextTick=function(fn){setTimeout(fn,0)};async.setImmediate=async.nextTick}}else{async.nextTick=process.nextTick;if(typeof setImmediate!=="undefined"){async.setImmediate=function(fn){setImmediate(fn)}}else{async.setImmediate=async.nextTick}}async.each=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_each(arr,function(x){iterator(x,only_once(done))});function done(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}}}};async.forEach=async.each;async.eachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}else{iterate()}}})};iterate()};async.forEachSeries=async.eachSeries;async.eachLimit=function(arr,limit,iterator,callback){var fn=_eachLimit(limit);fn.apply(null,[arr,iterator,callback])};async.forEachLimit=async.eachLimit;var _eachLimit=function(limit){return function(arr,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed>=arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed>=arr.length){callback()}else{replenish()}}})}})()}};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.each].concat(args))}};var doParallelLimit=function(limit,fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[_eachLimit(limit)].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.eachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){arr=_map(arr,function(x,i){return{index:i,value:x}});if(!callback){eachfn(arr,function(x,callback){iterator(x.value,function(err){callback(err)})})}else{var results=[];eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})}};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=function(arr,limit,iterator,callback){return _mapLimit(limit)(arr,iterator,callback)};var _mapLimit=function(limit){return doParallelLimit(limit,_asyncMap)};async.reduce=function(arr,memo,iterator,callback){async.eachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback()}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){remainingTasks--;_each(listeners.slice(0),function(fn){fn()})};addListener(function(){if(!remainingTasks){var theCallback=callback;callback=function(){};theCallback(null,results)}});_each(keys,function(k){var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}if(err){var safeResults={};_each(_keys(results),function(rkey){safeResults[rkey]=results[rkey]});safeResults[k]=args;callback(err,safeResults);callback=function(){}}else{results[k]=args;async.setImmediate(taskComplete)}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.retry=function(times,task,callback){var DEFAULT_TIMES=5;var attempts=[];if(typeof times==="function"){callback=task;task=times;times=DEFAULT_TIMES}times=parseInt(times,10)||DEFAULT_TIMES;var wrappedTask=function(wrappedCallback,wrappedResults){var retryAttempt=function(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}};while(times){attempts.push(retryAttempt(task,!(times-=1)))}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||callback)(data.err,data.result)})};return callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback.apply(null,arguments);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.setImmediate(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};var _parallel=function(eachfn,tasks,callback){callback=callback||function(){};if(_isArray(tasks)){eachfn.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};eachfn.each(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.parallel=function(tasks,callback){_parallel({map:async.map,each:async.each},tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel({map:_mapLimit(limit),each:_eachLimit(limit)},tasks,callback)};async.series=function(tasks,callback){callback=callback||function(){};if(_isArray(tasks)){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.eachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){iterator(function(err){if(err){return callback(err)}async.whilst(test,iterator,callback)})}else{callback()}};async.doWhilst=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(test.apply(null,args)){async.doWhilst(iterator,test,callback)}else{callback()}})};async.until=function(test,iterator,callback){if(!test()){iterator(function(err){if(err){return callback(err)}async.until(test,iterator,callback)})}else{callback()}};async.doUntil=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(!test.apply(null,args)){async.doUntil(iterator,test,callback)}else{callback()}})};async.queue=function(worker,concurrency){if(concurrency===undefined){concurrency=1}function _insert(q,data,pos,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,callback:typeof callback==="function"?callback:null};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,started:false,paused:false,push:function(data,callback){_insert(q,data,false,callback)},kill:function(){q.drain=null;q.tasks=[]},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){if(!q.paused&&workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length===0){q.empty()}workers+=1;var next=function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers===0){q.drain()}q.process()};var cb=only_once(next);worker(task.data,cb)}},length:function(){return q.tasks.length},running:function(){return workers},idle:function(){return q.tasks.length+workers===0},pause:function(){if(q.paused===true){return}q.paused=true;q.process()},resume:function(){if(q.paused===false){return}q.paused=false;q.process()}};return q};async.priorityQueue=function(worker,concurrency){function _compareTasks(a,b){return a.priority-b.priority}function _binarySearch(sequence,item,compare){var beg=-1,end=sequence.length-1;while(beg<end){var mid=beg+(end-beg+1>>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:null};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,priority,callback)};delete q.unshift;return q};async.cargo=function(worker,payload){var working=false,tasks=[];var cargo={tasks:tasks,payload:payload,saturated:null,empty:null,drain:null,drained:true,push:function(data,callback){if(!_isArray(data)){data=[data]}_each(data,function(task){tasks.push({data:task,callback:typeof callback==="function"?callback:null});cargo.drained=false;if(cargo.saturated&&tasks.length===payload){cargo.saturated()}});async.setImmediate(cargo.process)},process:function process(){if(working)return;if(tasks.length===0){if(cargo.drain&&!cargo.drained)cargo.drain();cargo.drained=true;return}var ts=typeof payload==="number"?tasks.splice(0,payload):tasks.splice(0,tasks.length);var ds=_map(ts,function(task){return task.data});if(cargo.empty)cargo.empty();working=true;worker(ds,function(){working=false;var args=arguments;_each(ts,function(data){if(data.callback){data.callback.apply(null,args)}});process()})},length:function(){return tasks.length},running:function(){return working}};return cargo};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_each(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){async.nextTick(function(){callback.apply(null,memo[key])})}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.memo=memo;memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}};async.times=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.map(counter,iterator,callback)};async.timesSeries=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.mapSeries(counter,iterator,callback)};async.seq=function(){var fns=arguments;return function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();async.reduce(fns,args,function(newargs,fn,cb){fn.apply(that,newargs.concat([function(){var err=arguments[0];var nextargs=Array.prototype.slice.call(arguments,1);cb(err,nextargs)}]))},function(err,results){callback.apply(that,[err].concat(results))})}};async.compose=function(){return async.seq.apply(null,Array.prototype.reverse.call(arguments))};var _applyEach=function(eachfn,fns){var go=function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();return eachfn(fns,function(fn,cb){fn.apply(that,args.concat([cb]))},callback)};if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);return go.apply(this,args)}else{return go}};async.applyEach=doParallel(_applyEach);async.applyEachSeries=doSeries(_applyEach);async.forever=function(fn,callback){function next(err){if(err){if(callback){return callback(err)}throw err}fn(next)}next()};if(typeof module!=="undefined"&&module.exports){module.exports=async}else if(typeof define!=="undefined"&&define.amd){define([],function(){return async})}else{root.async=async}})()}).call(this,_dereq_("zLFzcF"))},{zLFzcF:3}],14:[function(_dereq_,module,exports){"use strict";module.exports=function(target){target=target||{};[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){if(target[prop]===void 0){target[prop]=source[prop]}}});return target}},{}],15:[function(_dereq_,module,exports){"use strict";module.exports=function(target){[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){target[prop]=source[prop]}});return target}},{}],16:[function(_dereq_,module,exports){module.exports=function(target){function get(key){return target[key]}function set(key,value){target[key]=value}function remove(key){return delete target[key]}function keys(){return Object.keys(target)}function values(){return Object.keys(target).map(function(key){return target[key]})}if(typeof target!="object"){return target}return{get:get,set:set,remove:remove,"delete":remove,keys:keys,values:values}}},{}],17:[function(_dereq_,module,exports){"use strict";module.exports=function(input){var isString=typeof input=="string"||input instanceof String;var reNumeric=/^\-?\d+\.?\d*$/;var shouldParse;var firstChar;var lastChar;if(!isString||input.length<2){if(isString&&reNumeric.test(input)){return parseFloat(input)}return input}if(input==="true"||input==="false"){return input==="true"}if(input==="null"){return null}firstChar=input.charAt(0);lastChar=input.charAt(input.length-1);shouldParse=firstChar=="{"&&lastChar=="}"||firstChar=="["&&lastChar=="]"||firstChar=='"'&&lastChar=='"';if(shouldParse){try{return JSON.parse(input)}catch(e){}}return reNumeric.test(input)?parseFloat(input):input}},{}],18:[function(_dereq_,module,exports){"use strict";var active=[];var unleashListeners=[];var targets=[console];var logger=module.exports=function(name){var enabled=checkActive();function checkActive(){return enabled=active.indexOf("*")>=0||active.indexOf(name)>=0}unleashListeners[unleashListeners.length]=checkActive;return function(){var args=[].slice.call(arguments);if(typeof args[0]=="string"||args[0]instanceof String){args[0]=name+": "+args[0]}if(!enabled){return}targets.forEach(function(target){target.log.apply(target,args)})}};logger.reset=function(){targets=[];active=[];return logger.enable()};logger.to=function(target){targets=targets.concat(target||[]);return logger};logger.enable=function(){active=active.concat([].slice.call(arguments));unleashListeners.forEach(function(listener){listener()});return logger}},{}],19:[function(_dereq_,module,exports){"use strict";module.exports=function(fn,delay,opts){var lastExec=(opts||{}).leading!==false?0:Date.now();var trailing=(opts||{}).trailing;var timer;var queuedArgs;var queuedScope;trailing=trailing||trailing===undefined;function invokeDefered(){fn.apply(queuedScope,queuedArgs||[]);lastExec=Date.now()}return function(){var tick=Date.now();var elapsed=tick-lastExec;clearTimeout(timer);if(elapsed<delay){queuedArgs=[].slice.call(arguments,0);queuedScope=this;return trailing&&(timer=setTimeout(invokeDefered,delay-elapsed))}lastExec=tick;fn.apply(this,arguments)}}},{}],20:[function(_dereq_,module,exports){(function(glob){var version="0.4.2",has="hasOwnProperty",separator=/[\.\/]/,comaseparator=/\s*,\s*/,wildcard="*",fun=function(){},numsort=function(a,b){return a-b},current_event,stop,events={n:{}},firstDefined=function(){for(var i=0,ii=this.length;i<ii;i++){if(typeof this[i]!="undefined"){return this[i]}}},lastDefined=function(){var i=this.length;while(--i){if(typeof this[i]!="undefined"){return this[i]}}},eve=function(name,scope){name=String(name);var e=events,oldstop=stop,args=Array.prototype.slice.call(arguments,2),listeners=eve.listeners(name),z=0,f=false,l,indexed=[],queue={},out=[],ce=current_event,errors=[];out.firstDefined=firstDefined;out.lastDefined=lastDefined;current_event=name;stop=0;for(var i=0,ii=listeners.length;i<ii;i++)if("zIndex"in listeners[i]){indexed.push(listeners[i].zIndex);if(listeners[i].zIndex<0){queue[listeners[i].zIndex]=listeners[i]}}indexed.sort(numsort);while(indexed[z]<0){l=queue[indexed[z++]];out.push(l.apply(scope,args));if(stop){stop=oldstop;return out}}for(i=0;i<ii;i++){l=listeners[i];if("zIndex"in l){if(l.zIndex==indexed[z]){out.push(l.apply(scope,args));if(stop){break}do{z++;l=queue[indexed[z]];l&&out.push(l.apply(scope,args));if(stop){break}}while(l)}else{queue[l.zIndex]=l}}else{out.push(l.apply(scope,args));if(stop){break}}}stop=oldstop;current_event=ce;return out};eve._events=events;eve.listeners=function(name){var names=name.split(separator),e=events,item,items,k,i,ii,j,jj,nes,es=[e],out=[];for(i=0,ii=names.length;i<ii;i++){nes=[];for(j=0,jj=es.length;j<jj;j++){e=es[j].n;items=[e[names[i]],e[wildcard]];k=2;while(k--){item=items[k];if(item){nes.push(item);out=out.concat(item.f||[])}}}es=nes}return out};eve.on=function(name,f){name=String(name);if(typeof f!="function"){return function(){}}var names=name.split(comaseparator);for(var i=0,ii=names.length;i<ii;i++){(function(name){var names=name.split(separator),e=events,exist;for(var i=0,ii=names.length;i<ii;i++){e=e.n;e=e.hasOwnProperty(names[i])&&e[names[i]]||(e[names[i]]={n:{}})}e.f=e.f||[];for(i=0,ii=e.f.length;i<ii;i++)if(e.f[i]==f){exist=true;break}!exist&&e.f.push(f)})(names[i])}return function(zIndex){if(+zIndex==+zIndex){f.zIndex=+zIndex}}};eve.f=function(event){var attrs=[].slice.call(arguments,1);return function(){eve.apply(null,[event,null].concat(attrs).concat([].slice.call(arguments,0)))}};eve.stop=function(){stop=1};eve.nt=function(subname){if(subname){return new RegExp("(?:\\.|\\/|^)"+subname+"(?:\\.|\\/|$)").test(current_event)}return current_event};eve.nts=function(){return current_event.split(separator)};eve.off=eve.unbind=function(name,f){if(!name){eve._events=events={n:{}};return}var names=name.split(comaseparator);if(names.length>1){for(var i=0,ii=names.length;i<ii;i++){eve.off(names[i],f)}return}names=name.split(separator);var e,key,splice,i,ii,j,jj,cur=[events];for(i=0,ii=names.length;i<ii;i++){for(j=0;j<cur.length;j+=splice.length-2){splice=[j,1];e=cur[j].n;if(names[i]!=wildcard){if(e[names[i]]){splice.push(e[names[i]])}}else{for(key in e)if(e[has](key)){splice.push(e[key])}}cur.splice.apply(cur,splice)}}for(i=0,ii=cur.length;i<ii;i++){e=cur[i];while(e.n){if(f){if(e.f){for(j=0,jj=e.f.length;j<jj;j++)if(e.f[j]==f){e.f.splice(j,1);break}!e.f.length&&delete e.f}for(key in e.n)if(e.n[has](key)&&e.n[key].f){var funcs=e.n[key].f;for(j=0,jj=funcs.length;j<jj;j++)if(funcs[j]==f){funcs.splice(j,1);break}!funcs.length&&delete e.n[key].f}}else{delete e.f;for(key in e.n)if(e.n[has](key)&&e.n[key].f){delete e.n[key].f
}}e=e.n}}};eve.once=function(name,f){var f2=function(){eve.unbind(name,f2);return f.apply(this,arguments)};return eve.on(name,f2)};eve.version=version;eve.toString=function(){return"You are running Eve "+version};typeof module!="undefined"&&module.exports?module.exports=eve:typeof define==="function"&&define.amd?define("eve",[],function(){return eve}):glob.eve=eve})(this)},{}],21:[function(_dereq_,module,exports){"use strict";var qsa=_dereq_("./qsa");var reBool=/^(true|false)$/i;module.exports=function(regex){var data={};qsa("meta[name]").forEach(function(tag){var name=tag.getAttribute("name");var match=regex?regex.exec(name):[name,name];if(match){data[match[1]||match[0]]=coerce(tag.getAttribute("content")||"")}});return data};function coerce(value){var numericVal=parseFloat(value);if(!isNaN(numericVal)){value=numericVal}if(reBool.test(value)){value=value=="true"}return value}},{"./qsa":23}],22:[function(_dereq_,module,exports){"use strict";module.exports=function(name,el,callback){function bind(t,trigger){var buffered=[];function handleEvent(evt){if(typeof trigger=="function"){return trigger(null,evt)}buffered[buffered.length]=evt}t.addEventListener(name,handleEvent);return typeof trigger=="function"?handleEvent:function(cb){trigger=cb;if(buffered.length>0){buffered.splice(0).forEach(function(evt){cb(null,evt)})}}}return el?bind(el,callback):bind}},{}],23:[function(_dereq_,module,exports){"use strict";var classSelectorRE=/^\.([\w\-]+)$/;var idSelectorRE=/^#([\w\-]+)$/;var tagSelectorRE=/^[\w\-]+$/;module.exports=function(selector,scope){var idSearch;scope=scope||document;idSearch=scope===document&&idSelectorRE.test(selector);return idSearch?[scope.getElementById(RegExp.$1)]:Array.prototype.slice.call(classSelectorRE.test(selector)?scope.getElementsByClassName(RegExp.$1):tagSelectorRE.test(selector)?scope.getElementsByTagName(selector):scope.querySelectorAll(selector))}},{}],24:[function(_dereq_,module,exports){"use strict";var reSeparator=/[\,\s]\s*/;var offFlags=["false","none","off"];module.exports=function(input){var config=new CaptureConfig;(input||"").split(reSeparator).forEach(function(directive){var parts=directive.split(":");var method=config[(parts[0]||"").toLowerCase()];if(typeof method=="function"){method.apply(config,parts.slice(1))}});return config};function CaptureConfig(){if(!(this instanceof CaptureConfig)){return new CaptureConfig}this.cfg={microphone:true}}var prot=CaptureConfig.prototype;prot.camera=function(index){this.cfg.camera=trueOrValue(index)};prot.microphone=function(index){this.cfg.microphone=trueOrValue(index)};prot.screen=function(){delete this.cfg.microphone;this.cfg.screen=true};prot.max=function(data){var res;if(data.slice(-3).toLowerCase()=="fps"){return this.maxfps(data)}res=this._parseRes(data);this.cfg.res=this.cfg.res||{};this.cfg.res.max=res};prot.maxfps=function(data){this.cfg.fps=this.cfg.fps||{};this.cfg.fps.max=parseFloat(data.slice(0,-3))};prot.min=function(data){var res;if(data.slice(-3).toLowerCase()=="fps"){return this.minfps(data)}res=this._parseRes(data);this.cfg.res=this.cfg.res||{};this.cfg.res.min=res};prot.minfps=function(data){this.cfg.fps=this.cfg.fps||{};this.cfg.fps.min=parseFloat(data.slice(0,-3))};prot.hd=prot["720p"]=function(){this.cfg.camera=true;this.min("1280x720")};prot.fullhd=prot["1080p"]=function(){this.cfg.camera=true;this.min("1920x1080")};prot.toConstraints=function(opts){var cfg=this.cfg;var constraints={audio:cfg.microphone===true||typeof cfg.microphone=="number"&&cfg.microphone>=0,video:cfg.camera===true||cfg.screen||typeof cfg.camera=="number"&&cfg.camera>=0};var m={video:{},audio:{}};var o={video:[],audio:[]};var sources=(opts||{}).sources||[];var cameras=sources.filter(function(info){return info&&info.kind==="video"});var microphones=sources.filter(function(info){return info&&info.kind==="audio"});var selectedSource;function complexConstraints(target){if(constraints[target]&&typeof constraints[target]!="object"){constraints[target]={mandatory:m[target],optional:o[target]}}}if(cfg.fps){complexConstraints("video");cfg.fps.min&&(m.video.minFrameRate=cfg.fps.min);cfg.fps.max&&(m.video.maxFrameRate=cfg.fps.max)}if(cfg.res&&cfg.res.min){complexConstraints("video");m.video.minWidth=cfg.res.min.w;m.video.minHeight=cfg.res.min.h}if(cfg.res&&cfg.res.max){complexConstraints("video");m.video.maxWidth=cfg.res.max.w;m.video.maxHeight=cfg.res.max.h}if(typeof cfg.camera=="number"&&cameras.length){selectedSource=cameras[cfg.camera];if(selectedSource){complexConstraints("video");o.video.push({sourceId:selectedSource.id})}}if(typeof cfg.microphone=="number"&µphones.length){selectedSource=microphones[cfg.microphone];if(selectedSource){complexConstraints("audio");o.audio.push({sourceId:selectedSource.id})}}if(typeof cfg.screen!="undefined"){complexConstraints("video");m.video.chromeMediaSource="screen"}return constraints};prot._parseRes=function(data){var parts=data.split("x");if(parts.length<2){throw new Error("Invalid resolution specification: "+data)}return{w:parseInt(parts[0],10),h:parseInt(parts[1],10)}};function trueOrValue(val){if(typeof val=="string"&&offFlags.indexOf(val.toLowerCase())>=0){return false}return val===undefined||val===""||parseInt(val||0,10)}},{}],25:[function(_dereq_,module,exports){(function(process){"use strict";var semver=_dereq_("semver");var browsers={chrome:[/Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],firefox:[/Firefox\/([0-9\.]+)(?:\s|$)/],opera:[/Opera\/([0-9\.]+)(?:\s|$)/],ie:[/Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/]};var detect=module.exports=function(target,prefixes){var prefixIdx;var prefix;var testName;var hostObject=this||(typeof window!="undefined"?window:undefined);if(!hostObject){return}prefixes=(prefixes||["ms","o","moz","webkit"]).concat("");for(prefixIdx=prefixes.length;prefixIdx--;){prefix=prefixes[prefixIdx];testName=prefix+(prefix?target.charAt(0).toUpperCase()+target.slice(1):target);if(typeof hostObject[testName]!="undefined"){detect.browser=detect.browser||prefix.toLowerCase();return hostObject[target]=hostObject[testName]}}};detect.moz=typeof navigator!="undefined"&&!!navigator.mozGetUserMedia;if(typeof navigator!="undefined"){Object.keys(browsers).forEach(function(key){var match=browsers[key].map(function(regex){return regex.exec(navigator.userAgent)}).filter(Boolean)[0];if(match){detect.browser=key;detect.browserVersion=detect.version=parseVersion(match[1])}});detect.browser=detect.browser||"unknown"}else{detect.browser="node";detect.browserVersion=detect.version=parseVersion(process.version.substr(1))}function parseVersion(version){var versionParts=version.split(".").slice(0,3);while(versionParts.length<3){versionParts.push("0")}return semver.clean(versionParts.join("."))||version}}).call(this,_dereq_("zLFzcF"))},{semver:26,zLFzcF:3}],26:[function(_dereq_,module,exports){(function(exports){if(typeof module==="object"&&module.exports===exports)exports=module.exports=SemVer;exports.SEMVER_SPEC_VERSION="2.0.0";var re=exports.re=[];var src=exports.src=[];var R=0;var NUMERICIDENTIFIER=R++;src[NUMERICIDENTIFIER]="0|[1-9]\\d*";var NUMERICIDENTIFIERLOOSE=R++;src[NUMERICIDENTIFIERLOOSE]="[0-9]+";var NONNUMERICIDENTIFIER=R++;src[NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var MAINVERSION=R++;src[MAINVERSION]="("+src[NUMERICIDENTIFIER]+")\\."+"("+src[NUMERICIDENTIFIER]+")\\."+"("+src[NUMERICIDENTIFIER]+")";var MAINVERSIONLOOSE=R++;src[MAINVERSIONLOOSE]="("+src[NUMERICIDENTIFIERLOOSE]+")\\."+"("+src[NUMERICIDENTIFIERLOOSE]+")\\."+"("+src[NUMERICIDENTIFIERLOOSE]+")";var PRERELEASEIDENTIFIER=R++;src[PRERELEASEIDENTIFIER]="(?:"+src[NUMERICIDENTIFIER]+"|"+src[NONNUMERICIDENTIFIER]+")";var PRERELEASEIDENTIFIERLOOSE=R++;src[PRERELEASEIDENTIFIERLOOSE]="(?:"+src[NUMERICIDENTIFIERLOOSE]+"|"+src[NONNUMERICIDENTIFIER]+")";var PRERELEASE=R++;src[PRERELEASE]="(?:-("+src[PRERELEASEIDENTIFIER]+"(?:\\."+src[PRERELEASEIDENTIFIER]+")*))";var PRERELEASELOOSE=R++;src[PRERELEASELOOSE]="(?:-?("+src[PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+src[PRERELEASEIDENTIFIERLOOSE]+")*))";var BUILDIDENTIFIER=R++;src[BUILDIDENTIFIER]="[0-9A-Za-z-]+";var BUILD=R++;src[BUILD]="(?:\\+("+src[BUILDIDENTIFIER]+"(?:\\."+src[BUILDIDENTIFIER]+")*))";var FULL=R++;var FULLPLAIN="v?"+src[MAINVERSION]+src[PRERELEASE]+"?"+src[BUILD]+"?";src[FULL]="^"+FULLPLAIN+"$";var LOOSEPLAIN="[v=\\s]*"+src[MAINVERSIONLOOSE]+src[PRERELEASELOOSE]+"?"+src[BUILD]+"?";var LOOSE=R++;src[LOOSE]="^"+LOOSEPLAIN+"$";var GTLT=R++;src[GTLT]="((?:<|>)?=?)";var XRANGEIDENTIFIERLOOSE=R++;src[XRANGEIDENTIFIERLOOSE]=src[NUMERICIDENTIFIERLOOSE]+"|x|X|\\*";var XRANGEIDENTIFIER=R++;src[XRANGEIDENTIFIER]=src[NUMERICIDENTIFIER]+"|x|X|\\*";var XRANGEPLAIN=R++;src[XRANGEPLAIN]="[v=\\s]*("+src[XRANGEIDENTIFIER]+")"+"(?:\\.("+src[XRANGEIDENTIFIER]+")"+"(?:\\.("+src[XRANGEIDENTIFIER]+")"+"(?:("+src[PRERELEASE]+")"+")?)?)?";var XRANGEPLAINLOOSE=R++;src[XRANGEPLAINLOOSE]="[v=\\s]*("+src[XRANGEIDENTIFIERLOOSE]+")"+"(?:\\.("+src[XRANGEIDENTIFIERLOOSE]+")"+"(?:\\.("+src[XRANGEIDENTIFIERLOOSE]+")"+"(?:("+src[PRERELEASELOOSE]+")"+")?)?)?";var XRANGE=R++;src[XRANGE]="^"+src[GTLT]+"\\s*"+src[XRANGEPLAIN]+"$";var XRANGELOOSE=R++;src[XRANGELOOSE]="^"+src[GTLT]+"\\s*"+src[XRANGEPLAINLOOSE]+"$";var LONETILDE=R++;src[LONETILDE]="(?:~>?)";var TILDETRIM=R++;src[TILDETRIM]="(\\s*)"+src[LONETILDE]+"\\s+";re[TILDETRIM]=new RegExp(src[TILDETRIM],"g");var tildeTrimReplace="$1~";var TILDE=R++;src[TILDE]="^"+src[LONETILDE]+src[XRANGEPLAIN]+"$";var TILDELOOSE=R++;src[TILDELOOSE]="^"+src[LONETILDE]+src[XRANGEPLAINLOOSE]+"$";var LONECARET=R++;src[LONECARET]="(?:\\^)";var CARETTRIM=R++;src[CARETTRIM]="(\\s*)"+src[LONECARET]+"\\s+";re[CARETTRIM]=new RegExp(src[CARETTRIM],"g");var caretTrimReplace="$1^";var CARET=R++;src[CARET]="^"+src[LONECARET]+src[XRANGEPLAIN]+"$";var CARETLOOSE=R++;src[CARETLOOSE]="^"+src[LONECARET]+src[XRANGEPLAINLOOSE]+"$";var COMPARATORLOOSE=R++;src[COMPARATORLOOSE]="^"+src[GTLT]+"\\s*("+LOOSEPLAIN+")$|^$";var COMPARATOR=R++;src[COMPARATOR]="^"+src[GTLT]+"\\s*("+FULLPLAIN+")$|^$";var COMPARATORTRIM=R++;src[COMPARATORTRIM]="(\\s*)"+src[GTLT]+"\\s*("+LOOSEPLAIN+"|"+src[XRANGEPLAIN]+")";re[COMPARATORTRIM]=new RegExp(src[COMPARATORTRIM],"g");var comparatorTrimReplace="$1$2$3";var HYPHENRANGE=R++;src[HYPHENRANGE]="^\\s*("+src[XRANGEPLAIN]+")"+"\\s+-\\s+"+"("+src[XRANGEPLAIN]+")"+"\\s*$";var HYPHENRANGELOOSE=R++;src[HYPHENRANGELOOSE]="^\\s*("+src[XRANGEPLAINLOOSE]+")"+"\\s+-\\s+"+"("+src[XRANGEPLAINLOOSE]+")"+"\\s*$";var STAR=R++;src[STAR]="(<|>)?=?\\s*\\*";for(var i=0;i<R;i++){if(!re[i])re[i]=new RegExp(src[i])}exports.parse=parse;function parse(version,loose){var r=loose?re[LOOSE]:re[FULL];return r.test(version)?new SemVer(version,loose):null}exports.valid=valid;function valid(version,loose){var v=parse(version,loose);return v?v.version:null}exports.clean=clean;function clean(version,loose){var s=parse(version,loose);return s?s.version:null}exports.SemVer=SemVer;function SemVer(version,loose){if(version instanceof SemVer){if(version.loose===loose)return version;else version=version.version}else if(typeof version!=="string"){throw new TypeError("Invalid Version: "+version)}if(!(this instanceof SemVer))return new SemVer(version,loose);this.loose=loose;var m=version.trim().match(loose?re[LOOSE]:re[FULL]);if(!m)throw new TypeError("Invalid Version: "+version);this.raw=version;this.major=+m[1];this.minor=+m[2];this.patch=+m[3];if(!m[4])this.prerelease=[];else this.prerelease=m[4].split(".").map(function(id){return/^[0-9]+$/.test(id)?+id:id});this.build=m[5]?m[5].split("."):[];this.format()}SemVer.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};SemVer.prototype.inspect=function(){return'<SemVer "'+this+'">'};SemVer.prototype.toString=function(){return this.version};SemVer.prototype.compare=function(other){if(!(other instanceof SemVer))other=new SemVer(other,this.loose);return this.compareMain(other)||this.comparePre(other)};SemVer.prototype.compareMain=function(other){if(!(other instanceof SemVer))other=new SemVer(other,this.loose);return compareIdentifiers(this.major,other.major)||compareIdentifiers(this.minor,other.minor)||compareIdentifiers(this.patch,other.patch)};SemVer.prototype.comparePre=function(other){if(!(other instanceof SemVer))other=new SemVer(other,this.loose);if(this.prerelease.length&&!other.prerelease.length)return-1;else if(!this.prerelease.length&&other.prerelease.length)return 1;else if(!this.prerelease.length&&!other.prerelease.length)return 0;var i=0;do{var a=this.prerelease[i];var b=other.prerelease[i];if(a===undefined&&b===undefined)return 0;else if(b===undefined)return 1;else if(a===undefined)return-1;else if(a===b)continue;else return compareIdentifiers(a,b)}while(++i)};SemVer.prototype.inc=function(release){switch(release){case"premajor":this.inc("major");this.inc("pre");break;case"preminor":this.inc("minor");this.inc("pre");break;case"prepatch":this.prerelease.length=0;this.inc("patch");this.inc("pre");break;case"prerelease":if(this.prerelease.length===0)this.inc("patch");this.inc("pre");break;case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var i=this.prerelease.length;while(--i>=0){if(typeof this.prerelease[i]==="number"){this.prerelease[i]++;i=-2}}if(i===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+release)}this.format();return this};exports.inc=inc;function inc(version,release,loose){try{return new SemVer(version,loose).inc(release).version}catch(er){return null}}exports.compareIdentifiers=compareIdentifiers;var numeric=/^[0-9]+$/;function compareIdentifiers(a,b){var anum=numeric.test(a);var bnum=numeric.test(b);if(anum&&bnum){a=+a;b=+b}return anum&&!bnum?-1:bnum&&!anum?1:a<b?-1:a>b?1:0}exports.rcompareIdentifiers=rcompareIdentifiers;function rcompareIdentifiers(a,b){return compareIdentifiers(b,a)}exports.compare=compare;function compare(a,b,loose){return new SemVer(a,loose).compare(b)}exports.compareLoose=compareLoose;function compareLoose(a,b){return compare(a,b,true)}exports.rcompare=rcompare;function rcompare(a,b,loose){return compare(b,a,loose)}exports.sort=sort;function sort(list,loose){return list.sort(function(a,b){return exports.compare(a,b,loose)})}exports.rsort=rsort;function rsort(list,loose){return list.sort(function(a,b){return exports.rcompare(a,b,loose)})}exports.gt=gt;function gt(a,b,loose){return compare(a,b,loose)>0}exports.lt=lt;function lt(a,b,loose){return compare(a,b,loose)<0}exports.eq=eq;function eq(a,b,loose){return compare(a,b,loose)===0}exports.neq=neq;function neq(a,b,loose){return compare(a,b,loose)!==0}exports.gte=gte;function gte(a,b,loose){return compare(a,b,loose)>=0}exports.lte=lte;function lte(a,b,loose){return compare(a,b,loose)<=0}exports.cmp=cmp;function cmp(a,op,b,loose){var ret;switch(op){case"===":ret=a===b;break;case"!==":ret=a!==b;break;case"":case"=":case"==":ret=eq(a,b,loose);break;case"!=":ret=neq(a,b,loose);break;case">":ret=gt(a,b,loose);break;case">=":ret=gte(a,b,loose);break;case"<":ret=lt(a,b,loose);break;case"<=":ret=lte(a,b,loose);break;default:throw new TypeError("Invalid operator: "+op)}return ret}exports.Comparator=Comparator;function Comparator(comp,loose){if(comp instanceof Comparator){if(comp.loose===loose)return comp;else comp=comp.value}if(!(this instanceof Comparator))return new Comparator(comp,loose);this.loose=loose;this.parse(comp);if(this.semver===ANY)this.value="";else this.value=this.operator+this.semver.version}var ANY={};Comparator.prototype.parse=function(comp){var r=this.loose?re[COMPARATORLOOSE]:re[COMPARATOR];var m=comp.match(r);if(!m)throw new TypeError("Invalid comparator: "+comp);this.operator=m[1];if(!m[2])this.semver=ANY;else{this.semver=new SemVer(m[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};Comparator.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};Comparator.prototype.toString=function(){return this.value};Comparator.prototype.test=function(version){return this.semver===ANY?true:cmp(version,this.operator,this.semver,this.loose)};exports.Range=Range;function Range(range,loose){if(range instanceof Range&&range.loose===loose)return range;if(!(this instanceof Range))return new Range(range,loose);this.loose=loose;this.raw=range;this.set=range.split(/\s*\|\|\s*/).map(function(range){return this.parseRange(range.trim())},this).filter(function(c){return c.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+range)}this.format()}Range.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};Range.prototype.format=function(){this.range=this.set.map(function(comps){return comps.join(" ").trim()}).join("||").trim();return this.range};Range.prototype.toString=function(){return this.range};Range.prototype.parseRange=function(range){var loose=this.loose;range=range.trim();var hr=loose?re[HYPHENRANGELOOSE]:re[HYPHENRANGE];range=range.replace(hr,hyphenReplace);range=range.replace(re[COMPARATORTRIM],comparatorTrimReplace);range=range.replace(re[TILDETRIM],tildeTrimReplace);range=range.replace(re[CARETTRIM],caretTrimReplace);range=range.split(/\s+/).join(" ");var compRe=loose?re[COMPARATORLOOSE]:re[COMPARATOR];var set=range.split(" ").map(function(comp){return parseComparator(comp,loose)}).join(" ").split(/\s+/);if(this.loose){set=set.filter(function(comp){return!!comp.match(compRe)})}set=set.map(function(comp){return new Comparator(comp,loose)});return set};exports.toComparators=toComparators;function toComparators(range,loose){return new Range(range,loose).set.map(function(comp){return comp.map(function(c){return c.value}).join(" ").trim().split(" ")})}function parseComparator(comp,loose){comp=replaceCarets(comp,loose);comp=replaceTildes(comp,loose);comp=replaceXRanges(comp,loose);comp=replaceStars(comp,loose);return comp}function isX(id){return!id||id.toLowerCase()==="x"||id==="*"}function replaceTildes(comp,loose){return comp.trim().split(/\s+/).map(function(comp){return replaceTilde(comp,loose)}).join(" ")}function replaceTilde(comp,loose){var r=loose?re[TILDELOOSE]:re[TILDE];return comp.replace(r,function(_,M,m,p,pr){var ret;if(isX(M))ret="";else if(isX(m))ret=">="+M+".0.0-0 <"+(+M+1)+".0.0-0";else if(isX(p))ret=">="+M+"."+m+".0-0 <"+M+"."+(+m+1)+".0-0";else if(pr){if(pr.charAt(0)!=="-")pr="-"+pr;ret=">="+M+"."+m+"."+p+pr+" <"+M+"."+(+m+1)+".0-0"}else ret=">="+M+"."+m+"."+p+"-0"+" <"+M+"."+(+m+1)+".0-0";return ret})}function replaceCarets(comp,loose){return comp.trim().split(/\s+/).map(function(comp){return replaceCaret(comp,loose)}).join(" ")}function replaceCaret(comp,loose){var r=loose?re[CARETLOOSE]:re[CARET];return comp.replace(r,function(_,M,m,p,pr){var ret;if(isX(M))ret="";else if(isX(m))ret=">="+M+".0.0-0 <"+(+M+1)+".0.0-0";else if(isX(p)){if(M==="0")ret=">="+M+"."+m+".0-0 <"+M+"."+(+m+1)+".0-0";else ret=">="+M+"."+m+".0-0 <"+(+M+1)+".0.0-0"}else if(pr){if(pr.charAt(0)!=="-")pr="-"+pr;if(M==="0"){if(m==="0")ret="="+M+"."+m+"."+p+pr;else ret=">="+M+"."+m+"."+p+pr+" <"+M+"."+(+m+1)+".0-0"}else ret=">="+M+"."+m+"."+p+pr+" <"+(+M+1)+".0.0-0"}else{if(M==="0"){if(m==="0")ret="="+M+"."+m+"."+p;else ret=">="+M+"."+m+"."+p+"-0"+" <"+M+"."+(+m+1)+".0-0"}else ret=">="+M+"."+m+"."+p+"-0"+" <"+(+M+1)+".0.0-0"}return ret})}function replaceXRanges(comp,loose){return comp.split(/\s+/).map(function(comp){return replaceXRange(comp,loose)}).join(" ")}function replaceXRange(comp,loose){comp=comp.trim();var r=loose?re[XRANGELOOSE]:re[XRANGE];return comp.replace(r,function(ret,gtlt,M,m,p,pr){var xM=isX(M);var xm=xM||isX(m);var xp=xm||isX(p);var anyX=xp;if(gtlt==="="&&anyX)gtlt="";if(gtlt&&anyX){if(xM)M=0;if(xm)m=0;if(xp)p=0;if(gtlt===">"){gtlt=">=";if(xM){}else if(xm){M=+M+1;m=0;p=0}else if(xp){m=+m+1;p=0}}ret=gtlt+M+"."+m+"."+p+"-0"}else if(xM){ret="*"}else if(xm){ret=">="+M+".0.0-0 <"+(+M+1)+".0.0-0"}else if(xp){ret=">="+M+"."+m+".0-0 <"+M+"."+(+m+1)+".0-0"}return ret})}function replaceStars(comp,loose){return comp.trim().replace(re[STAR],"")}function hyphenReplace($0,from,fM,fm,fp,fpr,fb,to,tM,tm,tp,tpr,tb){if(isX(fM))from="";else if(isX(fm))from=">="+fM+".0.0-0";else if(isX(fp))from=">="+fM+"."+fm+".0-0";else from=">="+from;if(isX(tM))to="";else if(isX(tm))to="<"+(+tM+1)+".0.0-0";else if(isX(tp))to="<"+tM+"."+(+tm+1)+".0-0";else if(tpr)to="<="+tM+"."+tm+"."+tp+"-"+tpr;else to="<="+to;return(from+" "+to).trim()}Range.prototype.test=function(version){if(!version)return false;for(var i=0;i<this.set.length;i++){if(testSet(this.set[i],version))return true}return false};function testSet(set,version){for(var i=0;i<set.length;i++){if(!set[i].test(version))return false}return true}exports.satisfies=satisfies;function satisfies(version,range,loose){try{range=new Range(range,loose)}catch(er){return false}return range.test(version)}exports.maxSatisfying=maxSatisfying;function maxSatisfying(versions,range,loose){return versions.filter(function(version){return satisfies(version,range,loose)}).sort(function(a,b){return rcompare(a,b,loose)})[0]||null}exports.validRange=validRange;function validRange(range,loose){try{return new Range(range,loose).range||"*"}catch(er){return null}}exports.ltr=ltr;function ltr(version,range,loose){return outside(version,range,"<",loose)}exports.gtr=gtr;function gtr(version,range,loose){return outside(version,range,">",loose)}exports.outside=outside;function outside(version,range,hilo,loose){version=new SemVer(version,loose);range=new Range(range,loose);var gtfn,ltefn,ltfn,comp,ecomp;switch(hilo){case">":gtfn=gt;ltefn=lte;ltfn=lt;comp=">";ecomp=">=";break;case"<":gtfn=lt;ltefn=gte;ltfn=gt;comp="<";ecomp="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies(version,range,loose)){return false}for(var i=0;i<range.set.length;++i){var comparators=range.set[i];var high=null;var low=null;comparators.forEach(function(comparator){high=high||comparator;low=low||comparator;if(gtfn(comparator.semver,high.semver,loose)){high=comparator}else if(ltfn(comparator.semver,low.semver,loose)){low=comparator}});if(high.operator===comp||high.operator===ecomp){return false}if((!low.operator||low.operator===comp)&<efn(version,low.semver)){return false}else if(low.operator===ecomp&<fn(version,low.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(exports)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={})},{}],27:[function(_dereq_,module,exports){var detect=_dereq_("./detect");var requiredFunctions=["init"];function isSupported(plugin){return plugin&&typeof plugin.supported=="function"&&plugin.supported(detect)}function isValid(plugin){var supportedFunctions=requiredFunctions.filter(function(fn){return typeof plugin[fn]=="function"});return supportedFunctions.length===requiredFunctions.length}module.exports=function(plugins){return[].concat(plugins||[]).filter(isSupported).filter(isValid)[0]}},{"./detect":25}],28:[function(_dereq_,module,exports){"use strict";module.exports=function(el){el.src=null;if(el.mozSrcObject){el.mozSrcObject=null}if(el.currentSrc){el.currentSrc=null}return el}},{}],29:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("rtc-media");var extend=_dereq_("cog/extend");var detect=_dereq_("rtc-core/detect");var plugin=_dereq_("rtc-core/plugin");var EventEmitter=_dereq_("events").EventEmitter;var util=_dereq_("util");navigator.getUserMedia=navigator.getUserMedia||detect.call(navigator,"getUserMedia");window.URL=window.URL||detect("URL");window.MediaStream=detect("MediaStream");function Media(opts){var media=this;if(!(this instanceof Media)){return new Media(opts)}EventEmitter.call(this);if(opts&&MediaStream&&opts instanceof MediaStream){opts={stream:opts}}if(opts&&(opts.audio||opts.video)){opts={constraints:opts}}opts=extend({},{capture:!opts||!opts.stream,muted:!opts||!opts.stream,constraints:{video:{mandatory:{},optional:[]},audio:true,fake:typeof __testlingConsole!="undefined"}},opts);this.constraints=opts.constraints;this.name=opts.name;this.stream=opts.stream||null;this.muted=typeof opts.muted=="undefined"||opts.muted;this._bindings=[];this.plugin=plugin((opts||{}).plugins);if(this.plugin){media._pinst=this.plugin.init(opts,function(err){console.log("initialization complete");if(err){return media.emit("error",err)}if(!opts.stream&&opts.capture){media.capture()}})}else if(opts.capture){setTimeout(this.capture.bind(this),0)}}util.inherits(Media,EventEmitter);module.exports=Media;Media.prototype.capture=function(constraints,callback){var media=this;var handleEnd=this.emit.bind(this,"end");if(this.stream){return}if(typeof constraints=="function"){callback=constraints;constraints=this.constraints}if(typeof callback=="function"){this.once("capture",callback.bind(this))}if(typeof navigator.getUserMedia!="function"){return callback&&callback(new Error("Unable to capture user media"))}debug("getUserMedia, constraints: ",constraints||this.constraints);navigator.getUserMedia(constraints||this.constraints,function(stream){debug("sucessfully captured media stream: ",stream);if(typeof stream.addEventListener=="function"){stream.addEventListener("ended",handleEnd)}else{stream.onended=handleEnd}media.stream=stream;setTimeout(function(){media.emit("capture",stream)},0)},function(err){debug("getUserMedia attempt failed: ",err);media.emit("error",err)})};Media.prototype.render=function(target,opts,callback){if(Array.isArray(target)){console.log("WARNING: rtc-media render (as of 1.x) expects a single target");target=target[0]}if(typeof opts=="function"){callback=opts;opts={}}opts=opts||{};target=this._prepareElement(opts,target);console.log("attempting render, stream: ",this.stream);if(!this.stream){this.once("capture",this._bindStream.bind(this))}else{this._bindStream(this.stream)}if(typeof callback=="function"){this.once("render",callback)}return target};Media.prototype.stop=function(opts){var media=this;if(!this.stream){return}this._unbind(opts);this.stream.stop();this.once("capture",media._bindStream.bind(media));this.stream=null};Media.prototype._createBinding=function(opts,element){this._bindings.push({el:element,opts:opts});return element};Media.prototype._prepareElement=function(opts,element){var parent;var validElement=element instanceof HTMLVideoElement||element instanceof HTMLAudioElement;var preserveAspectRatio=typeof opts.preserveAspectRatio=="undefined"||opts.preserveAspectRatio;if(!element){throw new Error("Cannot render media to a null element")}if(this.plugin&&typeof this.plugin.prepareElement=="function"){return this._createBinding(opts,this.plugin.prepareElement.call(this._pinst,opts,element))}validElement=validElement||typeof element.play=="function"&&(typeof element.srcObject!="undefined"||typeof element.mozSrcObject!="undefined"||typeof element.src!="undefined");if(!validElement){parent=element;element=document.createElement("video");if(preserveAspectRatio){element.setAttribute("preserveAspectRatio","")}parent.appendChild(element);element.setAttribute("data-playing",false)}if(element&&this.muted){element.muted=true;element.setAttribute("muted","")}return this._createBinding(opts,element)};Media.prototype._bindStream=function(stream){var media=this;var elements=[];var waiting=[];function checkWaiting(){if(waiting.length===0&&elements.length>0){media.emit("render",elements[0]);elements.map(function(el){el.setAttribute("data-playing",true)})}}function canPlay(evt){var el=evt.target||evt.srcElement;var videoIndex=elements.indexOf(el);if(videoIndex>=0){waiting.splice(videoIndex,1)}el.play();el.removeEventListener("canplay",canPlay);el.removeEventListener("loadedmetadata",canPlay);checkWaiting()}if(this.plugin&&typeof this.plugin.attachStream=="function"){return this.plugin.attachStream.call(this._pinst,stream,this._bindings)}elements=this._bindings.map(function(binding){if(typeof binding.el.srcObject!="undefined"){binding.el.srcObject=stream}else if(typeof binding.el.mozSrcObject!="undefined"){binding.el.mozSrcObject=stream}else{binding.el.src=media._createObjectURL(stream)||stream}binding.el.play();return binding.el});waiting=elements.filter(function(el){return el.readyState<3});waiting.forEach(function(el){el.addEventListener("canplay",canPlay,false);el.addEventListener("loadedmetadata",canPlay,false)});checkWaiting()};Media.prototype._unbind=function(opts){opts=opts||{};this._bindings.forEach(function(binding){var element=binding.el;element.src=null;if(element.mozSrcObject){element.mozSrcObject=null}if(element.currentSrc){element.currentSrc=null}})};Media.prototype._createObjectURL=function(stream){try{return window.URL.createObjectURL(stream)}catch(e){}};Media.prototype._handleSuccess=function(stream){this.stream=stream;this.emit("stream",stream)}},{"cog/extend":15,"cog/logger":18,events:1,"rtc-core/detect":25,"rtc-core/plugin":27,util:10}],30:[function(_dereq_,module,exports){var extend=_dereq_("cog/extend");module.exports=function(messenger,opts){return _dereq_("./index.js")(messenger,extend({connect:_dereq_("./primus-loader")},opts))}},{"./index.js":35,"./primus-loader":36,"cog/extend":15}],31:[function(_dereq_,module,exports){module.exports={dataEvent:"data",openEvent:"open",closeEvent:"close",writeMethod:"write",closeMethod:"close",leaveTimeout:3e3}},{}],32:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("rtc-signaller");var extend=_dereq_("cog/extend");var roles=["a","b"];module.exports=function(signaller){function copyData(target,source){if(target&&source){for(var key in source){target[key]=source[key]}}return target}function dataAllowed(data){var evt={data:data,allow:true};signaller.emit("peer:filter",evt);return evt.allow}return function(args,messageType,srcData,srcState,isDM){var data=args[0];var peer;debug("announce handler invoked, received data: ",data);if(data&&data.id&&data.id!==signaller.id){if(!dataAllowed(data)){return}peer=signaller.peers.get(data.id);signaller.emit("peer:connected",data.id,data);if(peer&&!peer.inactive){debug("signaller: "+signaller.id+" received update, data: ",data);copyData(peer.data,data);return signaller.emit("peer:update",data,srcData)}peer={id:data.id,roleIdx:[data.id,signaller.id].sort().indexOf(data.id),data:{}};copyData(peer.data,data);clearTimeout(peer.leaveTimer);peer.inactive=false;signaller.peers.set(data.id,peer);if(signaller.autoreply&&!isDM){signaller.to(data.id).send("/announce",signaller.attributes)}return signaller.emit("peer:announce",data,peer)}}}},{"cog/extend":15,"cog/logger":18}],33:[function(_dereq_,module,exports){"use strict";module.exports=function(signaller,opts){return{announce:_dereq_("./announce")(signaller,opts),leave:_dereq_("./leave")(signaller,opts)}}},{"./announce":32,"./leave":34}],34:[function(_dereq_,module,exports){"use strict";module.exports=function(signaller,opts){return function(args){var data=args[0];var peer=signaller.peers.get(data&&data.id);if(peer){peer.leaveTimer=setTimeout(function(){peer.inactive=true;signaller.emit("peer:leave",data.id,peer)},opts.leaveTimeout)}signaller.emit("peer:disconnected",data.id,peer)}}},{}],35:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("rtc-signaller");var detect=_dereq_("rtc-core/detect");var EventEmitter=_dereq_("events").EventEmitter;var defaults=_dereq_("cog/defaults");var extend=_dereq_("cog/extend");var throttle=_dereq_("cog/throttle");var getable=_dereq_("cog/getable");var uuid=_dereq_("./uuid");var WRITE_METHODS=["write","send"];var CLOSE_METHODS=["close","end"];var metadata={version:"2.1.2"};module.exports=function(messenger,opts){var autoreply=(opts||{}).autoreply;var connect=(opts||{}).connect;var localMeta={};var signaller=new EventEmitter;var id=signaller.id=(opts||{}).id||uuid();var attributes=signaller.attributes={browser:detect.browser,browserVersion:detect.browserVersion,id:id,agent:"signaller@"+metadata.version};
var peers=signaller.peers=getable({});var connected=false;var write;var close;var processor;var announceTimer=0;function announceOnReconnect(){signaller.announce()}function bindBrowserEvents(){messenger.addEventListener("message",function(evt){processor(evt.data)});messenger.addEventListener("open",function(evt){connected=true;signaller.emit("open");signaller.emit("connected")});messenger.addEventListener("close",function(evt){connected=false;signaller.emit("disconnected")})}function bindEvents(){if(typeof messenger.on!="function"){return}messenger.on(opts.dataEvent,processor);messenger.on(opts.openEvent,function(){connected=true;signaller.emit("open");signaller.emit("connected")});messenger.on(opts.closeEvent,function(){connected=false;signaller.emit("disconnected")})}function connectToHost(url){if(typeof connect!="function"){return signaller.emit("error",new Error("no connect function"))}connect(url,function(err,socket){if(err){return signaller.emit("error",err)}signaller._messenger=messenger=socket.connect(url);init()})}function createDataLine(args){return args.map(prepareArg).join("|")}function createMetadata(){return extend({},localMeta,{id:signaller.id})}function extractProp(name){return messenger[name]}function isClosing(){var isAbstraction=messenger&&typeof messenger.socket!="undefined";return isAbstraction?false:messenger&&typeof messenger.readyState!="undefined"&&messenger.readyState>=2}function isF(target){return typeof target=="function"}function init(){write=[opts.writeMethod].concat(WRITE_METHODS).map(extractProp).filter(isF)[0];close=[opts.closeMethod].concat(CLOSE_METHODS).map(extractProp).filter(isF)[0];signaller.process=processor=_dereq_("./processor")(signaller,opts);if(typeof write!="function"){throw new Error('provided messenger does not implement a "'+writeMethod+'" write method')}if(typeof messenger.addEventListener=="function"){bindBrowserEvents()}else{bindEvents()}connected=messenger.connected||false;if(!connected){signaller.once("connected",function(){signaller.on("connected",announceOnReconnect)})}setTimeout(signaller.emit.bind(signaller,"init"),0)}function prepareArg(arg){if(typeof arg=="object"&&!(arg instanceof String)){return JSON.stringify(arg)}else if(typeof arg=="function"){return null}return arg}var send=signaller.send=function(){var args=[].slice.call(arguments);var dataline;args.splice(1,0,createMetadata());dataline=createDataLine(args);if(isClosing()){return}if(!connected){return signaller.once("connected",function(){write.call(messenger,dataline)})}return write.call(messenger,dataline)};signaller.announce=function(data,sender){clearTimeout(announceTimer);extend(attributes,data,{id:signaller.id});if(connected){signaller.removeListener("connected",announceOnReconnect);signaller.on("connected",announceOnReconnect)}return announceTimer=setTimeout(function(){if(!connected){return signaller.once("connected",function(){(sender||send)("/announce",attributes)})}(sender||send)("/announce",attributes)},(opts||{}).announceDelay||10)};signaller.isMaster=function(targetId){var peer=peers.get(targetId);return peer&&peer.roleIdx!==0};signaller.leave=signaller.close=function(){send("/leave",{id:id});signaller.removeListener("connected",announceOnReconnect);if(typeof close=="function"){close.call(messenger)}};signaller.metadata=function(data){if(arguments.length===0){return extend({},localMeta)}localMeta=extend({},data)};signaller.to=function(targetId){var sender=function(){var peer=signaller.peers.get(targetId);var args;if(!peer){throw new Error("Unknown peer: "+targetId)}if(peer.inactive){return}args=["/to",targetId].concat([].slice.call(arguments));args.splice(3,0,createMetadata());setTimeout(function(){var msg=createDataLine(args);debug("TX ("+targetId+"): "+msg);write.call(messenger,msg)},0)};return{announce:function(data){return signaller.announce(data,sender)},send:sender}};signaller.setMaxListeners(0);opts=defaults({},opts,_dereq_("./defaults"));signaller.autoreply=autoreply===undefined||autoreply;if(typeof messenger=="string"||messenger instanceof String){connectToHost(messenger)}else{init()}signaller._messenger=messenger;signaller.process=processor;return signaller}},{"./defaults":31,"./processor":37,"./uuid":38,"cog/defaults":14,"cog/extend":15,"cog/getable":16,"cog/logger":18,"cog/throttle":19,events:1,"rtc-core/detect":25}],36:[function(_dereq_,module,exports){"use strict";var reTrailingSlash=/\/$/;module.exports=function(signalhost,callback){var anchor=document.createElement("a");var script;var baseUrl;var scriptSrc;if(typeof signalhost=="function"){callback=signalhost;signalhost=location.origin}anchor.href=signalhost;baseUrl=signalhost.replace(reTrailingSlash,"");scriptSrc=baseUrl+"/rtc.io/primus.js";script=document.querySelector('script[src="'+scriptSrc+'"]');if(script&&typeof Primus!="undefined"){return callback(null,Primus)}else if(script){script.addEventListener("load",function(){callback(null,Primus)});return}script=document.createElement("script");script.src=scriptSrc;script.onerror=callback;script.addEventListener("load",function(){if(anchor.pathname!=="/"){Primus.prototype.pathname=anchor.pathname.replace(reTrailingSlash,"")+Primus.prototype.pathname}callback(null,Primus)});document.body.appendChild(script)}},{}],37:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("rtc-signaller");var jsonparse=_dereq_("cog/jsonparse");module.exports=function(signaller,opts){var handlers=_dereq_("./handlers")(signaller,opts);function sendEvent(parts,srcState,data){var evtName=parts[0].slice(1);var args=parts.slice(2).map(jsonparse);signaller.emit.apply(signaller,[evtName].concat(args).concat([srcState,data]))}return function(originalData){var data=originalData;var isMatch=true;var parts;var handler;var srcData;var srcState;var isDirectMessage=false;var id=signaller.id+"";debug("signaller "+id+" received data: "+originalData);if(data.slice(0,3)==="/to"){isMatch=data.slice(4,id.length+4)===id;if(isMatch){parts=data.slice(5+id.length).split("|").map(jsonparse);isDirectMessage=true;parts=parts.map(jsonparse)}}if(!isMatch){return}parts=parts||data.split("|").map(jsonparse);if(typeof parts[0]=="string"){srcData=parts[1];if(srcData&&srcData.id===signaller.id){return console.warn("got data from ourself, discarding")}srcState=signaller.peers.get(srcData&&srcData.id)||srcData;if(parts[0].charAt(0)==="/"){handler=handlers[parts[0].slice(1)];if(typeof handler=="function"){handler(parts.slice(2),parts[0].slice(1),srcData,srcState,isDirectMessage)}else{sendEvent(parts,srcState,originalData)}}else{signaller.emit("data",parts.slice(0,1).concat(parts.slice(2)),srcData,srcState,isDirectMessage)}}}}},{"./handlers":33,"cog/jsonparse":17,"cog/logger":18}],38:[function(_dereq_,module,exports){module.exports=function(a,b){for(b=a="";a++<36;b+=a*51&52?(a^15?8^Math.random()*(a^20?16:4):4).toString(16):"-");return b}},{}],39:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("rtc/cleanup");var CANNOT_CLOSE_STATES=["closed"];var EVENTNAMES=["addstream","datachannel","icecandidate","iceconnectionstatechange","negotiationneeded","removestream","signalingstatechange"];module.exports=function(pc){var currentState=pc.iceConnectionState;var canClose=CANNOT_CLOSE_STATES.indexOf(currentState)<0;if(canClose){debug("attempting connection close, current state: "+pc.iceConnectionState);pc.close()}setTimeout(function(){EVENTNAMES.forEach(function(evtName){if(pc["on"+evtName]){pc["on"+evtName]=null}})},100)}},{"cog/logger":18}],40:[function(_dereq_,module,exports){"use strict";var async=_dereq_("async");var cleanup=_dereq_("./cleanup");var monitor=_dereq_("./monitor");var detect=_dereq_("./detect");var findPlugin=_dereq_("rtc-core/plugin");var CLOSED_STATES=["closed","failed"];var OFFER_ANSWER_CONSTRAINTS=["offerToReceiveVideo","offerToReceiveAudio","voiceActivityDetection","iceRestart"];function couple(pc,targetId,signaller,opts){var debugLabel=(opts||{}).debugLabel||"rtc";var debug=_dereq_("cog/logger")(debugLabel+"/couple");var mon=monitor(pc,targetId,signaller,opts);var queuedCandidates=[];var sdpFilter=(opts||{}).sdpfilter;var reactive=(opts||{}).reactive;var offerTimeout;var endOfCandidates=true;var plugin=findPlugin((opts||{}).plugins);var disconnectTimeout=(opts||{}).disconnectTimeout||1e4;var disconnectTimer;if(typeof signaller.isMaster!="function"){throw new Error("rtc-signaller instance >= 0.14.0 required")}var isMaster=signaller.isMaster(targetId);var createOffer=prepNegotiate("createOffer",isMaster,[checkStable]);var createAnswer=prepNegotiate("createAnswer",true,[]);var q=async.queue(function(task,cb){if(typeof task.op!="function"){return cb()}task.op(task,cb)},1);var RTCSessionDescription=(opts||{}).RTCSessionDescription||detect("RTCSessionDescription");var RTCIceCandidate=(opts||{}).RTCIceCandidate||detect("RTCIceCandidate");function abort(stage,sdp,cb){return function(err){console.error("rtc/couple error ("+stage+"): ",err);if(typeof cb=="function"){cb(err)}}}function applyCandidatesWhenStable(){if(pc.signalingState=="stable"&&pc.remoteDescription){debug("signaling state = stable, applying queued candidates");mon.removeListener("change",applyCandidatesWhenStable);queuedCandidates.splice(0).forEach(function(data){debug("applying queued candidate",data);try{pc.addIceCandidate(createIceCandidate(data))}catch(e){debug("invalidate candidate specified: ",data)}})}}function checkNotConnecting(negotiate){if(pc.iceConnectionState!="checking"){return true}debug("connection state is checking, will wait to create a new offer");mon.once("connected",function(){q.push({op:negotiate})});return false}function checkStable(negotiate){if(pc.signalingState==="stable"){return true}debug("cannot create offer, signaling state != stable, will retry");mon.on("change",function waitForStable(){if(pc.signalingState==="stable"){q.push({op:negotiate})}mon.removeListener("change",waitForStable)});return false}function createIceCandidate(data){if(plugin&&typeof plugin.createIceCandidate=="function"){return plugin.createIceCandidate(data)}return new RTCIceCandidate(data)}function createSessionDescription(data){if(plugin&&typeof plugin.createSessionDescription=="function"){return plugin.createSessionDescription(data)}return new RTCSessionDescription(data)}function decouple(){debug("decoupling "+signaller.id+" from "+targetId);mon.removeAllListeners();mon.stop();cleanup(pc);signaller.removeListener("sdp",handleSdp);signaller.removeListener("candidate",handleRemoteCandidate);signaller.removeListener("negotiate",handleNegotiateRequest)}function generateConstraints(methodName){var constraints={};function reformatConstraints(){var tweaked={};Object.keys(constraints).forEach(function(param){var sentencedCased=param.charAt(0).toUpperCase()+param.substr(1);tweaked[sentencedCased]=constraints[param]});constraints={mandatory:tweaked}}OFFER_ANSWER_CONSTRAINTS.forEach(function(param){var sentencedCased=param.charAt(0).toUpperCase()+param.substr(1);if(!opts){return}else if(opts[param]!==undefined){constraints[param]=opts[param]}else if(opts[sentencedCased]!==undefined){constraints[param]=opts[sentencedCased]}});reformatConstraints();return constraints}function prepNegotiate(methodName,allowed,preflightChecks){var constraints=generateConstraints(methodName);preflightChecks=[].concat(preflightChecks||[]);return function negotiate(task,cb){var checksOK=true;if(!allowed){signaller.to(targetId).send("/negotiate");return cb()}if(isClosed()){return cb(new Error("connection closed, cannot negotiate"))}preflightChecks.forEach(function(check){checksOK=checksOK&&check(negotiate)});if(!checksOK){debug("preflight checks did not pass, aborting "+methodName);return cb()}debug("calling "+methodName);pc[methodName](function(desc){if(typeof sdpFilter=="function"){desc.sdp=sdpFilter(desc.sdp,pc,methodName)}q.push({op:queueLocalDesc(desc)});cb()},abort(methodName,"",cb),constraints)}}function handleConnectionClose(){debug("captured pc close, iceConnectionState = "+pc.iceConnectionState);decouple()}function handleDisconnect(){debug("captured pc disconnect, monitoring connection status");disconnectTimer=setTimeout(function(){debug("manually closing connection after disconnect timeout");pc.close()},disconnectTimeout);mon.on("change",handleDisconnectAbort)}function handleDisconnectAbort(){debug("connection state changed to: "+pc.iceConnectionState);resetDisconnectTimer();if(CLOSED_STATES.indexOf(pc.iceConnectionState)>=0){return mon.emit("closed")}mon.once("disconnect",handleDisconnect)}function handleLocalCandidate(evt){if(evt.candidate){resetDisconnectTimer();signaller.to(targetId).send("/candidate",evt.candidate);endOfCandidates=false}else if(!endOfCandidates){endOfCandidates=true;debug("ice gathering state complete");signaller.to(targetId).send("/endofcandidates",{})}}function handleNegotiateRequest(src){if(src.id===targetId){debug("got negotiate request from "+targetId+", creating offer");q.push({op:createOffer})}}function handleRemoteCandidate(data,src){if(!src||src.id!==targetId){return}if(pc.signalingState!="stable"||!pc.remoteDescription){debug("queuing candidate");queuedCandidates.push(data);mon.removeListener("change",applyCandidatesWhenStable);mon.on("change",applyCandidatesWhenStable);return}try{pc.addIceCandidate(createIceCandidate(data))}catch(e){debug("invalidate candidate specified: ",data)}}function handleSdp(data,src){var abortType=data.type==="offer"?"createAnswer":"createOffer";if(!src||src.id!==targetId){return debug("received sdp but dropping due to unmatched src")}q.push({op:function(task,cb){if(isClosed()){return cb(new Error("pc closed: cannot set remote description"))}debug("setting remote description");pc.setRemoteDescription(createSessionDescription(data),function(){if(data.type==="offer"){queue(createAnswer)()}cb()},abort(abortType,data.sdp,cb))}})}function isClosed(){return CLOSED_STATES.indexOf(pc.iceConnectionState)>=0}function queue(negotiateTask){return function(){q.push([{op:negotiateTask}])}}function queueLocalDesc(desc){return function setLocalDesc(task,cb){if(isClosed()){return cb(new Error("connection closed, aborting"))}debug("setting local description");pc.setLocalDescription(desc,function(){signaller.to(targetId).send("/sdp",desc);cb()},function(err){debug("error setting local description",err);debug(desc.sdp);cb(err)})}}function resetDisconnectTimer(){mon.removeListener("change",handleDisconnectAbort);debug("reset disconnect timer, state: "+pc.iceConnectionState);clearTimeout(disconnectTimer)}if(reactive){pc.onnegotiationneeded=function(){debug("renegotiation required, will create offer in 50ms");clearTimeout(offerTimeout);offerTimeout=setTimeout(queue(createOffer),50)}}pc.onicecandidate=handleLocalCandidate;signaller.on("sdp",handleSdp);signaller.on("candidate",handleRemoteCandidate);if(isMaster){signaller.on("negotiate",handleNegotiateRequest)}mon.once("closed",handleConnectionClose);mon.once("disconnected",handleDisconnect);mon.createOffer=queue(createOffer);return mon}module.exports=couple},{"./cleanup":39,"./detect":41,"./monitor":44,async:13,"cog/logger":18,"rtc-core/plugin":27}],41:[function(_dereq_,module,exports){"use strict";module.exports=_dereq_("rtc-core/detect")},{"rtc-core/detect":25}],42:[function(_dereq_,module,exports){"use strict";var debug=_dereq_("cog/logger")("generators");var detect=_dereq_("./detect");var defaults=_dereq_("cog/defaults");var mappings={create:{dtls:function(c){if(!detect.moz){c.optional=(c.optional||[]).concat({DtlsSrtpKeyAgreement:true})}}}};exports.config=function(config){return defaults(config,{iceServers:[]})};exports.connectionConstraints=function(flags,constraints){var generated={};var m=mappings.create;var out;Object.keys(flags||{}).forEach(function(key){if(m[key]){m[key](generated)}});out=defaults({},constraints,generated);debug("generated connection constraints: ",out);return out}},{"./detect":41,"cog/defaults":14,"cog/logger":18}],43:[function(_dereq_,module,exports){"use strict";var gen=_dereq_("./generators");var detect=exports.detect=_dereq_("./detect");var findPlugin=_dereq_("rtc-core/plugin");exports.logger=_dereq_("cog/logger");var RTCPeerConnection=exports.RTCPeerConnection=detect("RTCPeerConnection");exports.couple=_dereq_("./couple");exports.createConnection=function(opts,constraints){var plugin=findPlugin((opts||{}).plugins);var normalize=(plugin?plugin.normalizeIce:null)||_dereq_("normalice");var config=gen.config(opts);var constraints=gen.connectionConstraints(opts,constraints);config.iceServers=(config.iceServers||[]).map(normalize);if(plugin&&typeof plugin.createConnection=="function"){return plugin.createConnection(config,constraints)}else{return new((opts||{}).RTCPeerConnection||RTCPeerConnection)(config,constraints)}}},{"./couple":40,"./detect":41,"./generators":42,"cog/logger":18,normalice:45,"rtc-core/plugin":27}],44:[function(_dereq_,module,exports){"use strict";var EventEmitter=_dereq_("events").EventEmitter;var stateMappings={completed:"connected"};var peerStateEvents=["signalingstatechange","iceconnectionstatechange"];module.exports=function(pc,targetId,signaller,opts){var debugLabel=(opts||{}).debugLabel||"rtc";var debug=_dereq_("cog/logger")(debugLabel+"/monitor");var monitor=new EventEmitter;var state;function checkState(){var newState=getMappedState(pc.iceConnectionState);debug("state changed: "+pc.iceConnectionState+", mapped: "+newState);monitor.emit("change",pc);if(state!==newState){monitor.emit(newState);state=newState}}function handlePeerLeave(peerId){debug("captured peer leave for peer: "+peerId);if(peerId!==targetId){return}monitor.emit("closed")}pc.onclose=monitor.emit.bind(monitor,"closed");peerStateEvents.forEach(function(evtName){pc["on"+evtName]=checkState});monitor.stop=function(){pc.onclose=null;peerStateEvents.forEach(function(evtName){pc["on"+evtName]=null});if(signaller&&typeof signaller.removeListener=="function"){signaller.removeListener("peer:leave",handlePeerLeave)}};monitor.checkState=checkState;if(!pc){return monitor}state=getMappedState(pc.iceConnectionState);if(signaller&&typeof signaller.on=="function"){signaller.on("peer:leave",handlePeerLeave)}return monitor};function getMappedState(state){return stateMappings[state]||state}},{"cog/logger":18,events:1}],45:[function(_dereq_,module,exports){var protocols=["stun:","turn:"];module.exports=function(input){var url=(input||{}).url||input;var protocol;var parts;var output={};if(typeof url!="string"&&!(url instanceof String)){return input}url=url.trim();protocol=protocols[protocols.indexOf(url.slice(0,5))];if(!protocol){return input}url=url.slice(5);parts=url.split("@");if(parts.length>1){url=parts[1];parts=parts[0].split(":");output.username=parts[0];output.credential=(input||{}).credential||parts[1]||""}output.url=protocol+url;output.urls=[output.url];return output}},{}],46:[function(_dereq_,module,exports){var parser=_dereq_("./lib/parser");var writer=_dereq_("./lib/writer");exports.write=writer;exports.parse=parser.parse;exports.parseFmtpConfig=parser.parseFmtpConfig;exports.parsePayloads=parser.parsePayloads;exports.parseRemoteCandidates=parser.parseRemoteCandidates},{"./lib/parser":48,"./lib/writer":49}],47:[function(_dereq_,module,exports){var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)\/(\d*)(?:\s*\/(\S*))?/,names:["payload","codec","rate","encoding"],format:function(o){return o.encoding?"rtpmap:%d %s/%s/%s":"rtpmap:%d %s/%s"}},{push:"fmtp",reg:/^fmtp:(\d*) (\S*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(o){return o.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(o){return o.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(o){return o.config!=null?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(o){return o.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:(\w*)/,format:"mid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/,format:"%s"},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","generation"],format:function(o){var str="candidate:%s %d %s %d %s %d typ %s";str+=o.raddr!=null?" raddr %s rport %d":"%v%v";if(o.generation!=null){str+=" generation %d"}return str}},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{name:"msidSemantic",reg:/^msid-semantic: (\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(key){var objs=grammar[key];objs.forEach(function(obj){if(!obj.reg){obj.reg=/(.*)/}if(!obj.format){obj.format="%s"}})})},{}],48:[function(_dereq_,module,exports){var toIntIfInt=function(v){return String(Number(v))===v?Number(v):v};var attachProperties=function(match,location,names,rawName){if(rawName&&!names){location[rawName]=toIntIfInt(match[1])}else{for(var i=0;i<names.length;i+=1){if(match[i+1]!=null){location[names[i]]=toIntIfInt(match[i+1])}}}};var parseReg=function(obj,location,content){var needsBlank=obj.name&&obj.names;if(obj.push&&!location[obj.push]){location[obj.push]=[]}else if(needsBlank&&!location[obj.name]){location[obj.name]={}}var keyLocation=obj.push?{}:needsBlank?location[obj.name]:location;attachProperties(content.match(obj.reg),keyLocation,obj.names,obj.name);if(obj.push){location[obj.push].push(keyLocation)}};var grammar=_dereq_("./grammar");var validLine=RegExp.prototype.test.bind(/^([a-z])=(.*)/);exports.parse=function(sdp){var session={},media=[],location=session;sdp.split("\r\n").filter(validLine).forEach(function(l){var type=l[0];var content=l.slice(2);if(type==="m"){media.push({rtp:[],fmtp:[]});location=media[media.length-1]}for(var j=0;j<(grammar[type]||[]).length;j+=1){var obj=grammar[type][j];if(obj.reg.test(content)){return parseReg(obj,location,content)}}});session.media=media;return session};var fmtpReducer=function(acc,expr){var s=expr.split("=");if(s.length===2){acc[s[0]]=toIntIfInt(s[1])}return acc};exports.parseFmtpConfig=function(str){return str.split(";").reduce(fmtpReducer,{})};exports.parsePayloads=function(str){return str.split(" ").map(Number)};exports.parseRemoteCandidates=function(str){var candidates=[];var parts=str.split(" ").map(toIntIfInt);for(var i=0;i<parts.length;i+=3){candidates.push({component:parts[i],ip:parts[i+1],port:parts[i+2]})}return candidates}},{"./grammar":47}],49:[function(_dereq_,module,exports){var grammar=_dereq_("./grammar");var formatRegExp=/%[sdv%]/g;var format=function(formatStr){var i=1;var args=arguments;var len=args.length;return formatStr.replace(formatRegExp,function(x){if(i>=len){return x}var arg=args[i];i+=1;switch(x){case"%%":return"%";case"%s":return String(arg);case"%d":return Number(arg);case"%v":return""}})};var makeLine=function(type,obj,location){var str=obj.format instanceof Function?obj.format(obj.push?location:location[obj.name]):obj.format;var args=[type+"="+str];if(obj.names){for(var i=0;i<obj.names.length;i+=1){var n=obj.names[i];if(obj.name){args.push(location[obj.name][n])}else{args.push(location[obj.names[i]])}}}else{args.push(location[obj.name])}return format.apply(null,args)};var defaultOuterOrder=["v","o","s","i","u","e","p","c","b","t","r","z","a"];var defaultInnerOrder=["i","c","b","a"];module.exports=function(session,opts){opts=opts||{};if(session.version==null){session.version=0}if(session.name==null){session.name=" "}session.media.forEach(function(mLine){if(mLine.payloads==null){mLine.payloads=""}});var outerOrder=opts.outerOrder||defaultOuterOrder;var innerOrder=opts.innerOrder||defaultInnerOrder;var sdp=[];outerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in session){sdp.push(makeLine(type,obj,session))}else if(obj.push in session){session[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})});session.media.forEach(function(mLine){sdp.push(makeLine("m",grammar.m[0],mLine));innerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in mLine){sdp.push(makeLine(type,obj,mLine))}else if(obj.push in mLine){mLine[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})})});return sdp.join("\r\n")+"\r\n"}},{"./grammar":47}],50:[function(_dereq_,module,exports){"use strict";var eve=_dereq_("eve");var EventEmitter=_dereq_("events").EventEmitter;var rtc=_dereq_("rtc-tools");var debug=_dereq_("cog/logger")("glue-sessionmanager");var createSignaller=_dereq_("rtc-signaller");var extend=_dereq_("cog/extend");var util=_dereq_("util");function SessionManager(config){if(!(this instanceof SessionManager)){return new SessionManager(config)}EventEmitter.call(this);this.room=config.room;this.role=config.role;this.cfg=config;this.peers={};this.streams={};this.streamCount=1;this.streamReadyCount=0;this.socket=new Primus(config.signalhost);this.socket.on("open",this.emit.bind(this,"active"));this.channels=[].concat(config.channels||[]);this.signaller=createSignaller(this.socket);this._bindEvents(this.signaller,config)}module.exports=SessionManager;util.inherits(SessionManager,EventEmitter);SessionManager.prototype.announce=function(targetId){var scope=targetId?this.signaller.to(targetId):this.signaller;debug("announcing self to: "+(targetId||"all"));scope.announce({room:this.room,role:this.role})};SessionManager.prototype.broadcast=function(stream,data){var peers=this.peers;var mgr=this;function connectPeer(peer,peerId){mgr.tagStream(stream,peerId,data);try{peer.addStream(stream)}catch(e){debug("captured error attempting to add stream: ",e)}debug("checking stream ready count ok: ",mgr.streamReadyCount===mgr.streamCount,mgr.streamCount,mgr.streamReadyCount);if(mgr.streamReadyCount===mgr.streamCount){mgr._sendReady(peerId);mgr._connectWhenReady(peerId)}}this.streamReadyCount+=1;debug("broadcasting stream "+stream.id+" to existing peers");Object.keys(peers).forEach(function(peerId){if(peers[peerId]){debug("broadcasting to peer: "+peerId);connectPeer(peers[peerId],peerId)}});eve.on("glue.peer.join",function(peer,peerId){debug("peer "+peerId+" joined, connecting to stream: "+stream.id);connectPeer(peer,peerId)});stream.onended=function(){eve.off("glue.peer.join",connectPeer)}};SessionManager.prototype.getStreamData=function(stream,callback){var id=stream&&stream.id;var data=this.streams[id];if(!id){return}if(data){callback(data)}else{eve.once("glue.streamdata."+id,callback)}};SessionManager.prototype.tagStream=function(stream,targetId,data){this.signaller.to(targetId).send("/streamdata",extend({},data,{id:stream.id,label:stream.label}))};SessionManager.prototype._bindEvents=function(signaller,opts){var mgr=this;debug("initializing event handlers");signaller.on("peer:ready",function(srcData){(mgr.peers[srcData&&srcData.id]||{})._ready=true;mgr._connectWhenReady(srcData.id)});signaller.on("peer:announce",function(data){var ns="glue.peer.join."+(data.role||"none");var peer;var monitor;debug("captured announce event for peer: "+data.id);if(data.room!==mgr.room){return debug("received announce for incorrect room")}if(mgr.peers[data.id]){return debug("known peer")}peer=mgr.peers[data.id]=rtc.createConnection(opts,opts.constraints);peer._ready=false;peer._role=data.role||"none";if(mgr.streamCount===0){mgr._sendReady(data.id)}eve("glue.peer.join."+peer._role,null,peer,data.id)});signaller.on("peer:leave",function(id){var peer=mgr.peers[id];debug("captured leave event for peer: "+id);if(peer){peer.close();mgr.peers[id]=undefined;eve("glue.peer.leave",null,peer,id)}});signaller.on("streamdata",function(data,src){mgr.streams[data.id]=data;eve("glue.streamdata."+data.id,null,data)})};SessionManager.prototype._connectWhenReady=function(peerId){var isMaster=this.signaller.isMaster(peerId);var peer=this.peers[peerId];var monitor;if(peer&&peer._ready&&this.streamReadyCount===this.streamCount){if(isMaster){this.channels.forEach(this._initChannel.bind(this,peerId))}else{peer.ondatachannel=this._handleDataChannel.bind(this,peerId)}monitor=rtc.couple(peer,peerId,this.signaller,this.cfg);monitor.once("connected",function(){eve("glue.peer.active."+peer._role,null,peer,peerId)});if(this.signaller.isMaster(peerId)){monitor.createOffer()}}return monitor};SessionManager.prototype._initChannel=function(peerId,config){var peer=this.peers[peerId];return this._monitorChannel(peer.createDataChannel(config.name),peerId)};SessionManager.prototype._handleDataChannel=function(peerId,evt){this._monitorChannel(evt.channel,peerId)};SessionManager.prototype._monitorChannel=function(channel,peerId){var emitChannelOpen=function(){eve("glue."+channel.label+":open",null,channel,peerId)};debug("channel "+channel.label+" discovered for peer: "+peerId,channel);if(channel.readyState==="open"){return emitChannelOpen()}channel.onopen=emitChannelOpen};SessionManager.prototype._sendReady=function(peerId){var peer=this.peers[peerId];if(!peer){return}debug("sending ready signal to: "+peerId);this.signaller.to(peerId).send("/peer:ready")}},{"cog/extend":15,"cog/logger":18,eve:20,events:1,"rtc-signaller":30,"rtc-tools":43,util:10}]},{},[12])(12)});